DFT泄露问题和DFT的频率轴表示方法(第三章离散傅里叶变换(3.8,3.13.4)学习笔记)

1、DFT泄露原因

一个被称之为“”泄露“”的特性使得DFT结果只是数字采样前原始输入信号真实谱的近似。

我们知道分析频率是 f(analysis)=(mFs)/N (m取整数)
如果输入信号在分析频率 mFs/N 上存在信号分量,如1.5Fs/N(m非整数的地方) ,那么在某种程度上这个输入信号将会在DFT所有N个输出分析频率样值上出现。

clear;%清除内存
close all;%关闭所有图形
x=sin(2*pi*(0:63)*3/64);%产生某时段的正弦信号;连续信号频率3 采样频率10
figure;
plot(x);%画图
grid on;%并打网格
title('时域可分信号','FontSize',14);
ylabel('x(n)','FontSize',14);
xlabel('n','FontSize',14);%标注X轴,Y轴坐标
xf=fft(x,64);%FFT(X,N)是N点的FFT,如果X小于0,就用0填充
figure;
plot((0:63)*64/64,abs(xf(1:64)));
grid on;%画图
xlabel('KHZ','FontSize',14);
ylabel('信号频谱','FontSize',14);%标注XY轴坐标
title('信号频谱','FontSize',14);



在这里插入图片描述

下面把连续信号改为3.4,频谱精度为1,这样分辨率就不够了,产生了泄露,从公式上来讲m只能取整数,取不到3.4。

clear;%清除内存
close all;%关闭所有图形
x=sin(2*pi*(0:63)*3.4/64);%产生某时段的正弦信号;连续信号频率3.4  采样频率64
figure;
plot(x);%画图
grid on;%并打网格
title('时域可分信号','FontSize',14);
ylabel('x(n)','FontSize',14);
xlabel('n','FontSize',14);%标注X轴,Y轴坐标
xf=fft(x,64);%FFT(X,N)是N点的FFT,如果X小于0,就用0填充
figure;
plot((0:63)*64/64,abs(xf(1:64)));
grid on;%画图
xlabel('KHZ','FontSize',14);
ylabel('信号频谱','FontSize',14);%标注XY轴坐标
title('信号频谱','FontSize',14);

在这里插入图片描述
现在我们再来更改输入序列,看是否会导致频谱泄露。
现在把输入序列的点数改为201个点,大于了做FFT的64个点。分辨率是1hz

clear;%清除内存
close all;%关闭所有图形
x=sin(2*pi*(0:200)*3/64);%产生某时段的正弦信号;连续信号频率3  采样频率64
figure;
plot(x);%画图
grid on;%并打网格
title('时域可分信号','FontSize',14);
ylabel('x(n)','FontSize',14);
xlabel('n','FontSize',14);%标注X轴,Y轴坐标
xf=fft(x,64);%FFT(X,N)是N点的FFT,如果X小于0,就用0填充
figure;
stem((0:63)*64/64,abs(xf(1:64)));
grid on;%画图
xlabel('KHZ','FontSize',14);
ylabel('信号频谱','FontSize',14);%标注XY轴坐标
title('信号频谱','FontSize',14);

在这里插入图片描述
并不产生DFT泄露。
下面,我们再把输入序列的点数小于做FFT的点数。改为61个输入序列点,发生泄露
clear;%清除内存
close all;%关闭所有图形
x=sin(2pi(0:60)*3/64);%产生某时段的正弦信号;连续信号频率0.5 采样频率10
figure;
plot(x);%画图
grid on;%并打网格
title(‘时域可分信号’,‘FontSize’,14);
ylabel(‘x(n)’,‘FontSize’,14);
xlabel(‘n’,‘FontSize’,14);%标注X轴,Y轴坐标
xf=fft(x,64);%FFT(X,N)是N点的FFT,如果X小于0,就用0填充
figure;
plot((0:63)*64/64,abs(xf(1:64)));
grid on;%画图
xlabel(‘KHZ’,‘FontSize’,14);
ylabel(‘信号频谱’,‘FontSize’,14);%标注XY轴坐标
title(‘信号频谱’,‘FontSize’,14);

在这里插入图片描述
下面我们把采样率也改改,看与FFT的点数有什么关系么?
clear;%清除内存
close all;%关闭所有图形
x=sin(2pi(0:63)*3.5/32);%产生某时段的正弦信号;连续信号频率3.5 采样频率32
figure;
plot(x);%画图
grid on;%并打网格
title(‘时域可分信号’,‘FontSize’,14);
ylabel(‘x(n)’,‘FontSize’,14);
xlabel(‘n’,‘FontSize’,14);%标注X轴,Y轴坐标
xf=fft(x,64);%FFT(X,N)是N点的FFT,如果X小于0,就用0填充
figure;
plot((0:63)*32/64,abs(xf(1:64)));
grid on;%画图
xlabel(‘KHZ’,‘FontSize’,14);
ylabel(‘信号频谱’,‘FontSize’,14);%标注XY轴坐标
title(‘信号频谱’,‘FontSize’,14);
在这里插入图片描述

通过上面的实际仿真,我们验证了DFT泄露有两种原因,
第一原因,就是Fs/N分辨率不够。
第二原因,就是输入序列的点数小于了做FFT的点数。

特别提醒:与输入序列是不是一个周期没有关系!,这种情况依然能够输出正常的DFT。
输入序列是一个完整周期或者非完整周期均可。你不信!我们实验数据来看看。
下面是输入序列N=71个点。肯定不是整的周期吧

在这里插入图片描述
**下面是频谱,清晰可见!没有泄露!!!!!**这里只取了一半
在这里插入图片描述

所以,我们可以得出造成泄露的两大原因:1,点数小于了FFT点数。2 分辨率不够
另外,我们再想一下那个公式k代表啥k,就是代表的就是真实模拟频率!模拟频率如果刚好等于频谱数字化的频率m,落在了分辨率上,那么,就不会造成泄露!

实际信号中,我们的信号频率不可能刚好在一个整数上,说不定是3.11111111hz,不可能刚好精确3hz,所以必然产生分辨力不够的问题,从而必然产生DFT泄露。
这里,我还要额外补充一点,书中说,周期输入信号和非周期输入信号也会导致DFT泄露,这一点,其实是这样的,如果点数足够大于了FFT点数,且满足了频率分辨率的情况下,确实是存在这样的情况,由周期影响,但是,现实生活中,由于噪声总是存在的,根本就没有理想的周期信号,所以一段看似周期的信号都是不能代表原始信号的,所以必然存在频谱泄露。

2、DFT的频率轴

1、以Hz为单位的频率轴

以HZ为单位,Fs/N,即为分辨率,长度为Fs为一个周期循环。

2、以Fs归一化的DFT频率轴

以Fs归一化的DFT,需要将信号的频率f /Fs 进行归一化,最大频率为1,以1为一个循环,分辨率是1/N,单位为周期/样值。

3、使用归一化角度的DFT频率轴

频率变量为w,频率分辨率是2π/N,重复间隔是2π,以2π为一个循环。													
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值