文章目录
前言
在之前的几篇文章中,我们介绍了系统的概念,以及系统的基本运算和分类,其中对于线性时不变系统做了很详细的介绍,并通过卷积和推导了线性时不变系统的数学公式,在此基础上,进一步介绍了系统的实际应用——滤波器的概念和分类,其中特别提到了FIR滤波器(有限长冲激响应的系统)和IIR滤波器(无限长冲激响应的系统)。
FIR和IIR滤波器的特征中,不仅仅满足线性时不变还是一种记忆系统,即依赖过去的输出,或者还要依赖过去的输入,那么在这种情况下,如何对于这一类系统,如何求导他们的数学公式呢?请看接下来的文章。
|版本声明:山河君,未经博主允许,禁止转载
一、递归和非递归的离散时间系统
1.递归和非递归系统的定义和区别
简单来说,递归系统的的输出不仅仅依赖过去的输入,还依赖过去的输出;而非递归系统仅仅依赖过去的输入。
两者的区别在于存不存在反馈回路,如图
图(a)仅仅需要过去的输入就可以,所以它是非递归系统
图(b)还需要过去的输入,并且存在反馈,所以他是递归系统
两张图片中其他的参数下文中解释。
2.递归系统和非递归系统存在的意义
设想这样一个场景,你在一个空旷的山谷中,大声的呼喊了一声,这个时候听到的不仅仅是自己此时此刻发出的声音,还有由山谷反射回来的声音。
假设最简单的场景,只有一声回声,虽然实际中肯定不如此,此时用公式简单的表示为:
y ( n ) = x ( n ) + b k x ( n − k ) y(n) = x(n) + b_kx(n-k) y(n)=x(n)+bkx(n−k)
此时 y ( n ) y(n) y(n)是当前的输出, x ( n ) x(n) x(n)是当前的输出, b k b_k bk是当前回声的衰减, x ( n − k ) x(n-k) x(n−k)是之前的输出,这种就是最简单的非递归系统,那么如果想要更复杂一点,就把之前的输出 y ( n − k ) y(n-k) y(n−k)也考虑进去。
二、非递归系统的公式
1.回顾卷积和
在推导差分方程之前,我们先简单回顾一下上一篇文章中推导的卷积和公式:
- 根据线性系统的叠加性,对于输入信号 x ( n ) x(n) x(n)拆分为多个信号加权和,然后得到输出公式
y ( n ) = ∑ k c k y k ( n ) y(n) = \sum_kc_ky_k(n) y(n)=k∑ckyk(n) - 使用特殊符号 h ( n , k ) h(n,k) h(n,k)表示系统对于输入单位采样在 n = k n=k n=k时的冲激响应,再进行替换,得到
y ( n ) = ∑ k = − ∞ ∞ x ( k ) h ( n , k ) y(n)=\sum_{k = -\infty}^\infty x(k)h(n,k) y(n)=k=−∞∑∞x(k)h(n,k)
- 由于系统是时不变,输入输出特性不会发生改变,最终得到
y ( n ) = ∑ k = − ∞ ∞ x ( k ) h ( n − k ) y(n) = \sum_{k = -\infty}^\infty x(k)h(n-k) y(n)=k=−∞∑∞x(k)h(n−k)
2.非递归系统表达方式
由于非递归系统只需要考虑之前的输出,所以它的表达方式非常简单:
y ( n ) = F [ x ( n ) , x ( n − 1 ) , x ( n − 2 ) . . . , x ( n − M ) ] y(n) = F[x(n), x(n-1), x(n-2)...,x(n-M)] y(n)=F[x(n),x(n−1),x(n−2)...,x(n−M)]
其中 F [ ∗ ] F[*] F[∗]是自变量的函数, M M M是当前 n n n过去输入的范围取值,也叫做阶数。
在之前的一篇文章中我们说到FIR滤波器的卷积公式为
y [ n ] = ∑ k = 0 N − 1 h [ k ] ∗ x [ n − k ] y[n] = \sum_{k=0}^{N-1} h[k]*x[n-k] y[n]=k=0∑N−1h[k]∗x[n−k]
这里可以印证,表达方式为:
y [ n ] = ∑ k = 0 M h [ k ] ∗ x [ n − M ] y[n] = \sum_{k=0}^{M} h[k]*x[n-M] y[n]=k=0∑Mh[k]∗x[n−M]
= h ( 0 ) x ( n ) + h ( 1 ) x ( n − 1 ) + h ( 2 ) x ( n − 2 ) + . . . . + h ( M ) x ( n − M ) =h(0)x(n) + h(1)x(n-1) + h(2)x(n-2)+....+h(M)x(n-M) =h(0)x(n)+h(1)x(n−1)+h(2)x(n−2)+....+h(M)x(n−M)
= y ( n ) = F [ x ( n ) , x ( n − 1 ) , x ( n − 2 ) . . . , x ( n − M ) ] =y(n) = F[x(n), x(n-1), x(n-2)...,x(n-M)] =y(n)=F[x(n),x(n−1),x(n−2)...,x(n−M)]
三、递归系统公式
1.差分方程
差分方程是描述离散时间信号或系统的方程,主要用于分析和处理随时间变化的离散数据。可以看作是对离散时间序列的递推关系,它定义了当前状态与过去状态之间的关系。
2.差分方程表达递归公式
递归系统存在反馈回路,需要参考过去输入和输出信号,它的差分方程表达式为
y ( n ) = F [ y ( n − 1 ) , y ( n − 2 ) . . . , y ( n − N ) , x ( n ) , x ( n − 1 ) , x ( n − 2 ) . . . , x ( n − M ) ] y(n) = F[y(n-1), y(n-2)...,y(n-N),x(n), x(n-1), x(n-2)...,x(n-M)] y(n)=F[y(n−1),y(n−2)...,y(n−N),x(n),x(n−1),x(n−2)...,x(n−M)]
其中 N N N和 M M M分别式过去输出的阶数,和过去输入的阶数。
3.差分方程的阶数
一阶差分方程是指只需要考虑前一时刻的输出和此时输入信号,如下:
y ( n ) = a y ( n − 1 ) + b x ( n ) y(n) = ay(n-1) + bx(n) y(n)=ay(n−1)+bx(n)
二阶差分方程是指需要考虑前一个时刻的输出、此时的输入、前二时刻的输出、前一时刻的输入,如下:
y ( n ) = a 0 y ( n − 1 ) + b 0 x ( n ) + a 1 y ( n − 2 ) + b 1 x ( n − 1 ) y(n) = a_0y(n-1) + b_0x(n) + a_1y(n-2) + b_1x(n-1) y(n)=a0y(n−1)+b0x(n)+a1y(n−2)+b1x(n−1)
其中 a 0 a_0 a0、 b 0 b_0 b0、 a 1 a_1 a1、 b 1 b_1 b1分别是输入和输出的系数。
例如一个最简单的一阶差分计算的递归系统:
y ( 0 ) = x ( 0 ) y(0) = x(0) y(0)=x(0)
y ( 1 ) = 1 2 y ( 0 ) + 1 2 x ( 1 ) y(1) = \frac{1}{2}y(0)+\frac{1}{2}x(1) y(1)=21y(0)+21x(1)
y ( 2 ) = 2 3 y ( 1 ) + 1 3 x ( 2 ) y(2)=\frac{2}{3}y(1) + \frac{1}{3}x(2) y(2)=32y(1)+31x(2)
也就是这个系统的计算方式为:
y ( n 0 ) = n 0 n 0 + 1 y ( n 0 − 1 ) + 1 n 0 + 1 x ( n 0 ) y(n_0)=\frac{n_0}{n_0+1}y(n_0-1)+\frac{1}{n_0 + 1}x(n_0) y(n0)=n0+1n0y(n0−1)+n0+11x(n0)
4.差分方程的推导
假如现在有一阶差分方程:
y ( n ) = a y ( n − 1 ) + b x ( n ) y(n) = ay(n-1) + bx(n) y(n)=ay(n−1)+bx(n)
那么按照规律有:
y ( 0 ) = a y ( − 1 ) + x ( 0 ) y(0) = ay(-1) + x(0) y(0)=ay(−1)+x(0)
y ( 1 ) = a y ( 0 ) + x ( 1 ) = a 2 y ( − 1 ) + a x ( 0 ) + x ( 1 ) y(1) = ay(0) + x(1) = a^2y(-1) + ax(0) + x(1) y(1)=ay(0)+x(1)=a2y(−1)+ax(0)+x(1)
y ( 2 ) = a y ( 1 ) + x ( 2 ) = a 3 y ( − 1 ) + a 2 x ( 0 ) + a x ( 1 ) + x ( 2 ) y(2) = ay(1) + x(2) = a^3y(-1) + a^2x(0) + ax(1) + x(2) y(2)=ay(1)+x(2)=a3y(−1)+a2x(0)+ax(1)+x(2)
y ( n ) = a y ( n − 1 ) + x ( n ) = a n + 1 y ( − 1 ) + a n x ( 0 ) + a n − 1 x ( 1 ) + . . . + a x ( n − 1 ) + x ( n ) y(n) = ay(n-1) + x(n) = a^{n+1}y(-1) + a^nx(0) + a^{n-1}x(1) + ...+ ax(n-1) + x(n) y(n)=ay(n−1)+x(n)=an+1y(−1)+anx(0)+an−1x(1)+...+ax(n−1)+x(n)
即
y ( n ) = a n + 1 y ( − 1 ) + ∑ k = 0 n a k x ( n − k ) n ≥ 0 y(n) = a^{n+1}y(-1) +\sum_{k=0}^na^kx(n-k) \quad \quad n\geq 0 y(n)=an+1y(−1)+k=0∑nakx(n−k)n≥0
4.IIR系统由差分方程表示
相对于FIR滤波器来说,由于IIR系统存在无限冲激响应,当处于非弛豫状态(即 x = 0 x=0 x=0时 y ≠ 0 y\neq0 y=0)时,利用一阶差分方程表示
y [ n ] = ∑ k = 0 N b k x [ n − k ] − ∑ k = 1 M a k y [ n − k ] y[n] = \sum_{k = 0}^N b_kx[n-k] - \sum_{k=1}^Ma_ky[n-k] y[n]=k=0∑Nbkx[n−k]−k=1∑Maky[n−k]
其中:
- b k b_k bk:输入信号的系数(前馈部分),也就是当 n = k n=k n=k时,输入信号的系数 b 0 , b 1 , b 2 . . . . . b_0,b_1,b_2..... b0,b1,b2.....
- a k a_k ak:输出信号的系数(反馈部分),也就是当 n = k n=k n=k时,输出信号的系数 a 0 , a 1 , a 2 . . . . . a_0,a_1,a_2..... a0,a1,a2.....
总结
本文先对于什么是递归系统、非递归系统做了介绍,在之前卷积和的基础上,利用差分方程来描述递归系统和非递归系统的表达式,而博主的最终目的,其实是为了解释IIR滤波器和FIR滤波器的特征,是为了研究在实际数字音频信号中的3A处理,这两种滤波器在3A处理中是非常重要的。当然,对于这一块是放在别的系列文章中介绍。
如果对您有所帮助,请帮忙点个赞吧!