用FIR滤波器设计法设计窗函数

2019-09-10 00:30屈宏峰于津罗一平
装备维修技术 2019年1期

屈宏峰 于津 罗一平

摘 要:窗函数的设计,通过快傅立叶变化加窗的原理设计高精度的窗函数,并以此写出可实际使用matlab代码用于计算,对数字信号进行仿真,对比传统窗函数和新设计的窗函数的实际效果。

关键词:窗函数的设计,matlab代码,傅里叶变化

引言

现在,随着数字技术的发展,数字化接收机的普及,在对数字信号的处理上主要的数学工具是傅立叶变化,再对有限长度的数据信号进行傅立叶变化的时候,信号频谱会产生频谱能量泄露使信号频谱产生畸变,为了减少频谱能量泄露,可采用不同的截取函数对信号进行截断,截断函数称为窗函数,简称为窗。

不同的窗函数根据设计的不同对信号频谱的影响是不一样的,经典的窗函数有矩形窗(rectwin),布莱克曼窗(blackmanwin)等。但经典窗函数已经越来越不适应现代信号处理对频谱精度的需求,急需设计一款高辨识,高精度的数字窗。

一、窗函数的设计方法

(一)几种窗函数的特征

矩形窗:矩形窗屬于时间变量的零次幂窗。矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗,这种窗的优点是主瓣比较集中,缺点是旁瓣高,并有负旁瓣,导致变化中带进了高频干扰和泄露,以下是矩形窗的频响图:

布莱克曼窗:布莱克曼窗是二阶升余弦窗,主瓣宽,旁瓣比较低,但等效噪声带宽比汉宁窗大一点,是现在最常用的窗函数,这种窗的优点是旁瓣比较低,缺点是主瓣信号带不平,以下是布莱克曼窗的频响图:

(二)利用FIR滤波器设计窗函数

根据上文的介绍和说明,可以看到,对于信号频谱来说最合适的窗函数应该是主瓣窄,旁瓣低,即能保证不会产生大量的虚假旁瓣信号,又要保证主瓣的频率准确度和幅度准确度。

通过对窗函数的了解,本文阐述一种通过使用matlab FIR滤波器设计方法自行设计的窗函数。以下是matlab 代码:

%FIR窗函数设计%%%%%%%%%%%

clc;close all;clear all;

N=1024;

Fs=1024;%采样率

f1=0.5;

f2=f1+Fs/N*5.5;

f=[0 2*f1/Fs 2*f2/Fs 1];

m=[1 1 0 0];

w=[1 150];

W1=remez(N–1,f,m,w);

W1=W1/max(W1);

f=linspace(–pi,pi,20000);

[Hz1,w0]=freqz(W1,1,f);

pp1=20*log10(abs(Hz1/max(Hz1)));

figure(1);

subplot(3,1,1);plot(f*256,pp1);axis([–50,50,–150,0]);title(‘firwin‘);

以下是FIR窗频响图:

(三)仿真对比

在matlab 中的对矩形窗,FIR窗,布莱克曼窗进行仿真测试,对一块截断信号进行加窗测试,得出的信号频谱如下:

可以看出加矩形窗的信号频谱旁瓣信号极多,完全影响了频谱的信号识别,FIR窗和布莱克窗都将信号旁瓣抑制的很好,但相比之下,FIR窗的主信号更加细准确度更高。

二、结论

本文通过对信号频谱加窗的原理分析结合实际使用情况,使用matlab软件设计了一款可实际使用的窗函数,从对比结果来看,所设计的窗函数并不逊色于现在常用的经典窗函数在某些地方还要更加优秀,表明用该方法设计窗函数是可行的算法具有简单、易于修改的优点,便于程序的实现。

参考文献

[1]陈后金.数字信号处理(第2版)[M].北京:高等教育出版社,2008.

[2]吴大正.信号与线性系统分析(第4版)[M].北京:高等教育出版社,2005.

[3]张志涌,杨祖樱. MATLAB 教程[M].北京:北京航空航天大学出版社,2015.