基于MATLAB的FFT频谱分析、滤波及谐波提取技术:实现仿真与外部数据频谱处理及频段定制清除...
基于matlab的FFT频谱分析和滤波,谐波提取,可以实现对仿真模型中示波器的波形数据或者外部采样数据进行频谱分析和自定义频段清除,也可以对已有数据特定频段的数据进行提取。基于matlab的FFT频谱分析和滤波,谐波提取,可以实现对仿真模型中示波器的波形数据或者外部采样数据进行频谱分析和自定义频段清除,也可以对已有数据特定频段的数据进行提取。这种频域滤波相当于在频谱图上画个矩形框,把框外的频率成分
基于matlab的FFT频谱分析和滤波,谐波提取,可以实现对仿真模型中示波器的波形数据或者外部采样数据进行频谱分析和自定义频段清除,也可以对已有数据特定频段的数据进行提取。 滤波前后波形无相位滞后。
直接动手搞信号处理最爽了,尤其是用MATLAB这种工具。今天咱们来点硬核操作——用FFT把波形扒光看看里面藏着什么妖魔鬼怪,再给它做个"外科手术"切掉不想要的频率。
先搞个带噪声的信号试试手。假设我们有个50Hz基波叠加了三次谐波,还混着随机噪声:
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs;
signal = 0.7*sin(2*pi*50*t) + 0.3*sin(2*pi*150*t) + 0.2*randn(size(t));
这段代码生成的信号就像被电磁干扰的电源信号。接下来用FFT扒开它的频域底裤:
nfft = 2^nextpow2(length(t)); % 取最近的2次幂
Y = fft(signal, nfft);
f = fs/2*linspace(0,1,nfft/2+1);
amplitude = 2*abs(Y(1:nfft/2+1))/length(t);
重点来了:nextpow2确保FFT计算效率,绝对值和2倍缩放是为了补偿单边频谱的幅值丢失。画出来的频谱图应该能明显看到50Hz和150Hz两个尖峰,其他频段都是噪声在乱窜。
现在要干掉高频噪声,用零相位滤波器最合适不过。比如设计个100Hz低通滤波器:
[b,a] = butter(4, 100/(fs/2), 'low');
filtered_signal = filtfilt(b, a, signal);
注意这里用的是filtfilt而不是普通的filter,前者正反两次滤波彻底消除相位延迟,就像给信号做了个对称手术,处理后的波形和原波形在时间上完全对齐。
基于matlab的FFT频谱分析和滤波,谐波提取,可以实现对仿真模型中示波器的波形数据或者外部采样数据进行频谱分析和自定义频段清除,也可以对已有数据特定频段的数据进行提取。 滤波前后波形无相位滞后。
如果想精确狙击特定频段,比如提取三次谐波:
Y_filtered = Y;
Y_filtered(abs(f-150)>5) = 0; % 保留150±5Hz
harmonic = real(ifft(Y_filtered));
这种频域滤波相当于在频谱图上画个矩形框,把框外的频率成分直接清零。不过要注意补零长度的问题,ifft之后记得截取到原信号长度。
最后来个效果验证:原信号和滤波后的信号做对比,肉眼可见高频噪声被压制,基波波形保持完美。频谱图上应该只剩下干净的50Hz峰,而谐波提取后的信号则是个完美的150Hz正弦波。
这种玩法在电源质量分析、振动信号处理中特别实用。下次遇到信号干扰问题,记得先上FFT照妖镜,再操刀滤波器,比盲目调电路高效多了。

更多推荐
所有评论(0)