主要内容

MATLAB使用系统对象的系统设计

MATLAB中的系统设计与仿真

系统对象允许您在Matlab中设计和模拟系统®。您在MATLAB中使用System对象,如本图所示。

  1. 创建单个组件-创建要在系统中使用的System对象。创建单个组件。除了具有系统工具箱提供的系统对象外,还可以创建自己的系统对象。看创建系统对象

  2. 配置组件-如果有必要,改变对象的属性值来建模你的特定系统。所有System对象™属性都具有默认值,您可以使用这些默认值而无需更改它们。看配置组件

  3. 将组件组装为系统编写一个MATLAB程序,包括那些系统对象,使用MATLAB变量作为输入和输出连接它们,以模拟你的系统。看连接系统对象

  4. 你的系统运行-运行程序。您可以在系统运行时更改可调属性。看你的系统运行重新配置对象

创建单个组件

本节中的示例展示了如何使用软件中预定义的System对象。如果使用函数创建和使用System对象,请使用条件代码指定对象创建。将创建条件化可以防止在循环中调用该函数时出现错误。您还可以创建自己的System对象,参见创建系统对象

本节展示如何使用DSP system Toolbox™和Audio Toolbox™中的预定义组件来设置系统:

  • dsp.audiofilereader.- 阅读音频数据的文件

  • dsp.firfilter.—过滤音频数据

  • audiodevicewriter.- 播放过滤的音频数据

首先,使用默认属性设置创建组件对象。

AudioIn = dsp.audiofilereader;filtlp = dsp.firfilter;AudioOut = audiodeviceWriter;

配置组件

何时配置组件

如果在创建它时未设置对象的属性并且不想使用默认值,则必须显式设置这些属性。某些属性允许您在系统运行时更改其值。看重新配置对象有关信息。

大多数属性是相互独立的。但是,一些System对象属性启用或禁用另一个属性或限制另一个属性的值。为了避免错误或警告,您应该在设置依赖属性之前设置控制属性。

显示组件属性值

要显示对象的当前属性值,请在命令行中键入该对象的句柄名称(例如audioIn).要显示特定属性的值,请键入ObjectHandle.Propertyname.(如isaivin.filename.).

配置组件属性值

本节展示如何通过设置组件对象的属性为系统配置组件。

如果您已单独创建组件,请使用此过程。您还可以同时创建和配置组件,如稍后的示例中所述。

对于文件读取器对象,指定要读取的文件并设置输出数据类型。

对于过滤器对象,使用FIR1功能指定滤波器分器系数,该系数指定低通滤波器顺序和截止频率。

对于音频设备写入器对象,指定采样率。在本例中,使用与输入数据相同的采样率。

AudioIn.Filename =.“speech_dft_8kHz.wav”;AudioIn.OutputDatatype =.“单身的”;filtlp.numerator = fir1(160,.15);AudioOut.Samplerve = AudioIn.Sampleate;

同时创建和配置组件

这个示例展示了如何同时创建System对象组件和配置所需的属性。使用“Name”、“Value”参数对指定每个属性。

创建文件读取器对象,指定要读取的文件,并设置输出数据类型。

AudioIn = DSP.AudioFilereader(“speech_dft_8kHz.wav”......“OutputDataType”“单身的”);

创建过滤器对象并使用fir1函数指定过滤器分子。指定低通滤波器的顺序和fir1函数的截止频率。

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

创建音频播放器对象并将采样率设置为与输入数据相同的速率。

audioOut = audioDeviceWriter ('采样率',audioin.samplerate);

将组件组装为系统

连接系统对象

确定您需要的组件并已创建并配置系统对象后,组装系统。您使用像其他MATLAB变量一样的系统对象,并将其包含在MATLAB代码中。您可以将MATLAB变量传递到系统对象中。

使用系统对象和使用函数之间的主要区别在于系统对象使用两步过程。首先,创建对象并设置其参数,然后运行对象。运行对象初始化它并控制系统的数据流和状态管理。您通常在代码循环中调用系统对象。

您将输出从对象中的输出作为另一个对象的输入。对于某些系统对象,您可以使用这些对象的属性来更改输入或输出。要验证是否使用了适当数量的输入和输出,可以使用输入参数个数nargout对于任何System对象。有关所有可用的System对象函数的信息,请参见系统对象的功能

在系统中连接组件

本节介绍如何将组件连接在一起读取,过滤器和播放音频数据文件。while循环使用已经完成了函数读取整个文件。

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

你的系统运行

通过直接在命令行中键入或运行包含您程序的文件来运行代码。运行系统的代码时,通过对象处理数据。

在您的系统运行时,您无法更改的内容

第一个调用系统对象初始化并运行对象。当系统对象已开始处理数据时,无法更改非脉冲属性。

根据系统对象,还可能限制其他规格:

  • 输入大小

  • 输入复杂性

  • 输入数据类型

  • 可调属性数据类型

  • 离散状态数据类型

如果System对象的作者限制了这些规范,那么如果在使用System对象时试图更改它们,就会出现错误。

重新配置对象

更改属性

当系统对象已开始处理数据时,无法更改nontunable特性。您可以使用锁住了,以验证该对象是否正在处理数据。处理完成后,可以使用释放函数来释放资源并允许更改非innable属性。

一些对象属性是调节,即使对象正在使用,也可以更改它们。大多数系统对象属性都是不可运送的。请参阅对象的参考页面以确定是否可调谐单个属性。

更改输入复杂性、维度或数据类型

在使用对象期间,在调用算法之后,一些System对象不允许更改输入复杂度、大小或数据类型。如果System对象限制这些规范,您可以调用释放更改这些规范。打电话释放也重置System对象的其他方面,如状态和离散状态。

在系统中更改可调属性

此示例显示如何将筛选器类型更改为高通滤波器,因为代码通过修改代码正在运行分子过滤器对象的属性。下次调用对象时,更改生效。

重置(AudioIn);%重置音频文件Wn = (0.05, 0.1, 0.15, 0.2);为了x = 1:4000 wn_x = ceil(x / 1000);filtlp.numerator = fir1(160,wn(wn_x),'高的');Audio = AudioIn();%读取音频源文件y = filtLP(音频);%过滤数据频道(Y);播放过滤后的数据结尾