fir窗口法和双波纹法matlab实现fir滤波器有什么区别

加窗的原因。对于理想的低通滤波器H(exp(jw)),其h(n)是无限长序列。这是可以证明的。因此为了得到有限长的h(n)就需要截断,而这个过程就是加窗。由于h(n)截断即其频率响应就和理想的低通滤波器有差别。从感性上分析,h(n)越长,Hw(exp(jw))也就越接近理想低通滤波器,这就对应确定序列的长度。还有就是如何截断即加什么窗,对Hw(exp(jw))也是有影响。这就是对应的窗的设计。
窗口设计法:H(exp(jw)) = F(h(n)), W(exp(jw)) = F(w(n)). F[h(n)*w(n)] = H(exp(jw)) &(周期卷积) W((exp(jw))。其中h(n)是理想的频域低通滤波器的时域序列,w(n)是加窗的时域函数。最终的目的是的到截断的h(n)即滤波器系数。
汉明窗的时域,频域。如下图
hanmming窗:
&设计低通滤波器使用此方法时:根据设计指标确定窗函数,和阶数。得到的窗函数的系数乘以理想的低通滤波器的时域信号,即得使用窗函数截断后的系数。
根据阻带的衰减要求确定窗函数。具体查表得到各个窗函数的性能,确定窗函数。
滤波器阶数的确定:
N = (-20lg(sqrt(&p*&c)) - 12) / (14.6(fc - fp) / fs)& 对滤波器阶数的逼近方程。
N = (-10lg(&p*&c) - 13) / 2.324(fc-fp)/fs + 1; 这两个应该是接近的。
这只是逼近,如果没有满足设计目标,就需要提高阶数。
2、窗口设计法的基本思想:根据滤波器的性能要求,确定h序列长度和合适的窗。
3、单位的关系:(一直有这个问题)实际的信号频率f(hz),采样频率fs(hz),模拟频率(??),数字频率(??)。在这里要切底搞清楚。
实际低通滤波器的设计:
假设某信号的最高频率是1500hz, 采样率fs = 6.5k,即fp = 1500hz, fc = 1800hz,&p =& 0.174dB, &c = 40dB 。那就可以具体的设计fir低通滤波器了。
若2*pi = 6500, fp = 0.46pi, fc = 0.55pi,
确定使用hamming窗,估计16阶。
由上图可以看出需要60阶的fir才能达到需要的性能。
阅读(...) 评论()信号处理学习之语音信号处理MATLAB实现
前段时间花两天时间做的,学习信号处理的一个简单的小项目,主要遇到的问题是在设计FIR滤波器的时候选择了矩形窗,后来指标达不到,看下课本才知道问题(上课经常走神惭愧!),根据阻带衰减分贝值选择了凯泽窗。有时间要要研究下MP3编解码实现,这个难度大点,涉及的知识点也更全点。要考试了,昨晚赶了下论文,贴出主要部分。
语音信号的采集
利用cooledit软件,录制一段自己的话音,时间在3秒左右,然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数,采样率8000Hz,单通道,格式*.wav。
语音信号的时频分析
利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。再对其进行采样,记住采样频率和采样点数。下面介绍Wavread函数几种调用格式。
(1) y=wavread (file)
功能说明:读取file所规定的wav文件,返回采样值放在向量y中。
(2) [y, fs, nbits]=wavread(file)
功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
(3) y=wavread (file,N)
功能说明:读取钱N点的采样值放在向量y中。
(4) y=wavread (file, [NI, N2])
功能说明:读取从N1到N2点的采样值放在向量y中。
接下来,对语音信号进行采样。然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:Xk=fft
(xn,N)参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,可以得到信号的频谱特性。具体程序如下:
% --- 选择音频文件消息响应函数.
function pushbutton9_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton9 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
[fn,pn,fi]=uigetfile('*.wav','select a
wav-file')%调用选择文件对话框,返回fn代表名字,pn代表路径
name=strcat(pn,fn)
[x1,Fs,bits]=wavread(name);
sound(x1,Fs,bits);%播放声音
figure(1);
subplot(211);
plot(x1); %做原始语音信号的时域图形
title('原始语音信号');
xlabel('时间 n');
ylabel('音量 n');
y1=fft(x1); %做length(x1)点的FFT
y1=fftshift(y1);%平移,是频率中心为0
derta_Fs = Fs/length(x1);%设置频谱的间隔,分辨率 。
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(y1));%画出原始语音信号的频谱图,这里保证了x轴的点数必须和y轴点数一致
title('原始语音信号的频谱');
程序结果如下图:
设计FIR和IIR数字滤波器对语音信号进行滤波
IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H
(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比斡采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。对于线性相位滤波器,经常采用FIR滤波器。
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。具体设计步骤如下:
(1)确定所需类型数字滤波器的技术指标。
(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Q
=2/T tan(0.5w)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。
(4)设计模拟低通滤波器。
(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。
(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。
我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。为了克服之一缺点,可以采用双线性变换法。
下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。
(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。
如前所逑,IIR滤波器和FIR滤波器的设计方法有很大的区别。下面我们着重介绍用窗函数法设计FIR滤波器的步骤。如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。先按照阻带衰减选择窗函数类型。原则是在保证阻带衰减满足要求的情况下,尽量选择相同阶数下主瓣窄的窗函数。
(2)构造希望逼近的频率响应函数。
(3)计算h(n)。
(4)加窗得到设计结果。
给定滤波器的性能指标如下:
(1)低通滤波器的性能指
fb=1000Hz,fc=1200Hz,As=100dB,Ap=1dB.
(2)高通滤波器的性能指标:
fb=2700Hz, fc=3000Hz,As=100dB,Ap=1dB.
(3)带通滤波器的性能指标:
fb1=1200Hz, fb2=3000Hz, As=100dB,Ap=1dB.
fc1=1000Hz, fc2=3200Hz,As=100dB, Ap=1dB.
由以上指标查表得满足阻带衰减为指标中的100dB的窗可以选择凯泽窗。
在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,chebyl和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各滤波器的频率响应。hn=frI(M,wc,window),可以指定窗函数向量window。如果缺省window参数,则firl默认为哈明窗。这里我们可以选择window=
kaiser(N,beta)以实现凯泽窗。N为窗的点数,N=M+1,其中M为滤波器阶,可由过渡带带宽BW和阻带衰减分贝值As估算得到,公式为M=((As-7.95)/(2.286*BW)+1;
beta参数决定凯泽窗,可由公式beta=0.1102*(As1-8.7)确定;
(若是矩形窗公式为BW=1.8pi/M,得出M)
MATLAB信号处理工具箱函数buttp buttor
butter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式周于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。MATLAB信号处理工具箱函数cheblap,cheblord和cheebyl是切比雪夫I型滤波器设计函数。我们用到的是cheebyl函数,其调用格式如下:
[B,A]=chebyI(N,Rp,wpo,’Rypr’)
[B,A]=chebyI(N,Rp,wpo,’ttypr’,’s’)
函数butter,chebyl和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。
用自己设计的各滤波器分别对语音信号进行滤波,在Matlab中,滤波器利用函数filter对信号进行滤波。
函数filter的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。其中xn是输入信号向量,yn输出信号向量。
下面我们将给出FIR和IIR数字滤波器对语音信号滤波的主要程序和结果:
% --- FIR低通按钮消息响应函数.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
wp1=2*pi*fp1/ %
ws1=2*pi*fs1/ %
BF1=ws1-wp1;
wc1=(wp1+ws1)/2;
M1=ceil((As1-7.95)/(2.286*BF1))+1;%按凯泽窗计算滤波器阶数
beta1=0.1102*(As1-8.7);
Window=(kaiser(N1,beta1)); %求凯泽窗窗函数
b1=fir1(M1,wc1/pi,Window);% wc1/pi为归一化,窗函数法设计函数
figure(2);
freqz(b1,1,512);
title('FIR低通滤波器的频率响应');
x1_low = filter(b1,1, x1);%对信号进行低通滤波
sound(x1_low,Fs,bits);
figure(3);
subplot(211);
plot(x1_low);
title('信号经过FIR低通滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_low))));
title('信号经过FIR低通滤波器(频域)');
% ---FIR高通按钮消息响应函数.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
wp2=2*pi*fp2/
ws2=2*pi*fs2/
BF2=wp2-ws2;
wc2=(wp2+ws2)/2;
M2=ceil((As2-7.95)/(2.286*BF2))+1;%按凯泽窗计算滤波器阶数
beta2=0.1102*(As2-8.7);
Window=(kaiser(N2,beta2)); %求凯泽窗窗函数
b2=fir1(M2,wc2/pi,'high',Window);
figure(4);
freqz(b2,1,512);%数字滤波器频率响应
title('FIR高通滤波器的频率响应');
x1_high = filter(b2,1,x1);%对信号进行高通滤波
sound(x1_high,Fs,bits);
figure(5);
subplot(211);
plot(x1_high);
title('信号经过FIR高通滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_high))));
title('信号经过FIR高通滤波器(频域)');
% --- FIR带通按钮消息响应函数.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
fp3=[];fs3=[];
wp3=2*pi*fp3/
ws3=2*pi*fs3/
BF3=wp3(1)-ws3(1);
wc3=wp3+BF3/2;
M3=ceil((As3-7.95)/(2.286*BF3))+1;%按凯泽窗计算滤波器阶数
beta3=0.1102*(As3-8.7);
Window=(kaiser(N3,beta3)); %求凯泽窗窗函数
b3=fir1(M3,wc3/pi,'bandpass',Window);%带通滤波器
figure(6);
freqz(b3,1,512);%数字滤波器频率响应
title('FIR带通滤波器的频率响应');
x1_daitong = filter(b3,1,x1);%对信号进行带通滤波
sound(x1_daitong,Fs,bits);
figure(7);
subplot(211);
plot(x1_daitong);
title('信号经过FIR带通滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_daitong))));
title('信号经过FIR带通滤波器(频域)');
% ---FIR带阻按钮消息响应函数.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
fs4=[];fp4=[];
wp4=2*pi*fp4/
ws4=2*pi*fs4/
BF4=ws4(1)-wp4(1);
wc4=ws4+BF4/2;
M4=ceil((As4-7.95)/(2.286*BF4))+1;%按凯泽窗计算滤波器阶数
beta4=0.1102*(As4-8.7);
Window=(kaiser(N4,beta4)); %求凯泽窗窗函数
b4=fir1(M4,wc4/pi,'stop',Window);%带阻滤波器
figure(8);
freqz(b4,1,512);%数字滤波器频率响应
title('FIR带阻滤波器的频率响应');
x1_daizu = filter(b4,1,x1);%对信号进行带阻滤波
sound(x1_daizu ,Fs,bits);
figure(9);
subplot(211);
plot(x1_daizu);
title('信号经过FIR带阻滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_daizu))));
title('信号经过FIR带阻滤波器(频域)');
% ---IIR低通按钮消息响应函数.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
fp1i=1000;
fs1i=1200;
wp1i=2*pi*fp1i/
ws1i=2*pi*fs1i/
Wp1i=2/Ts*tan(wp1i/2);
Ws1i=2/Ts*tan(ws1i/2); %按频率转换公式进行转换,预畸变
[N1i,Wn1i]=cheb1ord(Wp1i,Ws1i,Rp1i,Rs1i,'s'); %计算模拟滤波器的最小阶数
[B1i,A1i]=cheby1(N1i,Rp1i,Wn1i,'s');%设计模拟原型滤波器
[bz1i,az1i]=bilinear(B1i,A1i,fs); %运用双线性变换法得到数字滤波器传递函数
figure(10);
freqz(bz1i,az1i,512,fs);
title('切比雪夫1型低通滤波器的频率响应');
x1_lowi = filter(bz1i,az1i, x1);
sound(x1_lowi,Fs,bits);
figure(11);
subplot(211);
plot(x1_lowi);
title('信号经过IIR低通滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_lowi))));
title('信号经过IIR低通滤波器(频域)');
% ---IIR高通按钮消息响应函数.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
fp2i=3000;%通带截止频率
fs2i=2700;%组带截止频率
Wp2i2=2*pi*fp2i/
Ws2i2=2*pi*fs2i/
Wp2i=tan(Wp2i2/2);
Ws2i=tan(Ws2i2/2);
wphi=1 ; %归一化
wshi=Wp2i/Ws2i;%高通频率转换成低通频率指标
%估计滤波器的阶数
[N2i,Wn2i]=cheb1ord(wphi,wshi,Rp2i,Rs2i,'s');
%设计滤波器
[B2i,A2i]=cheby1(N2i,Rp2i,Wn2i,'s');
[numi2,deni2]=lp2hp(B2i,A2i,Wp2i);
[bz2i,az2i]=bilinear(numi2,deni2,0.5)
figure(12);
freqz(bz2i,az2i,512,fs);
title('切比雪夫1型IIR高通滤波器的频率响应');
x1_highi = filter(bz2i,az2i, x1);
sound(x1_highi,Fs,bits);
figure(13);
subplot(211);
plot(x1_highi);
title('信号经过IIR高通滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_highi))));
title('信号经过IIR高通滤波器(频域)');
% --- 带通IIR按钮消息响应函数.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
fdp1i=1200;fdp2i=3000;%通带截止频率
fds1i=1000;fds2i=3200;%组带截止频率
wdp1i=2*pi*fdp1i/wdp2i=2*pi*fdp2i/
wds2i=2*pi*fds1i/wds2i=2*pi*fds2i/
Wdp1i=tan(wdp1i/2);Wdp2i=tan(wdp2i/2);
Wds1i=tan(wds2i/2); Wds2i=tan(wds2i/2); %按频率转换公式进行转换,预畸变
B=Wdp2i-Wdp1i;
W3i = Wdp1i*Wdp2i/Wds1i; %调整截止频率参数。
W0 = (Wdp1i*Wdp2i)^0.5;
wp3i = 1; %归一化,求低通原型的参数。
ws3i = -((Wdp1i*Wdp2i)-Wds2i^2)/(B*Wds2i);
[N3i,Wn3i]=buttord(wp3i,ws3i,Rp3i,Rs3i,'s'); %计算模拟滤波器的最小阶数
[B3i,A3i]=butter(N3i,Wn3i,'s');%设计模拟原型滤波器
[numi3,deni3]= lp2bp(B3i,A3i,W0,B);
[bz3i,az3i] = bilinear(numi3,deni3,0.5); %双线性变换
[H,W] = freqz(bz3i,az3i,512);
figure(14);
subplot(211);
plot(W/pi,20*log10(abs(H)));
ylabel('gain');
title('巴特沃兹IIR带通滤波器')
axis([0 1 -80 5]);
subplot(212);
plot(W/pi,angle(H)); xlabel('w/pi'),ylabel('phase');
x1_daitongi = filter(bz3i,az3i, x1);
sound(x1_daitongi,Fs,bits);
figure(15);
subplot(211);
plot(x1_daitongi);
title('信号经过IIR带通滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_daitongi))));
title('信号经过IIR带通滤波器(频域)');
% ---带阻IIR按钮消息响应函数.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of
% handles structure with handles and user data (see GUIDATA)
global x1;
global Fs;
global derta_Fs;
Fp1 = 1000;
Fp2 = 3200;
Fs1 = 1200;
Fs2 = 3000;
wp1 = 2*pi*Fp1/
wp2 = 2*pi*Fp2/
ws1 = 2*pi*Fs1/
ws2 = 2*pi*Fs2/
Wp1 = tan(wp1/2); %按频率转换公式进行转换,预畸变
Wp2 = tan(wp2/2);
Ws1 = tan(ws1/2);
Ws2 = tan(ws2/2);
Bw = Ws2 - Ws1;
Wp1 = Ws1*Ws2/Wp2; %调整截止频率参数。
W0 = (Ws1*Ws2)^0.5;
Ws = 1; %归一化,求低通原型的参数。
Wp = (Bw*Wp1)/((Ws1*Ws2)-Wp1^2);
[N, WN] = buttord(Wp,Ws,Ap,As,'s');
[B, A] = butter(N, WN,'s'); %低通原型
[BT,AT] = lp2bs(B,A,W0,Bw);
[num,den] = bilinear(BT,AT,0.5); %双线性变换
figure(16);
[Hz,Wz] = freqz(num,den,512);
subplot(211);
plot(Wz/pi,20*log10(abs(Hz)));
title('巴特沃兹IIR带阻滤波器')
xlabel('w/pi'),ylabel('gain');
axis([0 1 -80 5]);
subplot(212);
plot(Wz/pi,angle(Hz));
xlabel('w/pi'),ylabel('phase');
x1_daizui = filter(num,den,x1);%对信号进行带阻滤波
sound(x1_daizui,Fs,bits);
figure(17);
subplot(211);
plot(x1_daizui);
title('信号经过IIR带阻滤波器(时域)');
subplot(212);
plot([-Fs/2:derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_daizui))));
title('信号经过IIR带阻滤波器(频域)');
回放语音信号
经过以上的处理后,可在Matlab中用函数sound对声音进行回放。其调用格式:sound(y,Fs),sound(y)和sound(y,Fs,bits)。可以察觉滤波前后的声音有明显的变化
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&>&&>&&>&&>&实验8.用窗口法设计FIR滤波器.doc
实验8.用窗口法设计FIR滤波器.doc
上传大小:66KB
用窗口法设计FIR滤波器,杭电数字信号处理实验课
嵌到我的页面
<input type="text" value="">
综合评分:0(0位用户评分)
收藏((2))
所需积分:5
下载次数:5
审核通过送C币
创建者:su_xiaoyan
创建者:pilouduo1367
课程推荐相关知识库
上传者其他资源上传者专辑
课程资源热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
实验8.用窗口法设计FIR滤波器.doc
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:导读:10.5实验五:FIR数字滤波器设计与软件实现,(1)掌握用窗函数法设计FIR数字滤波器的原理和方法,(2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法,(3)掌握FIR滤波器的快速卷积实现原理,(4)学会调用MATLAB函数设计与实现FIR滤波器,(1)认真复习第七章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理,(3)请设计低通滤波器,确定滤波器指标参数,(4)根据滤波
10.5 实验五:FIR数字滤波器设计与软件实现
10.5.1 实验指导
1.实验目的
(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。
(2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。
(3)掌握FIR滤波器的快速卷积实现原理。
(4)学会调用MATLAB函数设计与实现FIR滤波器。
2. 实验内容及步骤
(1)认真复习第七章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理;
(2)调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其频谱,如图10.5.1所示;
图10.5.1 具有加性噪声的信号x(t)及其频谱如图
(3)请设计低通滤波器,从高频噪声中提取xt中的单频调幅信号,要求信号幅频失真小于0.1dB,将噪声频谱衰减60dB。先观察xt的频谱,确定滤波器指标参数。
(4)根据滤波器指标选择合适的窗函数,计算窗函数的长度N,调用MATLAB函数fir1设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。
(4)重复(3),滤波器指标不变,但改用等波纹最佳逼近法,调用MATLAB函数remezord和remez设计FIR数字滤波器。并比较两种设计方法设计的滤波器阶数。
提示:1MATLAB函数fir1和fftfilt的功能及其调用格式请查阅本书第7章和第?章; ○
2采样频率Fs=1000Hz,采样周期T=1/Fs; ○
3根据图10.6.1(b)和实验要求,可选择滤波器指标参数:通带截止频率fp=120Hz,阻○
带截至频率fs=150Hz,换算成数字频率,通带截止频率?p?2?fp??0.24?,通带最大衰为0.1dB,阻带截至频率?s?2?fs??0.3?,阻带最小衰为60dB。]
4实验程序框图如图10.5.2所示,供读者参考。 ○
实验程序框图
(1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?请写出设计步骤.
(2)如果要求用窗函数法设计带通滤波器,且给定通带上、下截止频率为?pl和?pu,阻带上、下截止频率为?sl和?su,试求理想带通滤波器的截止频率?cl和?cu。
(3)解释为什么对同样的技术指标,用等波纹最佳逼近法设计的滤波器阶数低?
5.实验报告要求
(1)对两种设计FIR滤波器的方法(窗函数法和等波纹最佳逼近法)进行分析比较,简述其优缺点。
(2)附程序清单、打印实验内容要求绘图显示的曲线图。
(3)分析总结实验结果。
(4)简要回答思考题。
6.信号产生函数xtg程序清单
function xt=xtg(N)
%实验五信号x(t)产生,并显示信号的幅频特性曲线
%xt=xtg(N) 产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1000Hz
%载波频率fc=Fs/10=100Hz,调制正弦波频率f0=fc/10=10Hz.
Fs=1000;T=1/Fs;Tp=N*T;
t=0:T:(N-1)*T;
fc=Fs/10;f0=fc/10; %载波频率fc=Fs/10,单频调制信号频率为f0=Fc/10;
mt=cos(2*pi*f0*t);
%产生单频正弦波调制信号mt,频率为f0
ct=cos(2*pi*fc*t);
%产生载波正弦波信号ct,频率为fc
%相乘产生单频调制信号xt
nt=2*rand(1,N)-1;
%产生随机噪声nt
%=======设计高通滤波器hn,用于滤除噪声nt中的低频成分,生成高通噪声======= fp=150; fs=200;Rp=0.1;As=70; % 滤波器指标
fb=[fp,fs];m=[0,1];
% 计算remezord函数所需参数f,m,dev
dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/20)+1)];
[n,fo,mo,W]=remezord(fb,m,dev,Fs); % 确定remez函数所需参数
hn=remez(n,fo,mo,W);
% 调用remez函数进行设计,用于滤除噪声nt中的低频成分 yt=filter(hn,1,10*nt);
%滤除随机噪声中低频成分,生成高通噪声yt
%================================================================ xt=xt+
%噪声加信号
fst=fft(xt,N);k=0:N-1;f=k/Tp;
subplot(3,1,1);plot(t,xt);xlabel(&#39;t/s&#39;);ylabel(&#39;x(t)&#39;);
axis([0,Tp/5,min(xt),max(xt)]);title(&#39;(a) 信号加噪声波形&#39;)
subplot(3,1,2);plot(f,abs(fst)/max(abs(fst)));title(&#39;(b) 信号加噪声的频谱&#39;)
axis([0,Fs/2,0,1.2]);xlabel(&#39;f/Hz&#39;);ylabel(&#39;幅度&#39;)
10.5.2 滤波器参数及实验程序清单
1、滤波器参数选取
根据10.5.1 节实验指导的提示③选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz。代入采样频率Fs=1000Hz,换算成数字频率,通带截止频率?p?2?fp??0.24?,通带最大衰为0.1dB,阻带截至频率?s?2?fs??0.3?,阻带最小衰为60dB。所以选取blackman窗函数。与信号产生函数xtg相同,采样频率Fs=1000Hz。
按照图10.5.2 所示的程序框图编写的实验程序为exp5.m。
2、实验程序清单
%《数字信号处理(第三版)学习指导》第10章实验5程序exp5.m
% FIR数字滤波器设计及软件实现
%==调用xtg产生信号xt, xt长度N=1000,并显示xt及其频谱,=========
N=1000;xt=xtg(N);
fp=120; fs=150;Rp=0.2;As=60;Fs=1000;
% (1) 用窗函数法设计滤波器
wc=(fp+fs)/Fs;
%理想低通滤波器截止频率(关于pi归一化)
B=2*pi*(fs-fp)/Fs;
%过渡带宽度指标
Nb=ceil(11*pi/B);
%blackman窗的长度N
hn=fir1(Nb-1,wc,blackman(Nb));
Hw=abs(fft(hn,1024)); % 求设计的滤波器频率特性
ywt=fftfilt(hn,xt,N);
%调用函数fftfilt对xt滤波
%以下为用窗函数法设计法的绘图部分(滤波器损耗函数,滤波器输出信号波形)
%省略 % 输入给定指标
% (2) 用等波纹最佳逼近法设计滤波器
fb=[fp,fs];m=[1,0];
% 确定remezord函数所需参数f,m,dev
% 确定remez函数所需参数 dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)]; [Ne,fo,mo,W]=remezord(fb,m,dev,Fs);
hn=remez(Ne,fo,mo,W);
Hw=abs(fft(hn,1024));
% 调用remez函数进行设计 % 求设计的滤波器频率特性
yet=fftfilt(hn,xt,N);
% 调用函数fftfilt对xt滤波
%以下为用等波纹设计法的绘图部分(滤波器损耗函数,滤波器输出信号yw(nT)波形) %省略
包含总结汇报、办公文档、专业文献、应用文书、IT计算机、计划方案、旅游景点、出国留学、人文社科以及FIR数字滤波器设计与软件实现等内容。
相关内容搜索

我要回帖

更多关于 fdatool实现fir滤波器 的文章

 

随机推荐