• 引言
    由于DFT只能运用在一个有限持续时间的采样时间间隔上,可以将DFT输入信号看成是在所有时间输入信号与一个矩形窗的乘积。sinc函数中的sinx/x的形状是由于矩形窗引起的。
    以下两张图片转载
    https://blog.csdn.net/zhiTjun/article/details/83476117

所以是由于矩形窗引起了DFT泄露。
如何最小化旁瓣呢?
这项工作通过同时将输入时间序列在采样间隔的起始和末尾点的振幅强制平滑为一个单一的共同值来完成。
主要窗有:三角窗,hanning窗,hamming窗。

也就是说一个输入序列x(n)在进行DFT之前先乘以响应的窗系数w(n).

从幅频响应图中可以看出来,三角窗函数已经降低了旁瓣电平,但是付出的代价是三角窗的主瓣宽度是矩形窗的两倍。不同的非矩形窗的窗函数的宽主瓣使窗口化DFT的频率分辨率减半。
代码由:
https://blog.csdn.net/u013346007/article/details/54178322
提供


%---------------------------------------------------------------------------
%}
%N =51
%==========================================================================
%求矩形窗的频率响应图
%==========================================================================
W = linspace(-pi,pi,4096);
wn0 = rectwin(51)   %矩形窗函数
%20*log10(abs(WN))
[h1,w0] = freqz(wn0,1,W);
%subplotfigure(5,1,1);
subplot(511);
plot(w0/pi,20*log10(abs(h1/max(h1))));
axis([-1 1 -100 0]);
xlabel('归一化频率 /\pi');
ylabel('20log_{10}|W(e^{j\omega})| /dB');
title('矩形窗的傅里叶变换');
set(gca,'YTick',[-100 -80 -60 -40 -20 0])
set(gca,'XTick',[-1 :0.2: 1])
%set(gca,'XAxisLocation','top');%设置X轴在上方
%set(gca,'XAxisLocation','buttom');%设置X轴在下方
set(gca,'YAxisLocation','left'); %设置Y轴在左方
text(1,-124,'\pi');%gtext('\pi');%==========================================================================
%求三角窗的频率响应图
%==========================================================================
wn1 = bartlett(51)
[h1,w1] = freqz(wn1,1,W);
%figure(5,1,2);
subplot(512);
plot(w1/pi,20*log10(abs(h1/max(h1))));
%plot(w/pi,20*log10(h1/max(h1))); % 警告: 复数 X 和/或 Y 参数的虚部已忽略
axis([-1 1 -100 0]);
xlabel('归一化频率 /\pi');
ylabel('20log_{10}|W(e^{j\omega})| /dB');
title('三角窗的傅里叶变换');
set(gca,'YTick',[-100 -80 -60 -40 -20 0])
set(gca,'XTick',[-1 :0.2: 1])
%set(gca,'XAxisLocation','top');%设置X轴在上方
set(gca,'YAxisLocation','left'); %设置Y轴在左方
text(1,-124,'\pi');%gtext('\pi');
%==========================================================================
%hanning 窗的频率响应图
%==========================================================================
wn2 = hanning(51)
[h1,w2] = freqz(wn2,1,W);
%figure(5,1,3);
subplot(513);
plot(w2/pi,20*log10(abs(h1/max(h1))));
axis([-1 1 -100 0]);
xlabel('归一化频率 /\pi');
ylabel('20log_{10}|W(e^{j\omega})| /dB');
title('Hanning的傅里叶变换');
set(gca,'YTick',[-100 -80 -60 -40 -20 0]);
set(gca,'XTick',[-1 :0.2: 1]);
%set(gca,'XAxisLocation','top');%设置X轴在上方
set(gca,'YAxisLocation','left'); %设置Y轴在左方
text(1,-124,'\pi');%gtext('\pi');
%==========================================================================
%hamming 窗的频率响应图
%==========================================================================
wn3 = hamming(51)
[h1,w3] = freqz(wn3,1,W); %离散系统频响特性的函数freqz()
%figure(5,1,4);
subplot(514);
plot(w3/pi,20*log10(abs(h1/max(h1))));
axis([-1 1 -100 0]);
xlabel('归一化频率 /\pi');
ylabel('20log_{10}|W(e^{j\omega})| /dB');
title('Hamming的傅里叶变换');
set(gca,'YTick',[-100 -80 -60 -40 -20 0])
set(gca,'XTick',[-1 :0.2: 1])
%set(gca,'XAxisLocation','top');%设置X轴在上方
set(gca,'YAxisLocation','left'); %设置Y轴在左方
text(1,-124,'\pi');%gtext('\pi');
%==========================================================================
%Blackman   wn1 = blackman(51)
%==========================================================================
wn4 = blackman(51)
[h1,w4] = freqz(wn4,1,W);
%figure(5,1,5);
subplot(515);
plot(w4/pi,20*log10(abs(h1/max(h1))));
axis([-1 1 -100 0]);
xlabel('归一化频率 /\pi');
ylabel('20log_{10}|W(e^{j\omega})| /dB');
title('Blackman的傅里叶变换');
set(gca,'YTick',[-100 -80 -60 -40 -20 0])
set(gca,'XTick',[-1 :0.2: 1])
%set(gca,'XAxisLocation','top');%设置X轴在上方
set(gca,'YAxisLocation','left'); %设置Y轴在左方
text(1,-124,'\pi');%gtext('\pi');

窗被用来提升DFT频谱分析的准确性。
这里提出另外两个经常使用的用于降低DFT泄露的窗函数,分别是chebyshev窗函数和kaiser窗函数。

3.9 降低DFT泄露的一种办法---加窗相关推荐

  1. FFT频谱分析(补零、频谱泄露、栅栏效应、加窗、细化、频谱混叠、插值),Matlab、C语言代码

    文章目录 引言 Matlab FFT函数 频谱混叠 栅栏效应 细化技术 什么是细化技术? 细化FFT技术的应用: Zoom-FFT算法介绍及MATLAB实现 Zoom-FFT根本没有实现"细 ...

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

    文章目录 1.DFT泄露原因 2.DFT的频率轴 1.以Hz为单位的频率轴 2.以Fs归一化的DFT频率轴 3.使用归一化角度的DFT频率轴 1.DFT泄露原因 一个被称之为""泄 ...

  3. 企业如何降低代码泄露的风险?

    武林中有一种笑傲江湖叫做身怀绝技,战争中有一种蔑视群雄叫做原子核武,然而安全领域有一种无坚不摧叫做github在手,哥啥都不会照样轻松搞穿你的内网- https://github.com/joyxee ...

  4. Java中的内存泄露的几种可能

    转载自  Java中的内存泄露的几种可能 Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周 ...

  5. 企业降低包装成本的13种简单方法(下篇)

    在我们的上一篇文章:电商降低包装成本的13种简单方法(上篇)中,我们分享了7种降低包装成本的方法,本篇是降低包装成本的13种方法系列的下篇,希望能够帮到大家降本增效. 8 - 减少使用填充物 空隙填充 ...

  6. 降低包装成本的 13 种简单方法

    ​降低包装成本的 13 种简单方法 任何负责营业额的电商运营都希望能够将包装成本降到最低,从而提高单品利润.但是,无论采用何种降低包装成本的方法,我们电商运营对包装材料的需求是一直都存在,这意味着当我 ...

  7. 车牌识别的N种办法——从OCR到深度学习

    一.车牌识别简介 随着科学技术的发展,人工智能技术在我们的生活中的应用越来越广泛,人脸识别.车牌识别.目标识别等众多场景已经落地应用,给我们的生活品质得到很大的提升,办事效率大大提高,同时也节约了大量 ...

  8. matlab怎么求噪声功率,MATLAB求噪声的功率谱密度两种办法的区别

    先描述下我的问题,我想求我抽样的信号(横坐标时间,纵坐标电压)的噪声功率谱密度.方法一:由维纳辛钦定理可以知道,我需要先求时域信号的自相关函数,然后做DFT得到功率谱,在除以Fs可以得到功率谱密度 方 ...

  9. eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样...

    eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样 第一种说法: 还真的找到解决的方法了, ...

最新文章

  1. c/c++ 如何输入带空格的字符串
  2. 解决全网90%以上的日期格式转换、日期序列等骚操作问题
  3. python 技术篇-pythoncom.PumpMessag()关闭、杀死它的进程,pythoncom.PumpMessag()运行卡住解决办法
  4. 【arduino】继续蜂鸣器音乐播放,arduinoIDE里调用音乐播放库
  5. ajax发送异步请求四个步骤,深入理解ajax异步请求的五个步骤(详细代码)
  6. MathType可以编辑省略号吗
  7. 在outlook里设置程序员的996工作属性
  8. Mybatis mapper代理Dao开发
  9. 实现Android的消息通知栏
  10. paip.应用程序远程WEB 接口的设计
  11. ERROR 1129 (HY000): mysqladmin flush-hosts
  12. AFNetworking 2.0 来了
  13. REP-0004: 警告:无法打开用户首选项文件
  14. unix环境中以下列出的oracle,浙江中医药大学2012研究生计算机复习题
  15. 葫芦时刻_Hulu将提供离线观看(最终)
  16. C++ 覆盖方法与重载方法
  17. 非标准武术擂台机器人的设计思想——机械结构的设计思想
  18. 好车主互助|中国互联网变革史:工具类互联网企业的跌宕起伏
  19. 【Qt】实现一个计算器
  20. js解析json报错

热门文章

  1. [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors...
  2. HTML5-canvas实例:刮刮乐游戏
  3. ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)
  4. 分享一下字符串匹配BM算法学习心得。
  5. WINXP 提升速度
  6. 获取 GPG 密钥失败:[Errno 14] 2011-05-26 14:43
  7. 批处理start命令学习
  8. 一台机器上有几个java虚拟机
  9. OpenCV About 页面翻译
  10. win32 API 遍历一个目录下的文件