基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除,对已有数据特定频段的数据进行提取也可以。 优点是滤波前后波形无相位滞后,幅值衰减可补偿,不足之处在于不支持实时滤波。 图一是将图二的信号(含三次谐波)进行140hz-150hz频段谐波清除前后的时域及频谱图,图3是对给定数据进行特定频段信号提取。

在信号处理的世界里,基于Matlab的FFT滤波有着独特的魅力。它就像一个神奇的工具包,能对各种来源的数据施展“魔法”,实现复杂的谐波分析以及自定义频段的处理。

数据来源与处理目标

它可以处理Simulink模型中示波器捕获的波形数据,也能对外部的mat数据或者csv数据动手脚。无论是哪种数据,我们的目标主要有两个:一是进行谐波分析(FFT),二是实现自定义频段的清除,当然,提取特定频段的数据也不在话下。

FFT滤波的优点与不足

先来说说它的优点。基于Matlab的FFT滤波有个超赞的地方,就是滤波前后波形不会出现相位滞后的情况。这意味着信号在经过处理后,时间上的先后关系依然保持原样,不会变得“乱七八糟”。而且幅值衰减还能进行补偿,就好比信号在“长途跋涉”后有点“累”了,我们可以帮它“恢复元气”,让它保持原有的“精气神”。

基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除,对已有数据特定频段的数据进行提取也可以。 优点是滤波前后波形无相位滞后,幅值衰减可补偿,不足之处在于不支持实时滤波。 图一是将图二的信号(含三次谐波)进行140hz-150hz频段谐波清除前后的时域及频谱图,图3是对给定数据进行特定频段信号提取。

然而,它也不是十全十美的,其不足之处在于不支持实时滤波。这就好比一个厨师做菜虽然做得好吃,但不能边做边上菜,必须等所有菜都做好了才能端上桌。

代码示例与分析

下面咱们来看点实际的代码,以对含三次谐波的信号进行140hz - 150hz频段谐波清除为例。

% 假设已经读取数据到data变量中
fs = 1000; % 采样频率
n = length(data); 
t = (0:n - 1)/fs; 

% 进行FFT变换
Y = fft(data); 
f = (0:n - 1)*(fs/n); 

% 找到140hz - 150hz频段对应的索引
idx = find((f >= 140) & (f <= 150)); 

% 将该频段的频谱分量置零
Y(idx) = 0; 

% 进行逆FFT变换得到滤波后的数据
filtered_data = ifft(Y); 

这段代码一开始设置了采样频率fs,通过数据长度n算出时间向量t。然后对原始数据data进行FFT变换得到频谱Y,同时算出对应的频率向量f。接下来关键的一步,是找到我们要清除的140hz - 150hz频段在频率向量f中对应的索引idx,把这个频段的频谱分量直接置零,相当于把这一段的“声音”给“静音”了。最后通过逆FFT变换ifft把修改后的频谱变回时域信号,也就是我们滤波后的数据filtered_data

实例图示

从图一能清晰地看到,将图二那含三次谐波的信号进行140hz - 150hz频段谐波清除前后,时域及频谱图发生了显著变化。在时域上,滤波后的信号变得更加“纯净”,不再受到特定频段谐波的干扰;频谱图中,对应140hz - 150hz的频段峰值消失,真正实现了我们对特定频段谐波的清除。而图3展示了对给定数据进行特定频段信号提取,就像是从一堆复杂的声音中,精准地挑出了我们想听的那一段旋律。

总之,基于Matlab的FFT滤波虽然存在不支持实时滤波的局限,但在谐波分析以及对已有数据特定频段处理方面,有着强大的功能,为信号处理领域提供了许多便利。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐