北航数字信号处理上机实验二实验报告.docx
《北航数字信号处理上机实验二实验报告.docx》由会员分享,可在线阅读,更多相关《北航数字信号处理上机实验二实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
北航数字信号处理上机实验二实验报告
离散时间信号处理实验报告
实验二FIR数字滤波器的设计与实现
班级学号姓名日期
实验二FIR数字滤波器的设计与实现
滤波器设计与实现是数字信号处理中最基本的容之一。
我们知道滤波器分IIR滤波器
(无限冲激响应滤波器)和FIR滤波器(有限冲激响应滤波器)两种。
FIR滤波器的设计方法以直接逼近所需离散设计系统的频率响应为基础。
FIR滤波器可
以很容易地获得线性相移特性,不存在不稳定的问题,是实际系统中广为采用的一种数字滤
波器。
FIR滤波器的设计,通常有窗函数设计法、频率抽样设计法和最佳逼近设计法。
窗函数设计法比较简单,它的频率特性是理想滤波器频谱与窗的频谱的卷积,因而,其频率特性
取决于窗的类型和长度。
频率抽样设计法比较直观,但由于频域的采样会造成时域的混叠,从而滤波器叠性能不可能很高,为提高滤波器的性能,可以在过渡带加上0〜1之间的过渡
点。
本实验主要采用窗函数设计法。
FIR滤波器在Matlab中的实现包括时域卷积和filter滤波等方法,通过本实验可以对
两种方法的实现过程和实现效果进行分析比较。
相关Matlab函数说明
1、有限冲激响应数字滤波器设计函数firl和fir2
Matlab函数firl和fir2可以用来设计加窗的有限冲激响应数字滤波器。
两个函数均产生一个线性相位设计。
函数firl可用于设计常规的低通、高通、带通和带阻线性相位有限冲激响应滤波器。
对于抽样频率为2Hz的情况,命令
b=fir1(N,Wn)
在向量b中返回以z1的升幕排列的N阶低通或带通滤波器的冲激响应系数。
对于低通设计,
归一化截止频率由标量Wn给定,它是在0和1之间的一个数。
对于带通设计,Wn是包含指
定通带边界的一个双元素向量[Wn1,Wn2],其中0b=fir1(N,Wn,'high')
其中N为一个偶数,用于设计高通滤波器。
命令
b=fir1(N,Wn,'stop')
其中Wn是一个双元素向量,用于设计带阻有限冲激响应滤波器。
若没有指定,用海明窗作
为默认值。
命令
b=fir(N,Wn,taper)
使用在向量taper中给定的长度为N+1的窗系数。
然而,窗系数必须事先用一个适当的
MATLAB函数来产生,女口blackman,hamming,hanning,chebwin或kaiser。
用到的命令为
taper=blackman(N)taper=hamming(N)taper=hanning(N)taper=
chebwin(N)taper=kaiser(N,beta)
函数fir2可用于设计带有任意形状幅度响应的线性相位有限冲激响应滤波器。
在其基
本形状中,命令是
b=fir2(N,fpts,mval)
它在长度为N+1的向量b中返回以z1的升幕排列的冲激响应系数。
fpts是给定的频率点向
量,在0到1围以递增的顺序排列,其中第一个频率点是0,而最后的频率点是1。
和前面
一样,抽样频率被假定为2Hz。
mval是给定频率点的给定幅度值的向量,因此也必须和fpts
的长度一样,默认使用海明窗。
为使用其他窗口,所用到的命令是
b=fir2(N,fpts,mval,taper)
其中向量taper包含给定的窗系数。
2、FIR滤波器的实现
(1)FIR滤波器的时域卷积实现
滤波器是一种能够让某些频率分量通过而拒绝其他频率成分或对某些频率成分进行修
正的系统。
对于一个线性时不变系统,其时域输入和输出关系可用卷积的方法描述,
ynxnhn。
对时域而言,yn,xn,hn均为数字信号,可在数字系统中实现。
滤波器按照单位脉冲响应hn在某一有限区间外是否为零分为有限冲击响应(FIR)滤
波器和无限冲击响应(IIR)滤波器。
若单位脉冲响应hn在某一有限区间以外都是零,称
为有限冲击响应FIR系统;若单位脉冲响应hn在某一有限区间外不是零,则称为无限冲
击响应IIR系统。
在线性时不变系统的卷积描述中,对于FIR滤波器,hn为有限项,围从0到M故
M
ynhkxnk。
即通过卷积运算,可实现对输入信号的滤波处理。
k0
(2)FIR滤波器的filter滤波实现
MATLAB中有滤波函数filter,用法为y=filter(b,a,x)。
其中b和a为差分方程系数,
x为输入序列,y为滤波输出序列。
对于FIR滤波器,a设置为1即可。
MATLAB^现主要包
括两个部分,即滤波器设计和滤波。
代码如下:
%%fir滤波器系数设计
fl_kaiser=[7501150];
fl_mag=[10];
fl_dev=[0.010.05];
[fl_n_kaiser,fl_wn,fl_beta,fl_ftype]=
kaiserord(fl_kaiser,fl_mag,fl_dev,fs);
h=fir1(fl_ni_kaiser,fl_wn,fl_ftype,kaiser(fl_n_kaiser+1,fl_beta));
%嚨波函数
y=filter(h,1,x);
3、wav格式音频文件读取函数
y=wavread(file)
[y,fs,nBits]=wavread(file)
输入参数:
file为wav格式的音频文件。
输出参数:
y为存放音频数据的矩阵;fs为该音频文件的采样频率;nBits表示语音信
号的每个采样点所占用的位数。
4、wav格式音频文件写入函数
wavwrite(y,fs,nBits,wavfile)
wavwrite(y,fs,wavfile)
wavwrite(y,wavfile)
输入参数:
y是存放要写入文件的音频数据,fs是写入文件的音频信号采样频率,缺省
的情况下默认fs为8000Hz。
nBits是表示语音信号的每个取样点所占用的位数,它必须是8,16,24或32。
nBits缺省的情况下默认为16。
wavfile是生成的WAV文件的文件名。
实验题目
1已知两个信号序列:
n
fi0.80n20
f2Rn0n10
用conv函数求两个序列的卷积和,并绘制三个序列的波形。
(1)MATLAB源代码:
clc;
n1=0:
20;
n2=0:
10;
y仁0:
30;
x1n=0.84n1;
x2n=ones(1,11);
y=conv(x1n,x2n);
subplot(3,1,1)
stem(n1,x1n);
subplot(3,1,2)
stem(n2,x2n);
subplot(3,1,3)
stem(y1,y);
(2)实验结果:
第一图为fl,第二图为f2,第三图为f1*f2
2、利用wavread函数(或者audioread函数)将加噪声的音频文件"第一场雪加噪声.wav”读入Matlab的工作空间,利用load函数从h40.mat文件中读取40阶离散时间带通滤波器的脉冲响应hin,用conv函数求两个序列的卷积和,并利用wavwrite函数(或者audiowrite函数)将结果写入音频文件“第一场雪滤波40.wav”中。
绘制两个音频信号的波形,并通过音频播放器比较两个音频信号的区别。
(1)MATLAB源代码:
[a,Fs,bits]=wavread('
Ioad('h40.mat');
a=a';
a1=a(1,1:
end);
a2=a(2,1:
end);
第一场雪加噪声')
hln=h40;
丫仁conv(a1,h1n);
subplot(6,1,1)plot(al);
xlabel('n1');
ylabel('al');
subplot(6,1,2)
plot(h1n);
xlabel('n2');
ylabel('h1n');
subplot(6,1,3)plot(Y1);
xlabel('y1');
ylabel('a1*h1n');
Y2=conv(a2,h1n);
subplot(6,1,4)plot(a2);
xlabel('n1');
ylabel('a2');
subplot(6,1,5)
plot(h1n);
xlabel('n2');
ylabel('h1n');
subplot(6,1,6)plot(Y2);
xlabel('y2');
ylabel('a2*h1n');ak=zeros(2,3109334);
ak(1,1:
end)=Y1;
ak(2,1:
end)=Y2;
ak=ak:
wavwrite(ak,Fs,bits,'第一场雪滤波40.wav');
(2)实验结果:
J—,,■B——.■——■一
I
©■51C*
"U
1r~~I~~r~
Jf目-・*“***弹"|*細斛lbwh#*)・**tw|kM
丿L—一1.Lf
®iQ5(152,?
:
■i厂~i-~r~—~r~
71►W******粗涉林*!
*福・屮申*hW卜恫
说明:
n1为左声道信号,n2为右声道信号
3、利用wavread函数(或者audioread函数)将加噪声的音频文件"第一场雪加噪声.wav”读入Matlab的工作空间,利用load函数从h392.mat文件中读取392阶离散时间带通滤波器的脉冲响应bn,用conv函数求两个序列的卷积和,并利用wavwrite函数(或者audiowrite函数)将结果写入音频文件"第一场雪滤波392.wav”中。
绘制两个音频信号的波形,并通过音频播放器比较两个音频信号的区别。
(1)MATLAB源代码:
[a,Fs,bits]=wavread('第一场雪加噪声');
load('h392.mat');
a=a:
a1=a(1,1:
end);
a2=a(2,1:
end);n1=1:
3109295;
n2=1:
393;
y1=1:
(3109295+393-1);
h1n=h392;
Y3=conv(a1,h1n);
subplot(6,1,1)
plot(n1,a1);
xlabel('n1');
ylabel('a1');
subplot(6,1,2)
plot(n2,h1n);
xlabel('n2');
ylabel('h1n');
subplot(6,1,3)
plot(y1,Y3);
xlabel('y1');
ylabel('a1*h1n');
Y4=conv(a2,h1n);
subplot(6,1,4)
plot(n1,a2);
xlabel('n1');
ylabel('a2');
subplot(6,1,5)
plot(n2,h1n);
xlabel('n2');
ylabel('h1n');
subplot(6,1,6)
plot(y1,Y4);
xlabel('y2');
ylabel('a2*h1n');
ak=zeros(2,3109687);
ak(1,1:
end)=Y3;
ak(2,1:
end)=Y4;
ak=ak';
wavwrite(ak,Fs,bits,'第一场雪滤波392.wav');
plot(fft(a))
(2)实验结果:
>0V
1
m
a»i
Jg
xr*1
1~
_点._
1
1
>贺
1Q0
J00
S0O
T
IS|=
f0—
I吕
55
Xti«
IDE
300
33U4KI
"T
uI11_:
111:
_'I
-tfcj..k,-ijkdi__Im°阮14Uhk-—上a丄d■丄J—-■」ma-■亠.LiXlijlMaL
亠J厂
说明:
n1为左声道信号,n2为右声道信号
(3)分析与说明
通过音频播放器播放原始音频信号及经2、3处理后的音频信号可以发现,原始信号能听到
明显的噪声,而2、3处理后噪声音量变小,信噪比变大,说明经过带通滤波器噪声被较好地滤除。
同时发现经393阶带通滤波器处理后的音频噪声比经40阶带通滤波器处理后的音
频噪声小,说明阶数越高滤波效果越好。