第 1 页 共 13 页
实验二 FIR滤波器设计与实现
一、实验目的
1.通过实验巩固FIR滤波器的认识和理解。
2.熟悉掌握FIR低通滤波器的窗函数设计方法。 3.理解FIR的具体应用。
二、实验内容
在通信、信息处理以及信号检测等应用领域广泛使用滤波器进行去噪和信号的增强。FIR滤波器由于可实现线性相位特性以及固有的稳定特征而得到广泛使用,其典型的设计方法是窗函数设计法。
(1)、设计流程
1.设定指标:截止频率fc,,过度带宽度▽f,阻带衰减A。 2.求理想低通滤波器(LPF)的时域相应hd(n)。 3.选择窗函数ω(n),确定窗长N。
4.将hd(n)右移(N—1)/2点并加窗获取线性相位FIR滤波器的单位脉冲响应h(n)。 5.求FIR的频率响应H(ejω),分析是否满足指标。如不满足,转3重新选择,否则继续。
6.求FIR的系统函数H(z)。
7.根据差分方程由软件实现FIR滤波器或依据系统函数由硬件实现。 实验要求:
采用哈明窗设计一个FIR低通滤波器并由软件实现。哈明窗函数如下:
ω(n)=0.54-0.46cos(2πn/N-1),0≤n≤N-1
设采样频率为fS=10kHz。试验中,窗长度N和截止频率fc,应该能够调节。
(2)、实验内容
1.设计FIR低通滤波器(FIR_LPF)(书面进行)。 2.依据差分方程编程实现FIR低通滤波器。
3.输入信号x(n)=3.0sin(0.16πn)+cos(0.8πn)到fc=2000Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。
4.输入信号x(n)=1.5(sin0.2πn)-cos(0.4πn)+1.2sin(0.9πn)到fc=1100Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。 5.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+1.2sin(0.9πn)到fc=2100Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。 6.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+5.0sin(0.9πn)到fc=1100Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。 7.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+1.2sin(0.9πn)到fc=1990Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。
三、实验分析
如果采用哈明窗函数设计因果线性相位低通滤波器FIR,所设计的FIR低通滤波器单位脉冲响应h(n)如式。
数字信号处理——实验二、FIR滤波器设计与实现
第 2 页 共 13 页
sin[wc(n?N?1h(n)=hd(n) ω(n)=
?(n?2N?12)][0.54?0.46cos(2?nN?1)],0≤n≤N-1
)如果输入函数为x(n),则y(n)=x(n)*h(n)。
这里要注意N的取值,若取值为奇数,则会导致分母为零,频谱出错,故若N为奇数,则取N+1。
因为ω=2πf/fs,所以有2πf=ωfs。以此为依据对输入信号作如下理论分析: 1. 输入信号x(n)=3.0sin(0.16πn)+cos(0.8πn)到fc=2000Hz,N=65的FIR_LPF时,由幅度值值峰值频率由正弦分量决定f=ωfs/2π=800Hz,输入信号x(n)的频率分量有:f1=800Hz,f2=4000Hz,经过低通滤波器后变成输出信号y(n),峰值频率应该为fm=800Hz;
2.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+ 1.2sin(0.9πn)到fc=1100Hz,N=65的FIR_LPF时,由幅度值值峰值频率由正弦分量决定f=ωfs/2π=1000Hz,输入信号x(n) 的频率分量有:f1=1000Hz,f2=2000Hz,f3=4500Hz,经过低通滤波器后变成输出信号y(n),所以峰值频率应该为fm=1000Hz;
3.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+ 1.2sin(0.9πn)到fc=2100Hz,N=65的FIR_LPF时,由幅度值值峰值频率由正弦分量决定f=ωfs/2π=1000Hz,输入信号x(n) 的频率分量有:f1=1000Hz,f2=2000Hz,f3=4500Hz,经过低通滤波器后变成输出信号y(n),所以峰值频率应该为fm=1000Hz;
4.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+ 5.0sin(0.9πn)到fc=1100Hz,N=65的FIR_LPF时,由幅度值值峰值频率由正弦分量决定f=ωfs/2π=4500Hz,输入信号x(n) 的频率分量有:f1=1000Hz,f2=2000Hz,f3=4500Hz,经过低通滤波器后变成输出信号y(n),所以峰值频率还是应该在fm=4500Hz;
5.输入信号x(n)=1.5sin(0.2πn)-cos(0.4πn)+ 1.2sin(0.9πn)到fc=1990Hz,N=65的FIR_LPF时,由幅度值值峰值频率由正弦分量决定f=ωfs/2π=1000Hz,输入信号x(n) 的频率分量有:f1=1000Hz,f2=2000Hz,f3=4500Hz,经过低通滤波器后变成输出信号y(n),所以峰值频率应该fm=1000Hz。
四、实验结果
1.MATLAB 程序如下:
function fir(fc,N,A,a,B,b,C,c) %窗函数的设计 n = 0 : N-1; %窗函数、LPF横坐标 fs = 10000; %采样频率 wc = 2 * pi * fc/fs; hd = n;
for k = 1 : (N-1)/2
hd(k) = sin(wc * (k-1-(N-1)/2)) ./ ( pi *(k-1-(N-1)/2)); %LPF纵坐标 end
for k =(N-1)/2 + 2 : N
hd(k) = sin(wc * (k-1-(N-1)/2)) ./ ( pi *(k-1-(N-1)/2)); %LPF纵坐标 end
hd((N-1)/2+1) = wc/pi;
wn = 0.54 - 0.46*cos(2*pi*n/(N-1)); %哈明窗窗函数 hn = hd .* wn; %FIR滤波器的时域表达式
数字信号处理——实验二、FIR滤波器设计与实现
第 3 页 共 13 页
%窗函数的频谱 W = 0:999; for k = 1 : 1000; W(k) = 0; n = 1;
while(n < N+1)
W(k) = hd(n) * exp(-j*k*pi/1000*n)+ W(k); n = n + 1; end end
%FIR滤波器的频谱 for k = 1 : 1000; H(k) = 0; n = 1;
while(n < N+1)
H(k) = hn(n) * exp(-j*k*pi/1000*n)+ H(k); n = n + 1; end end
%输入频谱 n = 0 : 999;
x = A * sin ( a * pi * n ) + B * cos ( b * pi * n) + C* sin ( c * pi * n ); X = x; s = 0;
for k = 1 : 1000 X(k) = 0; n = 1;
while( n < 1001)
X(k) = X(k) + x(n) * exp(-j * 2* pi *(k-1)*(n-1)/1000); n = n + 1; end
if k < 500
if s < abs(X(k))
s = abs(X(k)); %最大值 m = k - 1; end end end
Y = X .* W;
n = 0 : N-1; %过度变量
k = 0 : 0.002 * pi : 1.998 *pi; subplot(4,1,1); %图1
plot(n,hn); %窗函数时域图 subplot(4,1,2); %图2
数字信号处理——实验二、FIR滤波器设计与实现
第 4 页 共 13 页
plot(k/2,20*log10(abs(H))); %FIR滤波器频谱图 subplot(4,1,3); %图3
plot(k,abs(X),'.-'); %输入函数频谱图 subplot(4,1,4);
plot(k,abs(Y),'.-');%输出函数频谱图 disp( m /1000 * fs); disp( s); end
2.仿真结果
将实验内容里3、4、5、6、7中的输入信号,x(n)及截止频率代入实验程序中,利用MATLAB软件分析输出结果,可以得到每个输入信号经过低通滤波器后的输出信号频谱分别如下所示: (1).x(n)=3.0sin(0.16πn)+cos(0.8πn)
0.40.30.2-500.10-0.1020406080-100-1505000123420001500100050001500100050002468002468 图一
MATLAB结果如图一所示:
第一行第一列表示h(n);第一行第二列表示H(ejω) 第二行第一列表示X(ejω);第二行第二列Y(ejω)
当f=800Hz时,峰值为1500,与理论值一致,可认为系统满足要求。
数字信号处理——实验二、FIR滤波器设计与实现
第 5 页 共 13 页
(2). x(n)=1.5sin(0.2πn)-cos(0.4πn)+1.2sin(0.9πn)
0.30.20.10-0.1500-50-100-15002040608001234800600400200080060040020000246802468图二
MATLAB结果如图二所示:
第一行第一列表示h(n);第一行第二列表示H(ejω) 第二行第一列表示X(ejω);第二行第二列表示Y(ejω)
当f=1000Hz时,峰值为750,与理论值一致,可认为系统满足要求。 (3).x(n)=1.5sin(0.2πn)-cos(0.4πn)+1.2sin(0.9πn)
0.60.40.20-0.2500-50-100-15002040608001234800600400200080060040020000246802468图三
MATLAB结果如图三所示:
第一行第一列表示h(n);第一行第二列表示H(ejω); 第二行第一列表示X(ejω);第二行第二列表示Y(ejω);
当f=4500Hz时,峰值为2500,与理论值一致,可认为系统满足要求。
数字信号处理——实验二、FIR滤波器设计与实现