DFT泄露问题和DFT的频率轴表示方法(第三章离散傅里叶变换(3.8,3.13.4)学习笔记)
发布日期:2021-05-15 10:42:58
浏览次数:18
分类:技术文章
本文共 3121 字,大约阅读时间需要 10 分钟。
文章目录
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π为一个循环。
转载地址:https://blog.csdn.net/ciscomonkey/article/details/84679424 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年03月25日 06时37分05秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mysql in 有序_mysql中的in排序 mysql按in中顺序来排序
2019-04-21
mysql 查询姓王_MySQL查询语句练习题,测试足够用了
2019-04-21
mysql多实例脚本_mysql多实例脚本
2019-04-21
python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构
2019-04-21
mysql加密复制_MySQL主从复制使用SSL加密
2019-04-21
python启动远端 exe_python打包exe开机自动启动的实例(windows)
2019-04-21
java当前路径_java获取当前路径的几种方法
2019-04-21
java web传递参数_Javaweb的八种传值方式
2019-04-21
java gui支持的包有哪两个_Java GUI
2019-04-21
java list详解_java集合List解析
2019-04-21
java坐标代码_java实现计算地理坐标之间的距离
2019-04-21
mysql 取两个时间差 php_在php和MySql中计算时间差的方法详解
2019-04-21
mysql 重启数据库实例_mysql 单机多实例重启数据库服务
2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理
2019-04-21