栅栏效应的分析与解决

原因

栅栏效应简明地说就是做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并不会提高频率分辨率

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值