- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通过状态变量计算IIR 系统的输出
教材第四章已经介绍了IIR系统的直接型结构。这里再简单地回顾这种结构,然后阐述编程方法。
数字系统的系统函数可以写为
(1)
式中,子系统
(2)
由系统函数的零点决定。而子系统
(3)
则由系统函数的极点决定。
式(5)中,写在的左边,表示先实现零点,后实现极点。这样的结构称为IIR系统的直接形式Ⅰ。图1示出这种结构,框中标出用于编程的状态变量,详见下文。
图1 IIR系统的直接形式Ⅰ
对于线性时不变系统来说,上述两个子系统的次序可以调换,即
(4)
这时,先实现系统的极点,后实现零点。对应于式(4)的结构示于图2。合并图中的延迟支路即得图3。这样的结构称为IIR系统的直接形式Ⅱ,又名典范形式、正准型。IIR直接形式通常是指直接Ⅱ型。
直接Ⅱ型有以下特点:
所需要的延时单元最少。
系统调整不方便(调整任何一个系数都会影响全部零、极点)
受有限字长影响大。
图2 与图1等价的结构
图3 IIR系统的直接形式Ⅱ
根据给定的系统结构和输入序列,怎样列出差分方程,求出输出序列? 下面给出的程序有助于读者掌握这种方法。这个程序计算图1所示IIR直接形式Ⅰ的输出序列,演示状态变量的用法。
通过编程来实现数字网络时,最好在网络中设定状态变量。所谓状态变量就是状态节点变量。一个网络有许多节点,但不都是状态变量节点。状态变量是一组根据已知输入和初始状态,可以计算出输出信号及系统内部任意节点变量值的最少节点变量。图1设定7个状态变量,即。下面给出用C语言编写的函数dir1,。调用这个函数可以实现图1所示IIR直接形式Ⅰ。
函数dir1的参数意义如下:
Points : 输入参数,输入输出序列点数
Order : 输入参数,系统阶数
H0 : 输入参数,系统函数的常数因子
N[] : 输入参数,系统函数的分子多项式系数组
D[] : 输入参数,系统函数的分母多项式系数组
x[] : 输入参数,输入序列
y[] dir1的运行过程如下:
将状态变量数组 和 初始化为0。
对输入序列每一个样点
求输出y[i] = N[0] * x[i] * H0
累加系统函数的分子多项式对输出y[i]的贡献。
累加求系统函数的分母多项式对输出y[i]的贡献。
刷新状态变量数组(请注意刷新顺序:下标值最大的状态变量先被刷新)
// 求直接 1 型 IIR 系统的输出
void dir1(int points, int order, double H0, double N[], double D[], double x[], double y[])
{
int i, j, k;
double u[20], v[20];
for(i = 0; i=order; i++) // 状态变量 {
u[i] = 0; v[i] = 0;
}
for(i = 0; i points; i++) // 计算每一个输出点
{
y[i] = N[0] * x[i] * H0;
for(j = 1; j= order; j++)
y[i] = y[i] + u[j] * N[j];
for(k = 1; k= order; k++)
y[i] = y[i] - v[k] * D[k];
// 状态变量刷新
for(j = order; j=2; j--)
{
u[j] = u[j - 1]; v[j] = v[j - 1];
}
u[1] = x[i] * H0;
v[1] = y[i];
}
}
下面介绍IIR系统的级联实现形式。在这种形式中,系统函数被分解为零、极点形式,即
(5)
实际上,对IIR 滤波器来说,其系统函数的分子分母多项式是同阶的,即。式(5)中,是零点数组,是极点数组。系统的零、极点可能是复数。但由于和是实数数组,所以复数零、极点必将是共轭成对的。合并共轭成对的
文档评论(0)