
基于Matlab的FFT滤波:实现波形谐波分析与频段清除
# 基于Matlab的FFT滤波:谐波分析与频段清除
最近在玩Matlab的FFT滤波,感觉还挺有意思的。它能对Simulink模型里示波器的波形数据,或者
外部的mat数据、csv数据进行谐波分析(FFT),还能自定义频段清除。
## 一、原理简介
简单来说,FFT就是快速傅里叶变换,它能把时域信号转换到频域,这样我们就能清楚地看到信号中
不同频率成分的分布啦。通过它,我们可以很方便地找出信号中的谐波成分。然后呢,根据需求可以自定
义频段进行清除,从而对信号进行滤波处理。
## 二、代码示例
```matlab
% 假设我们有一个包含三次谐波的信号
fs = 1000; % 采样频率
t = 0:1/fs:1-1/fs;
signal = sin(2*pi*50*t) + sin(2*pi*150*t) + sin(2*pi*250*t);
% 进行FFT变换
N = length(signal);
Y = fft(signal);
f = fs*(0:N/2-1)/N;
% 定义要清除的频段
low_freq = 140;
high_freq = 150;
% 找到频段对应的索引
low_index = find(f>=low_freq, 1, 'first');
high_index = find(f>=high_freq, 1, 'first');
% 构建滤波后的频域数据
Y_filtered = Y;
Y_filtered(low_index:high_index) = 0;
% 进行IFFT变换得到滤波后的时域信号
filtered_signal = ifft(Y_filtered);