主要内容

系统对象与MATLAB函数

系统对象与MATLAB函数

许多系统对象都有matlab®功能对应物。对于简单,一次性计算,请使用MATLAB函数。但是,如果您需要设计和模拟具有许多组件的系统,请使用系统对象。如果您的计算需要管理内部状态,则使用系统对象也适合,该输入包含随时间或处理大数据流而变化的输入。

使用仅使用MATLAB功能的具有不同执行阶段和内部状态构建动态系统将需要复杂的编程。您需要代码才能初始化系统,验证数据,管理内部状态,并重置并终止系统。系统对象在执行期间自动执行许多这些管理操作。通过将系统对象与其他MATLAB函数与其他MATLAB函数组合,您可以简化代码并提高效率。

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

此示例显示如何编写MATLAB函数代码以阅读音频数据。

代码从文件读取音频数据,过滤它,并播放过滤的音频数据。音频数据在帧中读取。此代码会产生与下一个示例中的系统对象代码相同的结果,允许您比较方法。

找到源音频文件。

fname ='speem_dft_8khz.wav';

从源文件获取样本总数和采样率。

audioInfo = AudioInfo(FNAME);maxsamples = audioinfo.totalsamples;FS = AudioInfo.Sampleate;

定义要使用的过滤器。

B = FIR1(160,.15);

初始化过滤器状态。

z =零(1,磁符(b)-1);

定义一次要处理的音频数据量,并初始化while循环索引。

框架= 1024;nidx = 1;

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

虽然nidx <= maxsamples(1)-framesize + 1 audio = audioread(fname,[nidx nidx + framesize-1]);[y,z] =滤波器(b,1,音频,z);声音(y,fs);nidx = nidx +框架;结尾

该循环使用显式索引和状态管理,这可能是一种繁琐而容易出错的方法。您必须详细了解各州,例如,大小和数据类型。仅此MATLAB的代码的另一个问题是声音功能不设计为实时运行。由此产生的音频是不稳定的,几乎听到。

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

此示例显示如何编写系统对象代码以读取音频数据。

该代码使用DSP系统工具箱™软件中的系统对象从文件读取音频数据,过滤它,然后播放过滤的音频数据。此代码会产生与先前显示的MATLAB代码相同的结果,允许您比较方法。

找到源音频文件。

fname =“speem_dft_8khz.wav”;

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

AudioIn = dsp.audiofilereader(fname,'outputdatatype''单身的');

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

filtlp = dsp.firfilter('分子',fir1(160,.15));

定义系统对象以播放过滤的音频数据。

AudioOut = audiodeviceWriter('采样率',audioin.samplerate);

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

尽管〜Isdone(AudioIn)Audio = AudioIn();%读取音频源文件y = filtlp(音频);%过滤数据频道(Y);%播放过滤的数据结尾

此系统对象代码避免了仅MATLAB代码中存在的问题。如果不需要显式索引,则文件读取器对象在过滤器管理状态时管理数据帧大小。音频设备编写器对象在处理时播放每个音频帧。