开始使用Simulink进行信号处理
本视频展示了一个使用Simulink设计信号处理系统的例子®.
你从一个空白的Simulink模型开始,设计一个信号处理算法来预测天气是晴天还是阴天,以优化太阳能电网产生的电力。视频引导您分析传感器信号,设计滤波器,最后生成硬件部署的代码。
在视频结束时,您将学习Simulink的基础知识,以及如何使用基于模型的设计来建模、模拟、测试和实现现实世界的信号处理系统。示例中使用的模型文件可以在下面的链接中找到。
我们生活在一个充满传感器的世界。它们在工厂的机器人里,在我们的汽车上,在我们的手腕上,甚至在我们的冰箱里,以确保我们的食物保持新鲜。这些传感器产生信号。
在本视频中,我们将使用Simulink来处理来自传感器的信号。我们将对信号进行光谱分析。在此基础上,我们将设计和构建数字滤波器作为信号处理算法的一部分。我们将评估算法的性能,一旦它准备好,将模型转换为可以嵌入实时硬件的C代码。让我们开始吧…
在MathWorks位于马萨诸塞州纳蒂克的总部,有可以发电的太阳能电池板。我们将每15分钟测量一次阵列产生的能量。这是我们的信号。
当然,功率取决于日照量,日照量取决于一天中的时间……和天气。
对可再生能源生产和需求变化的预测和管理是可再生能源生产的重要组成部分。为了使产生的电力更平稳,在晴天,我们可以在电池中储存一部分电力。然后在阴天,我们用它来补充较低的发电量。
让我们用Simulink中的信号处理技术来设计一个可以预测天气是晴是阴的系统。
您可以通过单击MATLAB工具条上的Simulink按钮启动Simulink。这将打开Start Page,在这里您可以创建新模型、查找示例,甚至查找基础训练。
我们将从头开始我们的模型,所以我们将选择空白模型,并将其保存为sunnyvscloudy。
Simulink模型是由块和信号线建立的。打开Library Browser查看所有可用的块。
我们将开始可视化两个电源信号-一个来自晴天和一个来自阴天。
为了查看信号,让我们将两个输入端口(简称Inports)拖到模型中。然后添加一个Scope块。
让我们将两个导入块标记为“Sunny Day”和“Cloudy Day”,将Scope块标记为“Time Domain”。
我们可以通过单击和拖动将这些块与信号线连接在一起。双击并输入信号线名称即可为信号线贴标签。
现在我们需要数据。在MATLAB中,我们有两个向量,sunnyDay和cloudyDay,代表六月两个特殊日子的功率测量。相应的时间戳以天为单位。
我们还有样本频率,单位是每天的样本,单位是变量Fs。每15分钟采样一次意味着我们每天能得到96个样本。
我们必须设置两个导入的采样时间,因此双击每个导入来调整其块参数。在信号属性选项卡下,设置采样时间为采样频率的倒数。
要将数据引入Simulink,我们可以转到模型设置窗口,然后是数据导入/导出窗格,并添加时间和两个电源信号作为输入。我们还应该将总模拟时间设置为1天。
现在,我们可以通过单击工具条中的run按钮来运行我们的模型。
让我们双击Scope块来查看信号。
让我们用直线连接数据点。
平滑的黄线是晴天。蓝线显示的是阴天产生的能量更少,正如你所预期的那样,而且当云层经过太阳能阵列时,也有很多短期的变化。
那么,我们如何利用这些特征来决定今天是晴天还是阴天呢?
我们来看看频域中的这些信号。我们将使用光谱分析,它可以帮助我们测量每个信号的频率含量。我们首先从DSP系统工具箱中添加一个频谱分析仪块,然后将两个信号连接到它。
要将信号线分支,可以在将信号线拖到块上时单击右键。
我们有短信号,所以我们需要改变频谱分析仪块中的一些设置,以便我们能够正确地看到它们。
这一次,我们可以通过按顶部的绿色按钮从Spectrum Analyzer内部运行我们的模型。让我们打开传说,看看哪一天是哪一天。
那么,我们在看什么?
x轴是频率值。y轴表示在给定频率下信号的功率。虽然默认的时间单位是秒,但我们实际上是以天为单位测量时间的。所以x轴是周期/天,而不是周期/秒(或Hz)。
我们看到,这两天的低频内容大致相同,但多云的那一天有更多的高频内容。还记得那些短时间的变化吗?这就是它们在频域的样子。
所以也许我们可以通过比较高频率的功率和某个阈值来区分晴天和阴天。
然而,太阳能板在夏季产生的能量更多,而在冬季则更少,这意味着这一门槛将在全年中不断变化。
我们希望一年四季都有一个恒定的阈值。如果我们用较低频率的功率归一化高频功率,我们可以使用一个固定的阈值。所以,让我们试着计算前75%的频率的总功率与后25%的频率的总功率之比。
那么,我们如何区分低频和高频呢?通过构建数字滤波器。我们需要一个低通滤波器的低频内容和一个高通滤波器的高频内容。
要构建这两个过滤器,我们首先将模型剥离回单个导入和作用域块....并从DSP系统工具箱中拖入过滤器实现向导块。
双击该块打开过滤器设计器应用程序。如果你在MATLAB中设计过过滤器,你可能以前使用过这个应用程序。让我们点击“设计滤波器”图标开始设计低通滤波器。
因为我们每15分钟才能得到样本,所以我们需要一个只处理少量样本的过滤器。我们将使用切比雪夫1型IIR滤波器,并将滤波器的顺序设置为4。
然后我们必须指定截止频率。记住,我们想让较低的25%的频率通过。所以我们将选择归一化频率并将wpass设置为0.25。我们将保持通带波纹小于0.05 dB。
最后,按下底部的设计过滤器按钮。我们看到新的响应是我们想要的。
通过单击组延迟响应按钮,我们可以检查过滤器引入的延迟。对于小于0.25的频率,延迟约为3个样本。这个我们以后再讲。
现在我们已经完成了过滤器的设计,让我们通过单击Realize model图标将其添加到我们的Simulink模型中。我们将该块命名为“Lowpass Filter”,并选择选项“Build model using basic elements”。通过这种方式,我们可以看到用于制作过滤器的基本Simulink块,如延迟、相乘和添加块。
当我们点击“实现模型”按钮时……
...在我们的模型中创建了一个新的子系统。让我们双击它来查看内部。
果然,滤波器只是单元延迟、增益和添加块,现代的DSP芯片和fpga都经过了优化来实现。
现在是高频内容。我们可以重复同样的过程来设计和实现高通滤波器。在这种情况下,高通滤波器将输入信号延迟1个样本。
好了,让我们在电源信号上测试我们的新滤波器。
我们添加了三条并行路径:一条用于原始电源信号,一条用于低通滤波版本,一条用于高通滤波版本。我们要比较它们。
但是记住,低通滤波器引入了3个样本的延迟,高通滤波器引入了1个样本的延迟。所以我们需要添加一些延迟块,以确保三个信号对齐。双击模型,输入“delay”,可快速在3个样本的原始信号上添加一个延时块,在2个样本的高通信号上添加一个延时块。
我们将修改模型,使其适用于我们拥有的更长的两年半数据集,数据集存储在变量幂函数中,时间戳为t。
让我们在瞄准镜上放大六天。
黄线是原始电源信号。蓝线为低通信号,代表总体平滑趋势。红线是高通信号,它捕捉到由于云层覆盖而产生的变化。在多云时期,这些变化可能会很大。
既然我们已经分离了低频和高频信号,我们就可以构建Sunny Test了。
我们需要在足够的时间内进行聚合,以便我们的过滤器给出合理的结果,但我们不想等待太长时间才能得到答案。所以我们将使用3小时的窗口,也就是12个测量值!
为了在时间窗口内存储过滤器输出,我们将使用DSP系统工具箱中的缓冲区块。
双击缓冲区,我们可以将缓冲区大小设置为12,以处理3小时的窗口。我们需要在每个过滤器路径上有一个缓冲区。
现在我们将使用一些基本的数学操作块来计算我们的阳光测试,比如绝对值、元素的和和和分割块。
让我们添加一个块来比较比率和阈值。使用Simulink,您可以很容易地进行实验,为这个阈值找到一个好的值。22可以很好地工作,但是可以随意使用这个值,看看它如何改变结果。
比较的输出为0表示非晴天,1表示晴天。让我们将其缩放到匹配最大功率,这样它就能在图中很好地显示出来。
我们应该删除Scope块上的额外输入端口。
在运行之前,请注意这些缓冲区为信号增加了一些延迟。为了与原始信号保持一致,我们需要将延迟增加12。
让我们运行一下,看看我们的算法效果如何。如果我们把之前的同一天放大,它看起来运行得很好。
但如果我们观察不同的六天,就会发现我们的方法有问题。有时它说半夜是晴天!
为了解决这个问题,让我们通过添加日光检测器来修改我们的阳光测试。我们只需将低频功率与另一个阈值进行比较,就可以知道太阳是否真的升起了。我们可以用AND块组合这两个条件。
重新运行模型并检查那些日子……我们已经解决了错误检测的问题。
现在我们有了一个工作算法,我们希望将它部署到嵌入式系统中。通过嵌入式Coder,我们可以将其部署到Arduino、树莓派、Zynq等平台上。
让我们将模型部署到Arduino Uno板上。
我们将打开模型设置窗口并选择硬件板。然后,我们用输出端口替换用于测试的Scope块。
现在让我们生成代码。这将使用我们的Simulink模型并生成所有我们需要编译模型以进行部署的C文件。您还可以为其他嵌入式系统生成通用的C代码。
或者……部署到FPGA的VHDL或Verilog代码。
一旦我们有了生成的代码,我们就把它移植到太阳能阵列的嵌入式硬件上。
看看我们用Simulink做了什么!我们现在有稳定的可再生能源来源。
您已经了解了如何从空白画布到运行在嵌入式系统上的信号处理应用程序。你也可以试试这个。您可以下载这些文件。
现在你已经对使用Simulink有了一个感觉,是时候学习它了。学习Simulink的最好方法是使用它。所以启动Simulink OnRamp,它会教你基本知识。它是免费的,只需要几个小时。
欢迎来到仿真软件!
下载代码及文件
了解更多
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。