如何利用matlab自带的函数及工具箱对信号进行频谱分析

本文介绍了如何在MATLAB高版本中使用power_fftscope函数进行FFT分析,以及如何通过代码实现导出功能。重点讲解了函数与GUI的对应关系,以及如何处理非Simulink示波器数据的分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主打一个用尽可能少的代码,达成我们的目的

频谱图

1.工具箱实现。想必电气小伙伴们一定(是吗?)了解powergui中的FFT analysis工具。注:R2022b(或其它较高版本)可以在命令行窗口用代码powerFFT power_fftscope代码调出APP。

不了解怎么使用的小伙伴,请点击上图左上角的Help按钮查看官方详细帮助文档,下面展示一下使用效果:

2.代码实现。小伙伴们是否有过想把FFT分析结果图导出但奈何没有导出选项的苦恼(截图??)。在较低matalb版本(比如2018版)中的FFT analysis工具箱中是有菜单栏的,里面就包括了导出功能,然而高版本(2022版)中就只剩光秃秃的一个Help选项。

看来只能用代码分析绘图了。

正确的matlab使用者应该具备 有,绝不自己写的“觉悟”,不然岂不是“辜负”了官方的“Less code. More research.”初衷

matlab的工具箱一般包括GUI(APP)相关函数两块,一般GUI(APP)是基于相关函数开发的。而FFT Analyzer APP的主体分析功能就是基于power_fftscope函数实现的。

 通过一个使用案例,介绍这个函数与APP使用的对应关系:

% 初始化操作
% 用函数默认设置对VIwave变量中的数据进行FFT分析,分析结果返回给FFTDdata
[FFTdata] = power_fftscope(VIwave); 
FFTdata.input = 1; % 对应APP Signal
FFTdata.signal = 1; % 对应APP Dimension

FFTdata.startTime = 0.75; % 对应APP Start Time (s)
FFTdata.cycles = 40; % 对应APP Number of cycles
FFTdata.fundamental = 50; % 对应APP Fundamental frequency (Hz)
FFTdata.maxFrequency = 100; % 对应APP Max frequency for THD computation
% FFTdata.THDmaxFrequency = Inf; % Inf 对应 'Nyquist frequency' 选项;默认值就是Inf
FFTdata.THDbase = 'fund'; % 设顶FFT分析的基准频率:'fund'对应基频,也是默认值;'DC'对应直流
FFTdata.freqAxis = 'hertz'; % 频率轴显示方式:'hertz'对应Hz,也是默认值;'harmonicorder'对应 基准频率的阶数

% 用自定义的设置,再次进行FFT分析
% 无返回值则直接绘制bar图
power_fftscope(FFTdata)

% 有返回值则返回分析得到的结构体,可查看分析得到的数据
[FFTdataed] = power_fftscope(FFTdata);
DC0 = FFTdataed.DCcomponent;
% ……

代码power_fftscope(FFTdata)分析结果与APP完全一致,通过代码绘制得到的.fig图就可以进行相应的格式调整,图像导出自然也水到渠成。

 3.小妙招。数据来源不是simulink的示波器,是否还能利用上面的APP或函数?

用过以上APP和power_fftscope的小伙伴们肯定清楚,它们是针对simulink的示波器数据分析开发的。它们的数据输入格式(例子中的VIwave)需要是一种matlab自带的用于示波器数据存储的带时间的结构体。

 

 注:APP或函数无法识别输入变量有两种可能:变量保存格式不对;simulink的所有数据导出被存放在一个变量(out)中了

 可以看到,VIwave存放了两组信号(VIwave.signals 大小1*2),每组信号又包括3个信号(VIwave.signals.values 有3列 或 VIwave.signals.dimensions 值为3 ),这两组信号共用了一个时间,被存放在VIwave.time中。相比小伙伴看到现在,对“数据来源不是simulink的示波器,是否还能利用上面的APP或函数?”应该有答案了,那就是把示波器输出的带时间的结构体变量当作一个模板,用自己的数据替换掉模板里对应的时间和信号数据即可。这样power_fftscope函数均能可以直接用于分析。

举个栗子:

用5sin(100Πt)+0.5sin(150Πt)替换掉第一组数据中的第一个信号,并进行FFT分析

VIwave.signals(1).values(:,1) = 5*sin(50*2*pi*VIwave.time)+0.5*sin(75*2*pi*VIwave.time);

工具箱分析结果:

函数分析结果:

 

over... 

### MATLAB Powergui FFT 分析显示为空列表的原因及解决方案 当在 MATLAB 中使用 Powergui 进行 FFT 分析时,如果结果显示为空列表,通常可能是由于以下几个原因: 1. **信号源配置错误** 如果用于 FFT 分析的输入信号未正确连接或配置,则可能导致结果为空。确保所选信号确实存在有效数据并已正确链接到 FFT 分析模块[^1]。 2. **采样时间设置不当** 不合适的采样时间和频率范围可能会导致无法捕捉有效的频谱成分。应仔细检查仿真模型中的采样率设定以及 FFT 参数对话框内的选项,确认这些参数能够覆盖目标频率区间[^2]。 3. **FFT 设置不匹配** 需要验证 FFT 的窗口长度、重叠比例以及其他相关属性是否适合当前应用场合的要求。对于某些特定类型的信号处理任务来说,调整上述参数可能有助于改善输出质量。 4. **初始化问题** 某些情况下,在初次运行仿真实验之前可能存在必要的预设步骤未能完成的情况。尝试重新启动 Simulink 或者清除工作区后再执行一次完整的模拟过程看是否有改观。 5. **版本兼容性差异** 使用不同版本之间的工具箱函数接口变化也可能引起此类现象的发生。查阅官方文档了解是否存在针对最新版软件所做的更新说明,并据此作出相应修改以保持一致性。 为了更好地理解具体情境下的故障排除方法,下面给出一段简单的代码示例来展示如何创建一个基本的电力系统模型并通过 Powergui 执行 FFT 分析: ```matlab % 创建一个新的Simulink模型 new_system('my_power_sys'); open_system('my_power_sys'); % 添加电源元件和其他组件构建电路... add_block('simpower/Elements/Voltage Source',... 'my_power_sys/vsource','Position',[80,96,120,72]); % 插入Scope和Spectrum Analyzer观察波形与频域特性 add_block('simulink/Sinks/Scope',... 'my_power_sys/scope','Position',[240,96,280,72]); % 放置Powergui模块以便后续调用其内部功能 add_block('simpower/User Interface/Powergui',... 'my_power_sys/powergui','Position',[320,96,360,72]); set_param(gcb,'StartFcn',''); set_param(gcs,'SimulationCommand','update'); drawnow; % 开始仿真前先保存项目文件防止意外丢失进度 save_system('my_power_sys.slx') % 启动仿真流程获取测量数据供进一步分析 sim('my_power_sys') ``` 通过以上措施应该可以有效地定位并解决问题所在之处。当然实际操作过程中还需要结合具体情况灵活应对各种突发状况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值