栅栏效应的分析与解决

栅栏效应的分析与解决原因 栅栏效应简明地说就是做 FFT 的点数过少 使得产生的频谱看起来不连续 分析 现在举个例子 信号 fun 为 f1 5 f2 4 的余弦信号之和 采样频率 fs 100 时域 采样点数 N 为 100 分别进行 100 点 FFT 50 点 FFT 10 点 FFT clc clear all

大家好,我是讯享网,很高兴认识大家。

原因

栅栏效应简明地说就是做FFT的点数过少,使得产生的频谱看起来不连续

分析

现在举个例子:信号fun为f1=5、f2=4的余弦信号之和,采样频率fs=100,时域采样点数N为100,分别进行100点FFT、50点FFT、10点FFT

clc;clear all;close all; fs=100; f1=5; f2=4; N=100; n=0:N-1; x=n/N*fs; fun=cos(2*pi*f1*n/fs)+cos(2*pi*f2*n/fs); figure;subplot(411);plot(fun);title('时域信号'); re1=fft(fun); subplot(412);plot(x,abs(re1));xlabel('频率(Hz)');title('100点FFT'); re3=fft(fun,50); x=(0:49)/50*fs;%只做了50点FFT,所以频率点只有0-49共50 subplot(413);plot(x,abs(re3));xlabel('频率(Hz)');title('50点FFT'); re2=fft(fun,10); x=(0:9)/10*fs;%只做了10点FFT,所以频率点只有0-9共10 subplot(414);plot(x,abs(re2));xlabel('频率(Hz)');title('10点FFT'); 

讯享网

在这里插入图片描述
讯享网

可以看到,当FFT点数过小时,不仅频率分辨能力下降,频谱图也显得不连续

10点FFT频谱图看起来不连续的原因在于:此时的频谱图只由10个离散点来表示,数据少便忽略了很多细节,这个可以体现在横轴的划定:x=(0:9)/10*fs一共才10 点。

而到本质来说是:当FFT点数N过小时,频域的采样间隔在这里插入图片描述
太大,导致了栅栏效应。此处参考了其他文章。

注意:matlab中,假如FFT点数小于时域信号长度,那么将会对时域信号进行截断到FFT点数再做FFT。所以上面的FFT点数N是等同于截断后的时域信号长度

在这里插入图片描述

解决办法

从分析阶段可以知道,解决栅栏效应的根本办法就是增加FFT点数。而实际上鉴于matlab对于处理FFT的方式,通常会采取增加时域信号采样点数,再做对应长度的FFT来实现

增加时域信号采样点数有两种方式:

  • 补0(并不会增加实际信号的长度)
  • 增加时域信号的实际长度

两者的区别在于下图:

在这里插入图片描述

现在举个例子:信号fun为f1=5、f2=4的余弦信号之和,采样频率fs=100,由在这里插入图片描述
以及
在这里插入图片描述
可知,fun周期为100

在这里插入图片描述

进行如下操作:

  • 截断信号的0.1周期,进行10点FFT;
  • 截断信号0.1周期,并补零50点,进行60点FFT;
  • 截断信号的0.6周期(相当于截断0.1T再增加50点数据),进行60点FFT;
讯享网fs=100; f1=5; f2=8; %周期T=100 %取0.1T N=10; n=0:N-1; x=(0:9)/N*fs; fun=[sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs)]; figure; subplot(321);plot(fun);title('原始信号'); q=abs(fft(fun,10)); subplot(322);plot(x,q);xlabel('频率(Hz)');title('原信号的10点FFT'); %进行50点补0 N=10; n=0:N-1;%实际数据长度0-10 x=(0:59)/60*fs;%补0后长度0-59 fun=[sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs),zeros(1,50)]; subplot(323);plot(fun);title('补0后(补50)'); q=abs(fft(fun,60)); subplot(324);plot(x,q);xlabel('频率(Hz)');title('补0信号的60点FFT'); %进行50点延长 N=100; n=0:N-1; x=(0:59)/N*fs; fun=[sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs)]; subplot(325);plot(fun);title('增加实际长度'); q=abs(fft(fun,60)); subplot(326);plot(x,q);xlabel('频率(Hz)');title('增长信号的60点FFT'); 

在这里插入图片描述

  1. 观察①与②,虽都不能分辨出两种频率,但②明显比①光滑,即缓解了栅栏效应。所以补0能够使频谱图光滑,一定程度上减小了栅栏效应的影响。
  2. 将②与③对比,发现补0,并做对应点数的FFT并不能够分辨出两个频率,即频率分辨率没有提升。

总结下来就是:通过补0和增加时域信号的实际长度提高FFT点数能够减清栅栏效应的影响,但补0并不会提高频率分辨率

小讯
上一篇 2025-02-22 11:16
下一篇 2025-03-09 07:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43454.html