实验报告

更新时间:2023-10-11 08:24:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验报告四

专业: 电子信息工程 班级:09电子(1)班 指导老师:马英辉 姓名: 陈亚男 学号:20090306104 实验室:306 实验名称:数字滤波器的MATLAB实现 实验时间:2011.09.19 一、实验目的:

1.掌握IIR和FIR滤波器的基本结构 2.学会使用MATLAB实现数字滤波器 二、实验内容及步骤 1.直接形式

b=[1,-3,11,27,18];a=[16,12,2,-4,-1]; N=25;

h=impz(b,a,N);

x=[ones(1,5),zeros(1,N-5)]; y=filter(b,a,x);

subplot(1,2,1);stem(h);title('直线型h(n)'); subplot(1,2,2);stem(y);title('直线型y(n)'); 程序运行结果:

1

2.级联形式 ①impseq.m

function[x,n]=impseq(n0,ns,nf) n=[ns:nf];x=[(n-n0)==0];

②casfilter.m

function y=casfilter(b0,B,A,x); [K,L]=size(B); N=length(x); w=zeros(K+1,N); w(1,:)=x; for i=1:1:K

w(i+1,:)=filter(B(i,:),A(i,:),w(i,:)); end

y=b0*w(K+1,:);

利用上述函数,实现波形MATLAB程序如下:

b0=4;B=[1,1,0;1,-1.4142136,1];A=[1,-0.5,0;1,0.9,0.81]; N=60;

delta=impseq(0,0,N);

h=casfilter(b0,B,A,delta); x=[ones(1,5),zeros(1,N-5)]; y=casfilter(b0,B,A,x);

subplot(1,2,1);stem(h);title('级联型h(n)'); subplot(1,2,2);stem(y);title('级联型y(n)'); 程序运行结果:

2

3.并联形式 ①impseq.m

function [x,n]=impseq(n0,ns,nf) n=[ns:nf];x=[(n-n0)==0];

②parfilter.m

function y=parfilter(C,B,A,x); [K,L]=size(B); N=length(x); w=zeros(K+1,N);

w(1,:)=filter(C,1,x); for i=1:1:K

w(i+1,:)=filter(B(i,:),A(i,:),x); end

y=sum(w);

利用上述函数,实现波形MATLAB程序如下:

C=0;B=[-14.75,-12.90;24.50,26.82];A=[1,-7/8,3/32;1,-1,0.5]; N=60;

delta=impseq(0,0,N);

h=parfilter(C,B,A,delta); x=[ones(1,5),zeros(1,N-5)]; y=parfilter(C,B,A,x);

subplot(1,2,1);stem(h);title('并联型h(n)'); subplot(1,2,2);stem(y);title('并联型y(n)'); 程序运行结果:

3

4.级联形式 ①impseq.m

function[x,n]=impseq(n0,ns,nf) n=[ns:nf];x=[(n-n0)==0];

②dir2cas.m

function[b0,B,A]=dir2cas(b,a); b0=b(1);b=b/b0; a0=a(1);a=a/a0; b0=b0/a0;

M=length(b);N=length(a); if N>M

b=[b zeros(1,N-M)]; else if M>N

a=[a zeros(1,M-N)];N=M; else

NM=0 end end

K=floor(N/2);B=zeros(K,3);A=zeros(K,3); if K*2==N; b=[b 0]; a=[a 0]; end

broots=cplxpair(roots(b)); aroots=cplxpair(roots(a)); for i=1:2:2*K

Brow=broots(i:1:i+1,:); Brow=real(poly(Brow)); B(fix((i+1)/2),:)=Brow; Arow=aroots(i:1:i+1,:); Arow=real(poly(Arow));

A(fix((i+1)/2),:)=Arow; end

③casfilter.m

function y=casfilter(b0,B,A,x); [K,L]=size(B); N=length(x); w=zeros(K+1,N); w(1,:)=x; for i=1:1:K

w(i+1,:)=filter(B(i,:),A(i,:),w(i,:)); end

y=b0*w(K+1,:); 利用上述函数,

4

实现波形MATLAB程序如下: n=0:5; b=0.2.^n; N=30;

delta=impseq(0,0,N); h=filter(b,1,delta);

x=[ones(1,5),zeros(1,N-5)]; y=filter(b,1,x);

subplot(2,2,1);stem(h); title('直接型h(n)');

subplot(2,2,2);stem(y); title('直接型y(n)'); [b0,B,A]=dir2cas(b,1);

h=casfilter(b0,B,A,delta); y=casfilter(b0,B,A,x); subplot(2,2,3);stem(h); title('级联型h(n)');

subplot(2,2,4);stem(y); title('级联型y(n)'); 程序运行结果:

5

本文来源:https://www.bwwdw.com/article/fxkf.html

Top