基于Matlab的FFT滤波:谐波分析、频段清除与数据提取
基于matlab的FFT滤波可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除对已有数据特定频段的数据进行提取也可以。 优点是滤波前后波形无相位滞后幅值衰减可补偿不足之处在于不支持实时滤波。 图一是将图二的信号(含三次谐波)进行140hz-150hz频段谐波清除前后的时域及频谱图图3是对给定数据进行特定频段信号提取。江湖救急最近实验室师弟做电力谐波分析卡在滤波环节正好翻出我两年前写的MATLAB频域滤波脚本。这玩意儿虽然不能实时处理但对付示波器导出的实验数据是真香。直接上干货教你怎么用FFT玩转自定义频段滤波。先看个暴力操作% 读取任意格式数据以CSV为例 rawData readtable(scope_data.csv); signal rawData.Waveform; % 假设波形存储在Waveform列 Fs 1e4; % 采样率自己填实测值 % 快速傅里叶开挂 N length(signal); freqAxis (-N/2:N/2-1)*(Fs/N); Y fftshift(fft(signal));这里有个坑很多人直接用fft完事但fftshift才是频谱对齐频率轴的关键。不信邪的可以注释掉这行看看频谱图会不会左右镜像。重点来了——频段清除黑魔法% 构造140-150Hz屠杀结界 killBand (abs(freqAxis) 140) (abs(freqAxis) 150); Y_clean Y .* (1 - killBand); % 转置防维度打架 % 回时域记得补偿幅值 filteredSignal real(ifft(ifftshift(Y_clean))) * (2/N);看到那个(2/N)没这是补偿FFT变换的能量损失。曾经有个师兄没加这个系数滤波后幅值腰斩在组会上被老板怼了半小时...基于matlab的FFT滤波可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除对已有数据特定频段的数据进行提取也可以。 优点是滤波前后波形无相位滞后幅值衰减可补偿不足之处在于不支持实时滤波。 图一是将图二的信号(含三次谐波)进行140hz-150hz频段谐波清除前后的时域及频谱图图3是对给定数据进行特定频段信号提取。想提取特定频段改个符号就行% 比如提取50-60Hz工频信号 extractBand (abs(freqAxis) 50) (abs(freqAxis) 60); Y_extract Y .* extractBand;这里有个骚操作把提取后的频谱用hold on叠加到原频谱上立马get到论文里的对比效果图。比Origin画图快多了亲测组会前十分钟能出图。验证环节不能少% 时域波形对比 subplot(2,1,1) plot(signal), hold on plot(filteredSignal) legend(原始信号,滤波后) % 频谱打脸验证 subplot(2,1,2) plot(freqAxis, abs(Y)), hold on plot(freqAxis, abs(Y_extract))当看到滤波后的频谱在140-150Hz区间突然凹下去一块那种满足感比吃鸡还刺激。不过要小心频谱泄露——加个汉宁窗没必要我们做的是事后分析直接暴力截断更带劲。实战经验Simulink导出的.mat数据直接用load读取比csv快10倍碰到复数信号把real()去掉但记得检查虚部是否小于1e-5采样率一定要准去年有个妹子把50kHz设成50Hz结果滤波后信号亲妈都不认识最后说下局限性这方法处理10秒长的1MHz采样数据时我的拯救者Y7000会卡成PPT。所以...数据量大的时候还是搞个高通/低通滤波器模块吧别跟自己电脑过不去。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2438082.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!