综合实验报告(共8页).doc
精选优质文档-倾情为你奉上实验七 综合实验1.实验目的能综合利用信号处理的理论和Matlab工具实现对信号进行分析和处理(1) 熟练对信号进行时域和频域分析;(2) 熟练进行滤波器设计和实现;(3) 掌握对信号的滤波处理和分析。2实验原理 设计并实现滤波器对信号进行分析和处理是信号处理课程学习的主要内容。通过对信号进行频谱分析,能发现信号的频率特性,以及组成信号的频率分量。对信号进行滤波处理,能改善信号的质量,或者为数据处理(如传输,分类等)提供预处理,等。本次实验是对特定信号进行分析并进行滤波处理,需要综合应用之前的实验内容,主要有以下几个方面。(1)离散时间信号与系统的时域分析 Matlab为离散时间信号与系统的分析提供了丰富且功能强大的计算函数和绘图分析函数,便于离散时间信号和系统的时域表示和分析。(2)信号的频域分析信号处理课程主要学习了离散信号和系统的频域分析方法与实现,以及滤波器的设计与实现。离散信号与系统的频域分析包括DTFT、DFT、Z变换等,FFT则是DFT的快速实现。用Matlab分析信号的频谱可以用freqz函数或者FFT函数。(3) 滤波器设计滤波器的设计首先要确定滤波器的类型,即低通、高通、带通还是带阻。滤波器的边缘频率可以通过对信号的频谱分析得到,滤波器的幅度指标主要有阻带最小衰减As和通带最大衰减Ap。一般来说,As越大,对截止通过的频率分量的衰减越大;Ap越小,对需要保留的频率分量的衰减越小。因此,As越大,Ap越小,滤波器的性能越好,但随之而来,滤波器的阶数越大,实现的代价(包括计算时间和空间)越大。由此,滤波器的设计需要对滤波器性能和实现代价进行均衡考虑。另外根据冲激响应的长度可以分为IIR和FIR两种类型。两种类型的滤波器各有特点。用FIR滤波器可以设计出具有严格线性相位的滤波器,但在满足同样指标的条件下,FIR滤波器的阶数高于IIR滤波器。Matlab为各种类型的滤波器的设计提供了丰富的函数,可以借助这些函数方便地设计出符合要求地滤波器。3. 实验内容及步骤 已知长度为100的离散信号x,主要由三种不同频率的信号构成。请对x进行分析,并设计相应的滤波器,得到构成x的三种信号。实验步骤:(1)对信号进行时域和频域分析,确定信号x的频率分量。(2)针对每个组成信号,设计滤波器。包括确定滤波器类型、滤波器指标等。(3)用Matlab实现滤波器。(4)应用滤波器进行滤波,得到相应的信号。(5)对滤波结果进行分析,调整滤波器参数和设计方法,优化滤波结果。(6)使用不同的滤波器滤出同一频率分量的信号,比较滤波的结果和不同滤波器的性能。(选做)3.实验报告要求(1)明确实验目的以及实验内容。(2)详细叙述对信号进行分析的过程和结果,用图表显示信号的时域和频域波形。 (3)对滤波器设计的每个步骤有详细文字进行分析说明。(4)对设计得到的每个滤波器给出其阶数和截止频率,并用图表显示其时频特性。(5)对滤波得到的每个频率分量用图表形式给出其时域和频域波形。(6)附有实验的完整源代码,代码中有详细的解释说明。(7)对本次实验的体会总结,以及对信号处理课程的实验的体会总结。实验总结:%(1)低通FIR滤波器%function y,b=lowpass_fir_filter(x)wp=0.22*pi; ws=0.46*pi; wdelta=ws-wp; M=ceil(3.32*pi/wdelta); N=2*M+1; wc=(ws+wp)/2; win=hamming(N); b=fir1(N-1,wc/pi,win); y=filter(b,1,x);%(2)带通FIR滤波器%function y,b=bandpass_fir_filter(x)w1=0.4*pi; w2=0.7*pi;wn=w1 w2;wdelta=w2-w1;M=ceil(3.32*pi/wdelta);N=2*M+1;win=hamming(N); b=fir1(N-1,wn/pi,'bandpass',win); y=filter(b,1,x);%(3)高通FIR滤波器%function y,b=highpass_fir_filter(x)wp=0.6*pi; ws=0.9*pi;wdelta=ws-wp; M=ceil(3.32*pi/wdelta);N=2*M+1;wc=(ws+wp)/2; win=hamming(N);b=fir1(N-1,wc/pi,'high',win); y=filter(b,1,x);%(4)低通IIR滤波器%function y,bz,az=lowpass_iir_filter(x)rp=1; rs=15; wp=0.25*pi; ws=0.4*pi;wap=tan(wp/2); was=tan(ws/2); n,wn=buttord(wap,was,rp,rs,'s') ;z,p,k=buttap(n); bp,ap=zp2tf(z,p,k); bs,as=lp2lp(bp,ap,wap); bz,az=bilinear(bs,as,1/2);y=filter(bz,az,x);%(5)带通IIR滤波器%function y,bz,az=bandpass_iir_filter(x)rp=1; rs=15;wp=0.35*pi; ws=0.65*pi; wap=tan(wp/2); was=tan(ws/2);n,wn=buttord(wap,was,rp,rs,'s') ;z,p,k=buttap(n);bp,ap=zp2tf(z,p,k); bs,as=lp2bp(bp,ap,1,0.5);bz,az=bilinear(bs,as,1/2);y=filter(bz,az,x);%(6)高通IIR滤波器%function y,bz,az=highpass_iir_filter(x)rp=1; rs=15;wp=0.7*pi; ws=0.85*pi; wap=tan(wp/2); was=tan(ws/2);n,wn=buttord(wap,was,rp,rs,'s') ;z,p,k=buttap(n);bp,ap=zp2tf(z,p,k); bs,as=lp2hp(bp,ap,wap); %? bz,az=bilinear(bs,as,1/2);y=filter(bz,az,x);%一、频谱分析:load('C:/MATLAB6p5workx.mat')n=0:99;x_dft=fft(x);x_dtft w=freqz(x);figure (1);subplot(2,2,1);stem(n,x); title('x');subplot(2,2,2);stem(n,abs(x_dft);title('dft of x'); grid on;axis(0 50 0 150);subplot(2,2,3); plot(w/pi,abs(x_dtft);title('dtft(abs) of x');grid on;subplot(2,2,4);plot(w/pi,unwrap(angle(x_dtft);title('dtft(angle) of x');grid on;%二、用FIR滤波器进行滤波y_low b_low=lowpass_fir_filter(x);y_band b_band=bandpass_fir_filter(x);y_high b_high=highpass_fir_filter(x);hh_low ww_low=freqz(b_low,1,512);hh_band ww_band=freqz(b_band,1,512);hh_high ww_high=freqz(b_high,1,512);h_low w_low=freqz(y_low);h_band w_band=freqz(y_band);h_high w_high=freqz(y_high);figure (2);subplot(3,3,1); plot(ww_low/pi,20*log10(abs(hh_low);xlabel('Frequency(Hz)'); ylabel('(dB)');title('Magnitude Response');grid on;subplot(3,3,2);stem(n,y_low);title('after FIR lowpass filter'); grid on;axis(0 50 -5 5);subplot(3,3,3); plot(w_low/pi,abs(h_low);title('Magnitude Response'); grid on;subplot(3,3,4); plot(ww_band/pi,20*log10(abs(hh_band);xlabel('Frequency(Hz)'); ylabel('(dB)');title('Magnitude Response'); grid on;subplot(3,3,5); stem(n,y_band);title('after FIR bandpass filter'); grid on;axis(0 50 -5 5);subplot(3,3,6); plot(w_band/pi,abs(h_band);title('Magnitude Response'); grid on;subplot(3,3,7); plot(ww_high/pi,20*log10(abs(hh_high);xlabel('Frequency(Hz)'); ylabel('(dB)');title('Magnitude Response'); grid on;subplot(3,3,8); stem(n,y_high);title('after FIR highpass filter'); grid on;axis(0 50 -5 5);subplot(3,3,9); plot(w_high/pi,abs(h_high);title('Magnitude Response'); grid on;%三、用IIR滤波器进行滤波y_low bz_low az_low=lowpass_iir_filter(x);y_band bz_band az_band=bandpass_iir_filter(x);y_high bz_high az_high=highpass_iir_filter(x);hh_low ww_low=freqz(bz_low,az_low,256,1);hh_band ww_band=freqz(bz_band,az_band,256,1);hh_high ww_high=freqz(bz_high,az_high,256,1);h_low w_low=freqz(y_low);h_band w_band=freqz(y_band);h_high w_high=freqz(y_high);figure (3);subplot(3,3,1); plot(ww_low,abs(hh_low);xlabel('Frequency(Hz)');title('Magnitude Response'); grid on;subplot(3,3,2);stem(n,y_low);title('after IIR lowpass filter'); grid on;axis(0 50 -5 5);subplot(3,3,3); plot(w_low/pi,abs(h_low);title('Magnitude Response'); grid on;subplot(3,3,4); plot(ww_band,abs(hh_band);xlabel('Frequency(Hz)');title('Magnitude Response'); grid on;subplot(3,3,5); stem(n,y_band);title('after IIR bandpass filter'); grid on;axis(0 50 -5 5);subplot(3,3,6); plot(w_band/pi,abs(h_band);title('Magnitude Response'); grid on;subplot(3,3,7); plot(ww_high,abs(hh_high);xlabel('Frequency(Hz)');title('Magnitude Response'); grid on;subplot(3,3,8); stem(n,y_high);title('after IIR highpass filter'); grid on;axis(0 50 -5 5);subplot(3,3,9); plot(w_high/pi,abs(h_high);title('Magnitude Response'); grid on;小结 从上面的IIR和FIR的滤波效果图可以看出,IIR的过滤效果比FIR的效果要好,也就是选择性较好,FIR出现了明显的群延时现象。 原因是: IIR滤波器传输函数的零点可以在单位圆的任何地方,极点可以在单位圆内任何地方,因此可以用较低的阶数获得较高的选择性,但它是以相位的非线性为代价的。也就是选择性越好,相位非线性越严重。若要达到较为严格的线性要求,就要加全通网络进行相位矫正,但这时也是增大了滤波器的阶数和复杂度。 而FIR滤波器可以得到严格的线性相位,但它的传输函数的零极点固定在了原点,所以只能要较高的阶数达到较高的选择性于是群延时也越严重。 一开始我设计的FIR滤波器群延时非常严重,于是我就改变了截止频率的范围,使带宽变得窄一些,因为带宽和阶数成反比,于是增大了阶数,这样可以减小一定程度的群延时,但还是不能完全避免。 综上,不论IIR和FIR,阶数越高,信号延迟越大;同时在IIR滤波器中,阶数越高,系数的精度要求越高,否则很容易造成有限字长的误差使极点移到单位园外。因此在阶数选择上,我们应该根据实际情况进行综合考虑的,设计符合要求和实际的滤波器。专心-专注-专业