系统对象允许您在MATLAB中设计和模拟系统®。在MATLAB中使用System对象,如图所示。
本节中的示例展示了如何使用软件中预定义的System对象。如果使用函数创建和使用System对象,请使用条件代码指定对象创建。如果在循环中调用该函数,条件化创建可以防止出现错误。您还可以创建自己的System对象,请参阅创建系统对象。
本节展示如何使用DSP系统工具箱™和音频工具箱™中的预定义组件来设置系统:
dsp。AudioFileReader
—读取音频数据文件
dsp。FIRFilter
—过滤音频数据
audioDeviceWriter
—播放过滤后的音频数据
首先,使用默认属性设置创建组件对象。
audioIn = dsp.AudioFileReader;filtLP = dsp.FIRFilter;audioOut = audioDeviceWriter;
如果在创建对象时没有设置对象的属性,并且不想使用默认值,则必须显式设置这些属性。有些属性允许您在系统运行时更改它们的值。看到重新配置对象获取信息。
大多数属性是相互独立的。但是,一些系统对象属性启用或禁用另一个属性或限制另一个属性的值。为了避免错误或警告,您应该在设置依赖属性之前设置控制属性。
要显示对象的当前属性值,请在命令行键入该对象的句柄名(例如audioIn
)。要显示特定属性的值,键入objecthandle.propertyname
(如audioIn。文件名
)。
本节展示如何通过设置组件对象的属性来为系统配置组件。
如果您是单独创建组件而不是配置组件,请使用此过程。您还可以同时创建和配置组件,如后面的示例所述。
对于文件读取器对象,指定要读取的文件并设置输出数据类型。
对于滤波器对象,使用fir1函数指定滤波器分子系数,fir1函数指定低通滤波器阶数和截止频率。
对于音频设备写入器对象,请指定采样速率。在这种情况下,使用与输入数据相同的采样率。
audioIn。文件名=“speech_dft_8kHz.wav”;audioIn。OutputDataType =“单身”;filtLP。分子= fir1(160 .15点);audioOut。SampleRate = audioIn.SampleRate;
这个例子展示了如何创建系统对象组件并同时配置所需的属性。使用“Name”、“Value”参数对指定每个属性。
创建文件读取器对象,指定要读取的文件,并设置输出数据类型。
audioIn = dsp。AudioFileReader (“speech_dft_8kHz.wav”,…“OutputDataType”,“单身”);
创建过滤器对象并使用fir1函数指定过滤器分子。指定低通滤波器的阶数和第一个函数的截止频率。
filtLP = dsp。FIRFilter (“分子”fir1(160 .15点));
创建音频播放器对象,并将采样速率设置为与输入数据相同的速率。
audioOut = audioDeviceWriter (“SampleRate”, audioIn.SampleRate);
在确定了所需的组件并创建和配置了System对象之后,组装系统。您可以像使用其他MATLAB变量一样使用System对象,并将它们包含在MATLAB代码中。您可以将MATLAB变量传入和传出System对象。
使用系统对象和使用函数之间的主要区别是,系统对象使用两个步骤的过程。首先创建对象并设置其参数,然后运行该对象。运行该对象将初始化它并控制系统的数据流和状态管理。通常在代码循环中调用System对象。
您使用一个对象的输出作为另一个对象的输入。对于某些System对象,您可以使用这些对象的属性来更改输入或输出。要验证正在使用的输入和输出的适当数量,您可以使用输入参数个数
和nargout
在任何System对象上。有关所有可用的系统对象函数的信息,请参见系统对象的功能。
本节展示如何将这些组件连接在一起来读取、筛选和播放音频数据文件。while循环使用结束
函数来读取整个文件。
而~isDone(audioIn) audio = audioIn();%读取音频源文件y = filtLP(音频);%过滤数据audioOut (y);%播放过滤后的数据结束
通过直接在命令行输入或运行包含程序的文件来运行代码。当您运行系统的代码时,数据将通过对象进行处理。
对System对象的第一次调用将初始化并运行该对象。当System对象已经开始处理数据时,您不能更改不可调优的属性。
根据System对象的不同,其他规范也可能受到限制:
输入的大小
输入的复杂性
输入数据类型
可调属性数据类型
离散状态数据类型
如果System对象作者限制了这些规范,那么如果在使用System对象时试图更改它们,就会得到一个错误。
当系统对象已经开始处理数据时,您不能更改nontunable属性。您可以使用isLocked
来验证对象是否正在处理数据。处理完成后,可以使用释放
函数释放资源并允许更改不可调属性。
一些对象属性是可调,即使对象正在使用中,也可以更改它们。大多数System对象属性是不可调的。引用对象的引用页以确定单个属性是否可调。
在对象使用期间,调用算法后,一些System对象不允许更改输入复杂度、大小或数据类型。如果System对象限制了这些规范,则可以调用释放
更改这些规格。调用释放
也会重置System对象的其他方面,比如状态和离散状态。
在代码运行时,通过修改分子
过滤器对象的属性。下次调用对象时,更改生效。
重置(audioIn);%重置音频文件Wn = (0.05, 0.1, 0.15, 0.2);为Wn_X =1 /1000;filtLP。分子= fir1 (Wn (Wn_X), 160年“高”);音频= audioIn ();%读取音频源文件y = filtLP(音频);%过滤数据audioOut (y);%播放过滤后的数据结束