如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)

相信不少人在做实验或者做嵌入式软件测试的时候会遇到需要利用FFT进行频谱分析的情况,我们通过Simulink仿真可以快速地进行简单的频谱分析,可以省去写一堆代码(当然用matlab代码实现也利于我们理解FFT相关原理、参数和解算过程)。
本文主要针对从实际示波器获取的数据或者从单片机/微控制器发送至电脑的数据进行分析,它们的共同特点是数据均来源于matlab外部。

具体操作流程

1.导入数据到工作区

这里以单片机发送给电脑的数据为例,首先将接收到的采样值暂时存在EXCEL里面(这里只发送了采样值数据,已知采样频率)。然后打开MATLAB命令行建立两列数据(也可以创建一个.m文件),分别是采样时间点和每一个采样时刻对应的采样值。通过 ts=(0:0.00005:0.05)'可以建立一个时间值的列向量,其中0是起始时刻,0.00005是步进值(取决于我们的采样频率,此处20kHz),0.05是终止时刻,这些取值根据实际情况自行改动, ’ 是表示转置为列向量;然后建立采样值的列向量ia=0(任意给个初值),我们在工作区点开该变量,通过复制我们ECXEL里面的采样值到该变量的表格里完成其赋值(这里也可以通过“导入数据”进行)。
如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)

2.建立仿真模型

创建一个simulink仿真模型并保存,在模型中导入“powergui”、示波器“scope”和“From Workspace”,使用“From Workspace”将数据ts和ia输入到示波器中。
如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)此时我们运行仿真便可在示波器上看到波形。
如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)

3.设置示波器数据输出

点击示波器左上角齿轮图标,设置‘Configuration Propeties’的Logging项,选中log data to workspace,创建变量名(自定义)和保存形式(设为Structure With Time)。保存simulink文件,并仿真一次。
如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)

4.打开FFT分析工具

双击powergui,选择FFT分析工具,在可用信号中选择刚刚自定义过名字的那个信号,设置好起始时间,周期数,最大频率等参数就可以点击Display就得到了FFT分析结果。
如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)如何使用Simulink仿真对来源于外部的一组数据进行频谱分析(FFT)

PS.

当发现FFT工具下没有可用信号时需要设置一下菜单栏的*simulation>>model configuration parameters>>Data Import/Export>>single simulation output*,前面的勾勾取消掉,再重新仿真一次就可以在FFT工具的Available Signals窗口看到变量了。

因为本例中信号值数据来源于仿真文件外部,所以要事先导入,示波器来源的数据也是类似的操作,只不过它既有时间也有采样值,都无需自己建立时间轴数据。如果是利用仿真框图搭建的电路,直接对电路中的信号进行FFT的话则从上面第3个步骤开始即可。
本实验所用Matlab版本为2019a。以上内容由博主亲测有效,第一次写博客,疏漏出错之处望批评指正。

致谢!本文参考的链接如下:
[1] https://blog.csdn.net/tuxinbang1989/article/details/80593502.
[2] https://blog.csdn.net/jiekencuo5135/article/details/97235233.
[3] https://ww2.mathworks.cn/matlabcentral/answers/472454-fft-analysis-through-powergui-block-is-showing-empty-in-signal-options.
[4] https://wenku.baidu.com/view/cc7fb7a6172ded630a1cb600.html.