音频进阶学习六——递归/非递归离散时间系统与差分方程
音频进阶学习六——递归/非递归离散时间系统与差分方程
本文深入探讨了递归和非递归离散时间系统以及差分方程的概念与应用。通过详细的数学推导和实例分析,帮助读者理解这些系统在信号处理中的重要作用。
前言
在之前的几篇文章中,我们介绍了系统的概念,以及系统的基本运算和分类,其中对于线性时不变系统做了很详细的介绍,同时对于LTI系统在时域上分析的重要数据工具——卷积和。
本篇文章中对于分析LTI系统时域上的另一个重要工具差分方程进行介绍,并且差分方程是以后对于语音信号在频域的处理上的基础。
一、递归和非递归的离散时间系统
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)+bk x(n−k)
此时y ( n ) y(n)y(n)是当前的输出,x ( n ) x(n)x(n)是当前的输出,b k b_kbk 是当前回声的衰减,x ( n − k ) x(n-k)x(n−k)是之前的输出,这种就是最简单的非递归系统,那么如果想要更复杂一点,就把之前的输出y ( n − k ) y(n-k)y(n−k)也考虑进去。
二、差分方程
1.什么是差分方程
我们说,差分方程是分析LTI系统在时域上的一个重要工具,工具的意义是在于它能够帮助我们分析和使用,例如之前的文章中我们说卷积公式是用来将系统单位脉冲响应、任意的输入信号与输出信号关联起来的表达式。
差分方程是用来表达了一个序列(或信号)的值如何与其过去的值和其他输入信号的关系相关联,它描述的是一个系统的递推关系,广泛用于系统建模。和卷积公式表示系统的输入与系统特性结合后的结果不同,差分方程体现了系统的动态特性。
值得注意的是,描述系统输入输出关系的方法,在不同系统,所用的工具是不一样的:
- 模拟系统:微分方程描述
- 离散时间系统:差分方程描述
- 线性时不变系统:常用线性常系数差分方程
对于线性和常系数的含义下文中进行解释
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)]
F FF表示为函数
3.差分方程的阶数
差分方程的阶数指方程中涉及的最大延迟量,我们再来看一下上面的方程,其中N NN代表过去输出的最远引用过去的时刻,M MM表示过去输入的最远引用过去的时刻。其中N 、 M N、MN、M我们就叫做阶数,且N NN的取值是几,我们就称这个差分方程为几阶差分方程,例如:当N = 1 N=1N=1时,就叫做一阶差分方程。
值得注意的是这种情况是可以出现的M ≠ N M \neq NM=N,以下是对于阶数的理解:
- 差分方程的阶数M = N = 1 M = N = 1M=N=1,它的表现形式为
y ( n ) = a y ( n − 1 ) + b x ( n ) y(n) = ay(n-1) + bx(n)y(n)=ay(n−1)+bx(n)
那么它是一个一阶差分方程,需要考虑前一时刻的输出和此时输入信号,如下: - 差分方程的阶数N = 2 , M = 1 N = 2, M=1N=2,M=1,那么它的表现形式为
y ( n ) = a 0 y ( n − 1 ) + a 1 y ( n − 2 ) + + b 0 x ( n ) y(n) = a_0y(n-1) + a_1y(n-2) + + b_0x(n)y(n)=a0 y(n−1)+a1 y(n−2)++b0 x(n)
它是一个二阶差分方程,且需要考虑前二个时刻的输出和此时的输入。
4.线性常系数
对于线性的理解很好理解,对于系统过去的输出和系统的输入只有一次幂即为线性。
上文提到的例子中,a i a_iai 、b i b_ibi 分别是输入和输出的系数。假设a i a_iai 、b i b_ibi 不会随着时间变化而变化,那么就称为常系数,反之称之为非常系数。例如:
y ( n ) = a 0 y ( n − 1 ) + a 1 y ( n − 2 ) + + b 0 x ( n ) y(n) = a_0y(n-1) + a_1y(n-2) + + b_0x(n)y(n)=a0 y(n−1)+a1 y(n−2)++b0 x(n)
是常系数差分方程,而
y ( n ) = a 0 [ n ] y ( n − 1 ) + a 1 y [ n − 1 ] y ( n − 2 ) + + b 0 [ n ] x ( n ) y(n) = a_0[n]y(n-1) + a_1y[n-1]y(n-2) + + b_0[n]x(n)y(n)=a0 [n]y(n−1)+a1 y[n−1]y(n−2)++b0 [n]x(n)
则是非常系数差分方程。
例如一个最简单的一阶差分计算的递归系统y ( n ) = n n + 1 y ( n − 1 ) + 1 n + 1 x ( n ) y(n)=\frac{n}{n+1}y(n-1)+\frac{1}{n + 1}x(n)y(n)=n+1n y(n−1)+n+11 x(n),假设对于n < 0 , y ( n ) = 0 n < 0, \quad y(n)=0n<0,y(n)=0,那么展开来就有
y ( 0 ) = x ( 0 ) y ( 1 ) = 1 2 y ( 0 ) + 1 2 x ( 1 ) y ( 2 ) = 2 3 y ( 1 ) + 1 3 x ( 2 ) y(0) = x(0) \ y(1) = \frac{1}{2}y(0)+\frac{1}{2}x(1) \ y(2)=\frac{2}{3}y(1) + \frac{1}{3}x(2)y(0)=x(0)y(1)=21 y(0)+21 x(1)y(2)=32 y(1)+31 x(2)
它就不是一个常系数差分方程。
三、常系数差分方程的推导
1.递归求和
有没有考虑一个问题,为什么不仅依赖过去的输入,还需要依赖过去的输出才叫做递归系统,如果考虑了这个问题那么答案其实很明显:过去的输出其实依赖更过去的输入,并且过去的输出也当作了现在的输入。形成了无限递归的形式。
2.一阶差分方程公式
假如现在有一阶差分方程:y ( n ) = a y ( n − 1 ) + b x ( n ) y(n) = ay(n-1) + bx(n)y(n)=ay(n−1)+bx(n),假设对于n < 0 , y ( n ) = 0 n < 0, \quad y(n)=0n<0,y(n)=0,即n < 0 n < 0n<0之前的输入输出不考虑,那么按照规律有:
y ( 0 ) = a y ( − 1 ) + x ( 0 ) y ( 1 ) = a y ( 0 ) + x ( 1 ) = a 2 y ( − 1 ) + a x ( 0 ) + x ( 1 ) y ( 2 ) = a y ( 1 ) + x ( 2 ) = a 3 y ( − 1 ) + a 2 x ( 0 ) + a x ( 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(0) = ay(-1) + x(0) \ y(1) = ay(0) + x(1) = a^2y(-1) + ax(0) + x(1) \ y(2) = ay(1) + x(2) = a^3y(-1) + a^2x(0) + ax(1) + x(2) \ 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(0)=ay(−1)+x(0)y(1)=ay(0)+x(1)=a2y(−1)+ax(0)+x(1)y(2)=ay(1)+x(2)=a3y(−1)+a2x(0)+ax(1)+x(2)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 0y(n)=an+1y(−1)+k=0∑n akx(n−k)n≥0
3.弛豫和非弛豫
弛豫和非弛豫的概念是很重要的,假设现在有一个系统,在时刻n = 0 n = 0n=0,它的记忆是0,也就是y ( − 1 ) = 0 y(-1) = 0y(−1)=0,那么这个系统就是弛豫的,而当一个系统在在时刻n = 0 n = 0n=0,y ( − 1 ) ≠ 0 y(-1) \neq 0y(−1)=0,那么这个系统就是非弛豫的,我们用y z i y_{zi}yzi 表示非弛豫常系数差分方程的前部,y z s y_{zs}yzs 表示非弛豫常系数差分方程的后部。
所以上面一阶差分方程可以表示为
y z s ( n ) = ∑ k = 0 n a k x ( n − k ) n ≥ 0 y z i ( n ) = a n + 1 y ( − 1 ) y_{zs}(n) =\sum_{k=0}^na^kx(n-k) \quad \quad n\geq 0 \ y_{zi}(n) = a^{n+1}y(-1)yzs (n)=k=0∑n akx(n−k)n≥0yzi (n)=an+1y(−1)
即上文一阶差分方程表示为y ( n ) = y z i ( n ) + y z s ( n ) y(n) = y_{zi}(n) + y_{zs}(n)y(n)=yzi (n)+yzs (n),当在时刻n = 0 n = 0n=0,系统的记忆是0,那么对于一阶差分方程y ( n ) = y z s ( n ) y(n) = y_{zs}(n)y(n)=yzs (n)
4.用差分方程描述非递归系统
不需要系统的过去的输出,只需要过去的输入可以用差分方程来表示吗?答案是当然可以,只是无法体现差分方程的递归性质。例如一个非递归系统:
y ( n ) = b 0 x ( n ) + b 1 x ( n − 1 ) + b 2 x ( n − 2 ) + . . . + b N ( x − M ) y(n) = b_0x(n) + b_1x(n-1)+b_2x(n-2)+...+b_N(x-M)y(n)=b0 x(n)+b1 x(n−1)+b2 x(n−2)+...+bN (x−M)
它可以写作为
y ( n ) = ∑ k = 0 M b k x ( n − k ) y(n) = \sum_{k=0}^Mb_kx(n-k)y(n)=k=0∑M bk x(n−k)
5.多阶差分方程
对于线性常系数多阶差分方程,即
y ( n ) = a 1 y ( n − 1 ) + a 2 y ( n − 2 ) + . . . + a N y ( n − N ) + b 0 x ( n ) + b 1 x ( n − 1 ) + . . . + b M x ( n − M ) y [ n ] = ∑ i = 0 M b i x [ n − i ] + ∑ k = 1 N a k y [ n − k ] y(n) = a_1y(n-1) + a_2y(n-2)+...+a_Ny(n-N) + b_0x(n) + b_1x(n-1)+...+b_Mx(n-M) \ y[n] = \sum_{i = 0}^M b_ix[n-i] + \sum_{k=1}^Na_ky[n-k]y(n)=a1 y(n−1)+a2 y(n−2)+...+aN y(n−N)+b0 x(n)+b1 x(n−1)+...+bM x(n−M)y[n]=i=0∑M bi x[n−i]+k=1∑N ak y[n−k]
由于系统的系数为常数,为了方便书写,我们将− a k -a_k−ak 看作是a k a_kak ,那么便有
∑ k = 0 N a k y [ n − k ] = ∑ i = 0 M b i x [ n − i ] \sum_{k=0}^Na_ky[n-k] = \sum_{i = 0}^M b_ix[n-i]k=0∑N ak y[n−k]=i=0∑M bi x[n−i]
其中:
- b k b_kbk :输入信号的系数(前馈部分),也就是当n = k n=kn=k时,输入信号的系数b 0 , b 1 , b 2 . . . . . b_0,b_1,b_2.....b0 ,b1 ,b2 .....
- a k a_kak :输出信号的系数(反馈部分),也就是当n = k n=kn=k时,输出信号的系数a 0 , a 1 , a 2 . . . . . a_0,a_1,a_2.....a0 ,a1 ,a2 .....
- N是输出信号的最大延迟阶数,M 是输入信号的最大延迟阶数
总结
本文先对于什么是递归系统、非递归系统做了介绍,利用差分方程来描述递归系统和非递归系统的表达式,而博主的最终目的,其实是为了解释IIR滤波器和FIR滤波器的特征。
实际上,对于FIR滤波器设计,就是用差分方程描述的非递归系统,而对于IIR滤波器的设计,就是多阶差分方程式,而对于两种滤波器的介绍和使用,会在后面的文章中进行介绍。
在下一篇文章中,我们将结合实例来介绍线性常系数差分方程是如何求解的。