700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > DFT泄露问题和DFT的频率轴表示方法(第三章离散傅里叶变换(3.8 3.13.4)学习笔记)

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

时间:2022-09-16 17:51:26

相关推荐

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

文章目录

1、DFT泄露原因2、DFT的频率轴1、以Hz为单位的频率轴2、以Fs归一化的DFT频率轴3、使用归一化角度的DFT频率轴

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 采样频率10figure;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 采样频率64figure;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 采样频率64figure;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π为一个循环。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。