主要内容

系统对象和MATLAB函数

系统对象与MATLAB函数

许多系统对象MATLAB®函数。为简单,一次性计算,使用MATLAB函数。然而,如果你需要设计和模拟系统与许多组件,使用系统对象。使用系统对象也是合适的如果你的计算需要管理内部状态,随时间改变的输入,或处理大型的数据流。

建立一个动态的系统,不同的执行阶段和内部状态只使用MATLAB函数需要复杂的编程。你需要代码来初始化系统,验证数据,管理内部状态,复位和终止系统。系统对象自动执行期间执行这些管理操作。通过结合系统对象与其他MATLAB程序功能,可以简化代码,提高效率。

处理音频数据只使用MATLAB函数代码

这个例子展示了如何编写MATLAB函数只用于读取音频数据的代码。

代码从一个文件,读取音频数据过滤器,过滤后的音频数据。读取音频数据的帧。这段代码会产生相同的结果作为系统对象代码在下一个示例中,允许您比较方法。

定位源音频文件。

帧=“speech_dft_8kHz.wav”;

获得样品的总数和源文件的采样率。

audioInfo = audioInfo(帧);maxSamples = audioInfo.TotalSamples;fs = audioInfo.SampleRate;

定义要使用的过滤器。

b = fir1(160 .15点);

初始化滤波器的状态。

z = 0(1,元素个数(b) (1);

定义的音频数据流程,并初始化while循环指数。

frameSize = 1024;nIdx = 1;

定义while循环处理音频数据。

虽然nIdx < = maxSamples (1) -frameSize + 1音频= audioread(帧,[nIdx nIdx + frameSize-1]);[y, z] =过滤器(b, 1,音频,z);声音(y, fs);nIdx = nIdx + frameSize;结束

循环使用显式的索引和状态管理,它可以是一个冗长乏味且容易出错的方法。你必须有详细的知识,例如,大小和数据类型。这个MATLAB-only代码的另一个问题是,良好的功能不是为了实时运行。由此产生的音频是波涛汹涌的,几乎听不见。

处理音频数据使用系统对象

这个例子展示了如何编写系统对象代码用于读取音频数据。

代码使用系统对象从DSP系统工具箱™软件从文件读取音频数据,过滤,然后过滤音频数据。这段代码会产生相同的结果作为MATLAB代码之前,允许您比较方法。

定位源音频文件。

帧=“speech_dft_8kHz.wav”;

定义系统对象™阅读该文件。

audioIn = dsp.AudioFileReader(帧,“OutputDataType”,“单一”);

定义系统对象来过滤数据。

filtLP = dsp.FIRFilter (“分子”fir1(160 .15点));

定义系统对象过滤音频数据。

audioOut = audioDeviceWriter (“SampleRate”,audioIn.SampleRate);

定义while循环处理音频数据。

~结束(audioIn)音频= audioIn ();%读取音频源文件y = filtLP(音频);%过滤数据audioOut (y);%的过滤数据结束

这避免了系统对象代码问题出现在MATLAB-only代码。不需要显式的索引、读者对象管理的文件数据帧大小而过滤管理状态。音频设备的作者对象每个音频帧处理。