因果性数字系统的时域实现
实验项目名称 实验:因果性数字系统的时域实现
实验目的 通过本实验的学习使学生熟悉和掌握数字信号处理系统中因果性数字系统的时域实现。
实验要求 在理解实验的原理的基础上,用MATLAB进行数字信号的处理,进一步熟悉和掌握数字信号处理系统中因果性数字系统的时域实现。
实验原理 根据数字滤波器直接形式I的结构,先实现FIR滤波器部分(nonrec.m),再实现纯递归的IIR滤波(rec.m),级联后可实现上面差分方程的运算。
实验仪器 计算机一台;
Matlab软件
实验步骤 1、编写nonrec.m函数文件,实现FIR滤波 。这里给定 , ,求 。
2、编写rec.m函数文件,实现纯递归IIR滤波 。这里给定 , , , ,求单位取样响应 。
3、用nonrec.m和rec.m函数编制dfilter.m函数文件,构成完整的一般IIR滤波器程序,并完成下列信号滤波
这里给定系统函数
,计算 。
4、用help查看内部函数filter.m,了解调用格式,重做3,并和你编写的dfilter.m的结果进行比较。
实验内容 1、编程实现FIR滤波
2、编写时实现纯递归IIR滤波; 差分方程:
系统函数:
3、调用库函数filter.m实现IIR滤波
实验数据 1.nonrec.m函数文件function y=nonrec(h,x)
m=length(h);
n=length(x);
for k=1:(m+n-1)
S=0;
if k<=n
n1=k;
for m1=1:m
if n1>=1
S=S+h(m1)*x(n1);y(k)=S;n1=n1-1;
end end
else n2=n;
for m1=(1+k-n):m
if n2>=1
S=S+h(m1)*x(n2);y(k)=S;n2=n2-1;
end end end end end
>> h=ones(1,8);
>> x=0:15;
>> y=nonrec(h,x)
y =0 1 3 6 10 15 21 28 36 44 52 60 68 76 84 92 84 75 65 54 42 29 15
2.rec.m函数文件function y=rec(x,a)
La=length(a);
Lx=length(x);
y(1)=x(1);
for k=2:100
A=0;
if k<=Lx if k<=La+1 for m=1:k-1
A=A+a(k-m)*y(m);y(k)=A+x(k);
end
else for c=1:La
A=A+a(c)*y(k-c);y(k)=x(k)+A;
end end
else
751com.cn
else
for d=1:La
A=A+a(d)*y(k-d);y(k)=A;
end end end end end
3.dfilter.m函数文件
function y=dfilter(x,a,b)
y1=rec(x,a);
y=nonrec(b,y1);
>> a1=2*0.95*cos(pi/8);
>>a2=-0.95*0.95;
>>a=[a1 a2];x=[1];
>>y=rec(x,a);>> a=[0.6,-0.5]
>> b=[1 -3 1];
>> n=0:63;
>> x=sin(3*pi*n/5);
>> y1=dfilter(x,a,b);
>> y2=filter(b,a,x);
>> subplot(2,1,1),stem(y1),grid on,title('dfilter.m计算结果')
>> subplot(2,1,2),stem(y2),grid on,title('filter.m计算结果')
内部函数filter.m的调用格式是 y = filter(b,a,X)
编写的dfilter.m调用格式是 y=dfilter(x,a,b)
实验总结
通过本此上机实践熟悉和掌握了数字信号出来的因果性数字系统的时域实现,进一步了解和认识了数字信号的MATLAB实现及用MATLAB实现数字信号处理。176