音频进阶学习五——递归/非递归离散时间系统与差分方程

在这里插入图片描述


前言

在之前的几篇文章中,我们介绍了系统的概念,以及系统的基本运算和分类,其中对于线性时不变系统做了很详细的介绍,并通过卷积和推导了线性时不变系统的数学公式,在此基础上,进一步介绍了系统的实际应用——滤波器的概念和分类,其中特别提到了FIR滤波器(有限长冲激响应的系统)IIR滤波器(无限长冲激响应的系统)

FIRIIR滤波器的特征中,不仅仅满足线性时不变还是一种记忆系统,即依赖过去的输出,或者还要依赖过去的输入,那么在这种情况下,如何对于这一类系统,如何求导他们的数学公式呢?请看接下来的文章。


|版本声明:山河君,未经博主允许,禁止转载

一、递归和非递归的离散时间系统

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(nk)
此时 y ( n ) y(n) y(n)是当前的输出, x ( n ) x(n) x(n)是当前的输出, b k b_k bk是当前回声的衰减, x ( n − k ) x(n-k) x(nk)是之前的输出,这种就是最简单的非递归系统,那么如果想要更复杂一点,就把之前的输出 y ( n − k ) y(n-k) y(nk)也考虑进去。

二、非递归系统的公式

1.回顾卷积和

在推导差分方程之前,我们先简单回顾一下上一篇文章中推导的卷积和公式:

  • 根据线性系统的叠加性,对于输入信号 x ( n ) x(n) x(n)拆分为多个信号加权和,然后得到输出公式
    y ( n ) = ∑ k c k y k ( n ) y(n) = \sum_kc_ky_k(n) y(n)=kckyk(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(nk)

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(n1),x(n2)...,x(nM)]
其中 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=0N1h[k]x[nk]
这里可以印证,表达方式为:
y [ n ] = ∑ k = 0 M h [ k ] ∗ x [ n − M ] y[n] = \sum_{k=0}^{M} h[k]*x[n-M] y[n]=k=0Mh[k]x[nM]
= 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(n1)+h(2)x(n2)+....+h(M)x(nM)
= 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(n1),x(n2)...,x(nM)]

三、递归系统公式

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(n1),y(n2)...,y(nN),x(n),x(n1),x(n2)...,x(nM)]
其中 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(n1)+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(n1)+b0x(n)+a1y(n2)+b1x(n1)
其中 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(n01)+n0+11x(n0)

4.差分方程的推导

假如现在有一阶差分方程:

y ( n ) = a y ( n − 1 ) + b x ( n ) y(n) = ay(n-1) + bx(n) y(n)=ay(n1)+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(n1)+x(n)=an+1y(1)+anx(0)+an1x(1)+...+ax(n1)+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=0nakx(nk)n0

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=0Nbkx[nk]k=1Maky[nk]

其中:

  • 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处理中是非常重要的。当然,对于这一块是放在别的系列文章中介绍。

如果对您有所帮助,请帮忙点个赞吧!

猜你喜欢

转载自blog.csdn.net/qq_42956179/article/details/143116445