Window Function--the function of window function

From :http://blog.sina.com.cn/s/blog_6163bdeb0102dqhq.html

窗函数是频谱分析中一个重要的部分,窗函数修正了由于信号的非周期性并减小了频谱中由于泄露而带来的测量不准确性。

快速傅里叶变换假定了时间信号是周期无限的。但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露。窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍。截断效应带来了泄漏,窗函数是为了减小这个截断效应,其设计成一组加权系数。例如,一个窗函数可以定义为:
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

由于加窗计算中衰减了原始信号的部分能量,因此对于最后的结果还需要加上修正系数。在线性谱分析中,一般使用幅度系数(amplitude correction),在功率谱中,一般使用能量系数(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

时间: 2024-08-08 01:00:28

Window Function--the function of window function的相关文章

Adding New Functions to MySQL(User-Defined Function Interface UDF、Native Function)

catalog 1. How to Add New Functions to MySQL 2. Features of the User-Defined Function Interface 3. User-Defined Function 4. UDF Argument Processing 5. UDF Return Values and Error Handling 6. UDF Compiling and Installing 7. Adding a New Native Functio

1、function aa(){}和 var aa=function(){}的区别:

例如: alert(sum(10,10)); function sum(num1,num2){ return num1+num2; }//正常执行 备注:正常执行的那个,在代码开始执行之前,解析器就通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中,对代码求值时,javaScript引擎在第一遍会声明函数并将它们放到源代码数的顶部 alert(sum(10,10)); var sum=function(num1,num2){ return num1+num2; }//报错 1.fu

在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }

平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char *p3 = "123456"; 123456\0在常量区,p3在栈上. static int c =0: 全局(静态)初始化区 p1 = (char *)malloc(1

simulink error:Error in default port dimensions function of S-function ‘XXXXXXXXXXX’. This function does not fully set the dimensions of output port 2.

错误提示: Error in default port dimensions function of S-function 'XXXXXXXXXXX'. This function does not fully set the dimensions of output port 2. 问题描述:将m函数添加到simulink中的MATLAB function中后,运行后显示'XXXXXXXXXXXXX',这个模块的端口配置错误. 解决方法:双击MATLAB function模块,进入编程界面(如

(function(window,angular,undefined){//to do})(window,window.angular)

1 立即函数,运行时立即调用函数 2 scope 创建一个 私有作用域 3 undefined undefined可辨,不是关键字.可以被覆盖或重新赋值 原文目录: http://www.zuojj.com/archives/631.html 真捉急

window.showModalDialog返回值和window.open返回值实例详解

最近在谷歌浏览器下发现一个问题,就是使用谷歌浏览器已经不兼容window.showModalDialog了,所以还是改成使用window.open(). 一.window.showModalDialog实例: 1.父页面:js var returnValue=window.showModalDialog("selectUserList.jsp?order_id="+order_id+"&appID="+appID+"&prod_name=&

利用kendo ui window创建自己的promise window

新建一个appdialog.js文件,代码如下 var contexts = {}; var dialogCount = 0; var app = { getDialog: function (obj) { if (obj) { return obj.__dialog__; } return undefined; }, close: function (obj) { var theDialog = this.getDialog(obj); if (theDialog) { var rest =

利用kendo ui window创建自己的promise window (二)

前一篇promise window 在做的时候没有考虑仔细,只是实现了自己的关闭按钮,但是kendo window 自己的关闭按钮点击时没有回传值,并且造成了一个非常大的bug,非常抱歉,今天重新整理下.把原来的appdialog文件书写了下,有需要的重新替换下,非常抱歉 var contexts = {}; var dialogCount = 0; var app = { getDialog: function (obj) { if (obj) { return obj.__dialog__;

父窗口window.showModalDialog传值 子窗口window.returnValue返回值

父窗口打开子窗口页面: var fatherWindow = document.all.dealReason;//想传的值 win = window.showModalDialog(strUrl, fatherWindow, "dialogWidth=800px;dialogHeight=600px;"); //strUrl是子窗口页面,fatherWindow是想传的值,win是子窗口返回的值document.all.dealReason.value = win; 子窗口: var

java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme t

异常信息: Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. 问题原因: 当在