【实验目的】
加深对IIR数字滤波器的级联结构的理解,掌握应用Matlab实现给定系统的级联结构。
【实验内容】
利用 MATLAB 编程将给定直接结构的系统用级联结构来实现,要求如下:
编写一个通用的函数,输入参数为直接形式的系统函数分母分子中的各阶系数
A=(a0,a1,…,aN) ,B=(b0,b1,…,bN)。输出为矩阵E和F,其中E和F的每一行分别代表一个二阶节(一阶节可看做二阶节的特例)中分母和分子中的系数。
给定一个系统,利用编写的函数求出级联结构中各个二阶节的系数,画出系统的级联结构图。
一个系统由如下的差分方程给出,编写求级联结构各二阶节系数的函数,用主程序调用该函数求出该系统各级二阶节的系数,根据程序运行结果,画出该系统的级联结构。
13y(n)+8y(n-1)+2y(n-2)-4y(n-3)-y(n-4)=2x(n)-3x(n-1)+9x(n-2)-26x(n-3)+18x(n-4)
【实验步骤】
实验代码及注释如下:
main.m如下
%主程序main.m 调用函数TheCalledFunction.m
n = input('输入阶数:');
char coefficient_Y(i) coefficient_X(i);
%循环输入Y的系数
for i=1:n
coefficient_Y(i)=input('输入Y的系数:')
end
%循环输入X的系数
for j=1:n
coefficient_X(j)=input('输入X的系数:')
end
E=TheCalledFunction(coefficient_Y)%调用函数,求出Y的多项式结果
F=TheCalledFunction(coefficient_X)%调用函数,求出X的多项式结果
调用的TheCalledFunction.m如下
function cal=TheCalledFunction(xxi)
N=length(xxi);%求多项式长度
root=roots(xxi);%求根
sort=cplxpair(root);%将求出的根按照复共轭对进行排序
k=(N-1)/2;%计算级联个数
%下面的循环确定最终的多项式,poly将一对根转化为对应的多项式
for J=1:k
sortpro=[sort(2*J-1) sort(2*J)];
cal(J,:)=poly(sortpro);
end
【实验结果及分析】
Matlab运行截图
实验结果:
>> clear
>> main
输入阶数:5
输入Y的系数:13
coefficient_Y =
13
输入Y的系数:8
coefficient_Y =
13 8
输入Y的系数:2
coefficient_Y =
13 8 2
输入Y的系数:-4
coefficient_Y =
13 8 2 -4
输入Y的系数:-1
coefficient_Y =
13 8 2 -4 -1
输入X的系数:2
coefficient_X =
2
输入X的系数:-3
coefficient_X =
2 -3
输入X的系数:9
coefficient_X =
2 -3 9
输入X的系数:-26
coefficient_X =
2 -3 9 -26
输入X的系数:18
coefficient_X =
2 -3 9 -26 18
E =
1.0000 0.9324 0.5817
1.0000 -0.3170 -0.1322
F =
1.0000 1.0784 5.7021
1.0000 -2.5784 1.5784
级联结构图如下:
暂无评论内容