窗函数-减少傅里叶变换泄漏
数字信号处理的主要数学工具是傅里叶变换.而傅里叶变换是研究整个时间域和频率域的关系。
快速傅里叶变换假定了时间信号是周期无限的。但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露。窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍。
不过,当运用计算机实现工程测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。做法是从信号中截取一个时间片段,然后用截取的信号时间片段进行周期延拓处理,得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。无限长的信号被截断以后,其频谱发生了畸变,原来集中在f(0)处的能量被分散到两个较宽的频带中去了(这种现象称之为频谱能量泄漏)。
几种常用的窗函数的比较
名称 |
特点 |
应用 |
矩形窗 Rectangle |
矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。频率识别精度最高,幅值识别精度最低,所以矩形窗不是一个理想的窗。 |
如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等,也可以用在阶次分析中。 |
汉宁窗 Hanning |
又称升余弦窗。主瓣加宽并降低,旁瓣则显著减小,从减小泄漏观点出发,汉宁窗优于矩形窗.但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。它与矩形窗相比,泄漏、波动都减小了,并且选择性也提高。 |
是很有用的窗函数。如果测试信号有多个频率分量,频谱表现的十分复杂,且测试的目的更多关注频率点而非能量的大小,需要选择汉宁窗。如果被测信号是随机或者未知的,选择汉宁窗。 |
海明窗 (汉明窗) Hamming |
与汉宁窗都是余弦窗,又称改进的升余弦窗,只是加权系数不同,使旁瓣达到更小。但其旁瓣衰减速度比汉宁窗衰减速度慢。 |
与汉明窗类似,也是很有用的窗函数。 |
平顶窗 Flap Top |
平顶窗在频域时的表现就象它的名称一样有非常小的通带波动。 |
由于在幅度上有较小的误差,所以这个窗可以用在校准上。 |
凯塞窗 Kaiser |
定义了一组可调的由零阶贝塞尔Bessel 函数构成的窗函数,通过调整参数β可以在主瓣宽度和旁瓣衰减之间自由选择它们的比重。对于某一长度的Kaiser 窗,给定β,则旁瓣高度也就固定了。 |
|
布莱克曼窗 Blackman |
二阶升余弦窗,主瓣宽,旁瓣比较低,但等效噪声带宽比汉宁窗要大一点,波动却小一点。频率识别精度最低,但幅值识别精度最高,有更好的选择性。 |
常用来检测两个频率相近幅度不同的信号。 |
高斯窗 Gaussian |
是一种指数窗。主瓣较宽,故而频率分辨力低;无负的旁瓣,第一旁瓣衰减达一55dB。常被用来截短一些非周期信号,如指数衰减信号等。 |
对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。 |
三角窗 (费杰窗) Fejer |
是幂窗的一次方形式。与矩形窗比较,主瓣宽约等于矩形窗的两倍,但旁瓣小,而且无负旁瓣。 |
如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等; |
切比雪夫窗(Chebyshev) |
在给定旁瓣高度下,Chebyshev窗的主瓣宽度最小,具有等波动性,也就是说,其所有的旁瓣都具有相等的高度。 |
窗函数是频谱分析中一个重要的部分,窗函数修正了由于信号的非周期性并减小了频谱中由于泄露而带来的测量不准确性。
快速傅里叶变换假定了时间信号是周期无限的。但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露。窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍。截断效应带来了泄漏,窗函数是为了减小这个截断效应,其设计成一组加权系数。例如,一个窗函数可以定义为:
w(t)=g(t) -T/2<t<T/2
w(t)=0 其他
g(t)是窗函数,T是窗函数的时间.
待分析的数据x(t)则表示为:
x(t)=w(t)*x(t)'
x(t)'表示原始信号,x(t)表示待分析信号。
加窗在时域上表现的是点乘,因此在频域上则表现为卷积。卷积可以被看成是一个平滑的过程。这个平滑过程可以被看出是由一组具有特定函数形状的滤波器,因此,原始信号中在某一频率点上的能量会结合滤波器的形状表现出来,从而减小泄漏。基于这个原理,人们通常在时域上直接加窗。
大多数的信号分析仪一般使用矩形窗(rectangular),汉宁(hann),flattop和其他的一些窗函数。
矩形窗函数:
w(k)=1
汉宁窗:
w(k)=0.5*(1-cos(2*pi*k/(N-1))) 0<=k<=N-1
由于加窗计算中衰减了原始信号的部分能量,因此对于最后的结果还需要加上修正系数。在线性谱分析中,一般使用幅度系数(amplitudecorrection),在功率谱中,一般使用能量系数(energy correction)。(这段不清楚在实际中如何用)
matlab中提供了很多窗函数,如下
还提供了显示窗函数的GUI工具,如wvtool可以显示用来显示窗的形状和频域图形,wintool可以打开窗设计和分析工具,如运行
wvtool(hamming(64),hann(64),gausswin(64))
可以对比汉明窗、汉宁窗和高斯窗
简单测试一下加窗的效果如下
可以看到加窗后,频谱泄露确实减少了,但同时信号能量也减小了,这也许就是所说的要使用能量系数吧,如下,这样一来,对比就更明显了,加窗可以有效的减少频谱泄露。
测试代码如下
%% 窗函数测试
function main
clc
close all
Ts = 0.001;
Fs = 1/Ts;
%% 原始信号
t = 0:Ts:pi/2;
yt = sin(2*pi*5*t) + sin(2*pi*10*t) + sin(2*pi*15*t);
[Yf, f] = Spectrum_Calc(yt, Fs);
figure
subplot(211)
plot(t, yt)
xlabel('t')
ylabel('y')
title('原始信号')
subplot(212)
plot(f, Yf)
xlabel('f')
ylabel('|Yf|')
xlim([0 100])
ylim([0 1])
title('原始信号频谱')
%% 加窗信号
win = hann(length(t));
yt1 = yt.*win';
[Yf1, f1] = Spectrum_Calc(yt1, Fs);
figure
subplot(211)
plot(t, yt1)
xlabel('t')
ylabel('y')
title('加窗信号')
subplot(212)
plot(f1, 2*Yf1) % 2表示能量系数
xlabel('f')
ylabel('|Yf|')
xlim([0 100])
ylim([0 1])
title('加窗信号频谱')
end
%% 求取频谱
function [Yf, f] = Spectrum_Calc(yt, Fs)
L = length(yt);
NFFT = 2^nextpow2(L);
Yf = fft(yt,NFFT)/L;
Yf = 2*abs(Yf(1:NFFT/2+1));
f = Fs/2*linspace(0,1,NFFT/2+1);
end
窗函数-减少傅里叶变换泄漏相关推荐
- Python学习-Scipy库信号处理signal(过滤、快速傅里叶变换、信号窗函数、卷积)
Python学习-Scipy库信号处理signal 目录 1.过滤:以某种方式修改输入信号 2.快速傅里叶变换 3.信号窗函数 4.卷积 导入库 import matplotlib.pyplot as ...
- 几种常见窗函数及其MATLAB程序实现
数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算.具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换.相关分析等数学处理.信号的截断产生了能量泄漏,而用FF ...
- 几种常见窗函数及其matlab程序实现,几种常见窗函数及其MATLAB程序实现(20200911110057).pdf...
. 几种常见窗函数及其 MATLAB程序实现 2013-12-16 13:58 2296 人阅读 评论 (0) 收藏 举报 分类: Matlab (15) 数字信号处理中通常是取其有限的时间片段进行分 ...
- 几种常见窗函数及其MATLAB实现
对于窗函数一些教材和论坛都有好的定义和解释说明.鉴于前人的基础上,我也作了一些学习和研究.本文针对于不同的窗函数进行简单的对比,并有MATLAB程序应用. 注:原文来源: http://blog.cs ...
- 【算法】离散傅里叶变换(DFT)
真实的系统是会离散的,时变的.理想者将瞬时态看成时线性的系统,将时变系统分成了不同阶段.离散在围观层面是连续的,但从表层感受时,变化是迅猛的,可以忽略不计变化的过程,因而成为了离散. 一.离散系统 离 ...
- 窗函数的作用以及各种窗函数
文章目录 什么是窗函数? 窗函数的作用是什么? 1.防止泄露 2. 分析意义 有哪些常用的窗函数?它们特点是什么? Rectangular Hanning Hamming Blackman Black ...
- 怎样用通俗易懂的方式理解窗函数
我们知道数字信号处理的主要数学工具是傅里叶变换,而傅里叶变换是研究整个时间域和频率域的关系,当运用计算机实现测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析.具体做法 ...
- 窗函数 数字信号处理
窗函数 数字信号处理 使用窗函数解决什么问题? 数据截断与频谱泄露 什么是频谱泄漏? 解决频谱泄露问题的方法 窗函数介绍 窗函数解决频谱泄露问题的原理 窗函数的种类.特点和如何使用 矩形窗 汉宁窗(升 ...
- 凝思系统分辨率怎么看_机械液压系统的泄漏怎么办,液压系统基本知识,看完你就懂了...
液压传动系统具有体积小.重量轻.比功率大.运行平稳.可无级调速等优点,在各种起重机上得到广泛应用.但液压传动系统的传动效率低于其他传动系统,易产生故障且故障的分析和排除比较困难.因此,要求使用维护人员 ...
最新文章
- docker 系列之 配置阿里云镜像加速器
- 微信样式组件遇到的小坑
- 使用stream类型的Result实现Ajax
- Android显示广播写法,【Android】广播的写法
- 虚拟机讲只读文件变为可读可写文件_Linux虚拟机文件系统突然变成只读
- pku2777 Count Color
- 一个程序员的郁闷吐槽
- 字节跳动面试分享:java从入门到精通第五版答案位置
- 本科三级专业目录计算机类,大学本科专业目录
- SECS/GEM介绍
- 鸿蒙断更术辰东,辰东笔下的“6大绝世功法”,六七八九法术,最后一个让石昊绝望...
- 深度学习(图像处理): A neural algorithm of artistic style算法详解
- 星际争霸php,星际争霸之php简单工厂模式
- “网络吸血鬼” Leech
- Photoshop 系列:照片调色记录
- matlab之直方图的绘制
- 中国互联网web2.0前100
- 服务器端分层架构(丛林战争项目)
- 怎么将打开的网页在浏览器中隐藏而不关闭
- 玩客云刷home assistant(2023-01-19亲测)
热门文章
- mysql根据叶子找父亲_MySQL:如何在特定节点中查找叶子
- matlab中隐含层缺省函数,Matlab双隐层的BP神经网络该如何创建
- pytorch1.0.1_将Spring 3.x和Hibernate 3.x升级到Spring Platform 1.0.1(Spring + hibernate 4.x)
- python判断数据类型type_Python 判断数据类型有type和isinstance
- python3多进程 pool manager_python多进程multiprocessing Pool相关问题
- 乌班图linux分辨率不能调,ubuntu不能设置高分辨率问题的解决方法,
- python 调用 tensorflow,C++与python 相互调用-- c++调用tensorflow教程
- 皮一皮:老外这是人傻钱多啊...
- 皮一皮:藏头诗有时候也不能太藏...
- 这一波震撼的福利,你绝对想不到!!!