第5章 窗 函 数
本章对数字信号处理过程中所用到的有关窗函数进行了说明,这些窗函数主要有:矩
形窗函数、三角窗函数、巴特利特窗函数、广义余弦窗、汉宁窗函数、海明窗函数、布莱
克曼窗函数、凯塞窗函数和切比雪夫窗函数等。
本章的学习目标:
● 理解窗函数的基本概念以及加窗原理
● 掌握基本窗函数产生的方法
● 掌握广义余弦窗函数产生的各种方法
● 了解凯塞窗函数和切比雪夫窗函数产生的方法
5.1 窗函数基本概念
在实际进行数字信号处理时,往往需要把信号的观察时间限制在一定的时间间隔内,
只需要选择一段时间信号对其进行分析。这样,取用有限个数据,即将信号数据截断的过
程,就等于将信号进行加窗函数操作。而这样操作以后,常常会发生频谱分量从其正常频
谱扩展开来的现象,即所谓的“频谱泄漏”。当进行离散傅立叶变换时,时域中的截断是
必需的,因此泄漏效应也是离散傅立叶变换所固有的,必须进行抑制。而要对频谱泄漏进
行抑制,可以通过窗函数加权抑制 DFT 的等效滤波器的振幅特性的副瓣,或用窗函数加权
使有限长度的输入信号周期延拓后在边界上尽量减少不连续程度的方法实现。而在后面的
FIR 滤波器的设计中,为获得有限长单位取样响应,需要用窗函数截断无限长单位取样响
应序列。另外,在功率谱估计中也要遇到窗函数加权问题。由此可见,窗函数加权技术在
数字信号处理中的重要地位。
下面介绍窗函数的基本概念。设 x(n)是一个长序列,w(n)是长度为 N 的窗函数,用 w(n)
截断 x(n),得到 N 点序列 xn(n),即
xn(n) = x(n) w(n)
在频域上则有
e
j
X N
1
π2
π
π
WeX
j
e
j
d
• 154 •
MATLAB 在数字信号处理中的应用
由此可见,窗函数 w(n)不仅仅会影响原信号 x(n)在时域上的波形,而且也会影响到频
域内的形状。
MATLAB 信号工具箱主要提供了以下几种窗函数,如表 5-1 所示。
表 5-1 MATLAB 窗函数
窗
窗 函 数
矩形窗
巴特利特窗
三角窗
布莱克曼窗
海明窗
汉宁窗
凯塞窗
切比雪夫窗
Boxcar
Barlett
Triang
Blackman
Hamming
Hanning
Kaiser
Chebwin
5.2 基本窗函数
数字信号处理领域中所用到的基本窗函数主要有:矩形窗函数、三角窗函数和巴特利
特窗函数。下面就对这些窗函数展开介绍。
5.2.1 矩形窗函数
矩形窗(Rectangular Window)函数的时域形式可以表示为:
)(
nw
)(
nR
N
它的频域特性为
Nn
0,1
其他,0
1
e
j
e
W
R
j
1
N
2
sin
sin
N
2
2
第 5 章 窗 函 数
• 155 •
Boxcar 函数:生成矩形窗
调用方式
w = boxcar (n):输入参数 n 是窗函数的长度;输出参数 w 是由窗函数的值组成的 n 阶
向量。
从功能上讲,该函数又等价于 w = ones(n,1)。
应用说明
例:生成一个长度为 50 的矩形窗,并观察其频率特性(使用归一化的幅值和频率),结
果如图 5-1 所示。
程序
n=50;
window=boxcar(n);
[h,w]=freqz(window,1);
subplot(2,1,1)
stem(window);
subplot(2,1,2);
plot(w/pi,20*log(abs(h)/abs(h(1))));
5.2.2 三角窗函数
图 5-1 矩形窗及其频谱特性
三角窗是最简单的频谱函数
)W(ej 为非负的一种窗函数。三角窗函数的时域形式可以
表示为:
当 n 为奇数时
当 n 为偶数时
)(
kw
2
k
,
1
n
(2
kn
1
n
)1
,
n
2
k
k
1
1
n
2
1
n
)(
kw
2
(2
k
n
n
,1
k
n
k
n
2
n
1
n
2
k
,)1
• 156 •
MATLAB 在数字信号处理中的应用
它的频域特性为:
e
j
W
R
e
j
1
N
2
2
1
N
sin
sin
N
4
2
1
2
,比矩形窗函数的主瓣宽度增加了一倍,但是它的旁瓣宽
三角窗函数的主瓣宽度为
π8
N
度却小得多。
Triang 函数:生成三角窗
调用方式
w = triang(n):输入参数 n 是窗函数的长度;输出参数 w 是由窗函数的值组成的 n 阶
向量。
三角窗也是两个矩形窗的卷积。
三角窗函数的首尾两个数值通常是不为零的。当 n 是偶数时,三角窗的傅立叶变换总
是非负数。
应用说明
例:生成一个长度为 50 的三角窗,并观察其频率特性(使用归一化的幅值和频率),结
果如图 5-2 所示。
程序
n=31;
window=triang(n);
[h,w]=freqz(window,1);
subplot(1,2,1)
stem(window);
subplot(1,2,2);
plot(w/pi,20*log(abs(h)/abs(h(1))));
5.2.3 巴特利特窗函数
巴特利特窗函数的时域形式可以表示为
当 n 为奇数时
图 5-2 三角窗及其频谱特性
第 5 章 窗 函 数
• 157 •
)(
kw
(2
)1
k
,
1
n
(22
)1
k
1
n
,
当 n 为偶数时
n
2
k
k
1
1
n
2
1
n
kw
(2
)1
k
1
n
(2
kn
1
n
)
k
n
2
n
1,
n
2
k
,
Bartlett 函数:生成巴特利特窗
调用方式
w = bartlett(n):
(1) 输入参数 n 是窗函数的长度;
(2) 输出参数 w 是由窗函数的值组成的 n 阶向量。
(3) 巴特利特窗是两个矩形窗的卷积。
(4) 此函数生成的巴特利特窗的两端总是 0。
(5) 该函数与三角窗函数非常类似。当 n 是奇数时,则有 bartlett(n+2)的中间部分等于
triang(n);当 n 是偶数时,巴特利特窗的傅立叶变换是负数。
应用说明
例:生成一个长度为 50 的巴特利特窗,并观察其频率特性(使用归一化的幅值和频率),
结果如图 5-3 所示。
程序
n=51;
window=bartlett(n);
[h,w]=freqz(window,1);
subplot(1,2,1)
stem(window);
subplot(1,2,2);
plot(w/pi,20*log(abs(h)/abs(h(1))));
图 5-3 巴特利特窗及其频谱特性
5.3 广义余弦窗
汉宁窗、海明窗和布莱克曼窗,都可以用一种通用的形式表示,这就是广义余弦窗。
• 158 •
MATLAB 在数字信号处理中的应用
这些窗都是广义余弦窗的特例,汉宁窗又被称为余弦平方窗或升余弦窗,海明窗又被称为
改进的升余弦窗,而布莱克曼窗又被称为二阶升余弦窗。采用这些窗可以有效地降低旁瓣
的高度,但是同时会增加主瓣的宽度。
这些窗都是频率为 0、2π/(N–1)和 4π/(N–1)的余弦曲线的合成,其中 N 为窗的长度。
通常采用下面的命令来生成这些窗:
ind
window
'
1Nπ2
1N:0
BA
cos(ind)
cos(2
C
*
ind)
其中,A、B、C 适用于自己定义的常数。根据它们取值的不同,可以形成不同的窗函
数,分别是:
● 汉宁窗 A=0.5,B=0.5,C=0;
● 海明窗 A=0.54,B=0.54,C=0;
● 布莱克曼窗 A=0.5,B=0.5,C=0.08;
5.3.1 汉宁窗函数
汉宁窗函数的时域形式可以表示为:
)(
kw
15.0
cos
π2
k
1
n
k
,2,1
,
N
它的频域特性为:
W
5.0
W
R
25.0
W
R
π2
N
1
W
R
π2
N
1
e
j
1
N
2
(RW 为矩形窗函数的幅度频率特性函数。
其中,
汉宁窗函数的最大旁瓣值比主瓣值低 31dB,但是主瓣宽度比矩形窗函数的主瓣宽度增
)
加了 1 倍,为 8π/N。
hanning 函数:生成汉宁窗
调用方式
(1) w = hanning(n):输入参数 n 是窗函数的长度;输出参数 w 是由窗函数的值组成的
n 阶向量。
注意:此函数不返回是零点的窗函数的首尾两
个元素。
(2) w = hanning(n,'symmetric'):与上面相类似。
图 5-4 汉宁窗及其频谱特性
第 5 章 窗 函 数
• 159 •
(3) w = hanning(n,'periodic'):此函数返回包括为零点的窗函数的首尾两个元素。
应用说明
例:生成一个长度为 50 的汉宁窗,并观察其频率特性(使用归一化的幅值和频率),结
果如图 5-4 所示。
程序
n=51;
window=hanning(n);
[h,w]=freqz(window,1);
subplot(1,2,1)
stem(window);
subplot(1,2,2);
plot(w/pi,20*log(abs(h)/abs(h(1))));
5.3.2 海明窗函数
海明窗函数的时域形式可以表示为
)(
kw
54.0
46.0
cos
π2
k
1
N
k
,2,1
,
N
它的频域特性为
W
(
54.0)
W
(
23.0)
W
R
π2
N
1
R
W
R
π2
N
1
)
(RW 为矩形窗函数的幅度频率特性函数。
其中,
海明窗函数的最大旁瓣值比主瓣值低 41dB,但它和汉宁窗函数的主瓣宽度是一样大
的。
Hamming 函数:生成海明窗
调用方式
(1) w = hamming(n):输入参数 n 是窗函数的长度;输出参数 w 是由窗函数的值组成的
n 阶向量。
(2) w = hamming(n,sflag):参数 sflag 用来控制窗函数首尾的两个元素值;其取值为
symmetric 或 periodic;默认值为 symmetric。
应用说明
例:生成一个长度为 50 的海明窗,并观察
其频率特性(使用归一化的幅值和频率),结果如
图 5-5 海明窗及其频谱特性
MATLAB 在数字信号处理中的应用
• 160 •
图 5-5 所示。
程序
n=51;
window=hamming(n);
[h,w]=freqz(window,1);
subplot(1,2,1)
stem(window);
subplot(1,2,2);
plot(w/pi,20*log(abs(h)/abs(h(1))));
5.3.3 布莱克曼窗函数
布莱克曼窗函数的时域形式可以表示为
)(
kw
42.0
cos5.0
π2
k
N
1
1
08.0
cos
π4
k
N
1
1
k
,2,1
,
N
它的频域特性为
(W
)
42.0
RW
25.0
W
R
2
1
N
W
R
2
1
N
04.0
W
R
π4
N
1
W
R
π4
N
1
)
(RW 为矩形窗函数的幅度频率特性函数。
其中,
布莱克曼窗函数的最大旁瓣值比主瓣值低 57dB,但是主瓣宽度是矩形窗函数的主瓣宽
度的 3 倍,为 12π/N。
Blackman 函数:生成海明窗
调用方式
(1) w = blackman (n):输入参数 n 是窗函数的长度;输出参数 w 是由窗函数的值组成
的 n 阶向量。
(2) w = blackman (n,sflag):参数 sflag 用来控制窗函数首尾的两个元素值;其取值为
symmetric 或 periodic;默认值为 symmetric。
应用说明
例:生成一个长度为 50 的布莱克曼窗,并
观察其频率特性(使用归一化的幅值和频率),结
果如图 5-6 所示。
图 5-6 布莱克曼窗及其频谱特性