反卷积和多项式除法

信息处理 matlab 过滤器 线性系统 z变换 反卷积
2022-01-31 04:30:14

我在 MATLAB 的 deconv.m 函数中找到了这条评论

反卷积和多项式除法与数字滤波器的脉冲响应操作相同B(z)/A(z).

这个声明是什么意思?

这是否意味着可以恢复原始信号,x[n], 给定一个脉冲响应h[n]和输出y[n]? 如果是这样,怎么做?

如果我受到脉冲信号是否正确δ[n]作为滤波器的输入,其系数为y[n]作为分母和系数h[n]作为分子我会得到原来的x[n]?

3个回答

除了 Matt L. 的回答之外,我想强调一下为什么评论提到了多项式除法。考虑有限长度序列h[n]x[n], 有长度N(一个序列可以补零到长度N)。

现在,看看两者的卷积:

y[n]=h[n]x[n]=n=0N1h[n]x[nn]

例如,考虑两个序列h[n]=[1,2,3]x[n]=[4,6,5]. 他们的卷积是(在 Matlab 中)

>> conv([1 2 3], [4 6 5])

ans =

     4    14    29    28    15

现在,考虑两个多项式的乘积h(x)=1+2x+3x2x(x)=4+6x+5x2(在数学中):

Expand[(1 + 2 x + 3 x^2) (4 + 6 x + 5 x^2)]
>>> 4+14 x+29 x^2+28 x^3+15 x^4

如您所见,乘积多项式的系数等于两个序列的卷积值。

所以,现在要得到x[n]y[n],你需要执行多项式除法y(x)/h(x)

PolynomialQuotient[4 + 14 x + 29 x^2 + 28 x^3 + 15 x^4, (1 + 2*x + 3*x^2), x]
>>> 4+6 x+5 x^2

因此,多项式的系数产生原始序列。

这种技术可以扩展到无限序列。

要在此处获得与 Z 变换的连接:有限序列的 Z 变换x[n]h[n]

H(z)=1+2z1+3z2X(z)=4+6z1+5z2

以及输出的 Z 变换y[n]是(谁)给的

Y(z)=H(z)X(z).

在这里,您再次拥有多项式乘法。此外,在这里它变得更容易发现,为什么它也适用于无限序列:然后两者H(z)X(z)成为多项式的分数,但多项式乘法的原理仍然存在。

对于确实很容易实现的有限长度序列。两个序列的卷积x[n]h[n]

(1)y[n]=x[n]h[n]

对应于它们的乘法Z- 转换:

(2)Y(z)=X(z)H(z)

从中

(3)X(z)=Y(z)H(z)

跟随。最后,x[n]可以通过用分子多项式计算递归滤波器的脉冲响应来获得Y(z)和分母多项式H(z). 请注意,这个递归滤波器实际上是一个 FIR 滤波器(由于极点/零点消除),因为很明显,它的脉冲响应x[n]是有限长度的。

这个小 Matlab/Octave 示例应该有助于澄清这一点:

x=[1,2,3,4,5];
h=[5,4,3,2,1];
y=conv(x,h);
x2=过滤器(y,h,[1,zeros(1,4)])
x2 =

   1.0000 2.0000 3.0000 4.0000 5.0000

如果你“反转反卷积”,你会得到一个卷积。查看 Matlab 卷积conv,您可以阅读单行:

卷积和多项式乘法

所以它们(几乎)是一样的。

为了理解这个想法,让我们从标准乘法开始,暂时忘记进位。如果将 123 乘以 456。

要获得“单位”(请记住,不要携带),您唯一的选择是乘以单位(3×6)。要获得十,您现在可以将十乘以单位;两个选项:123 中的十,456 中的单位,123 中的单位,456 中的十。要获得数百,您可以将数百乘以单位(两个选项)和十乘以十(一个选项)。在每一步,受影响的指数对的总和是恒定的,当您向左移动时,这个总和会增加一个单位。

多项式乘法的工作原理类似于无进位乘法:得到xD术语,你必须结合术语的产品xdxDd, 只要d0Dd0. 在这里你看到权力的总和dDd对于给定的是常数D, 并随着D. 对于(无限)Laurent 或幂级数,您会得到与多项式积(称为Cauchy 积)类似的一组术语。

现在,获取序列或信号 (,a1,a0,a1,a2,,an,). 您可以将其转换为简单的对象,更易于操作,通过对索引进行编码n成权力zn,因为“权力不会混合”:一个人不能混淆两种不同的权力。然后,您在序列空间和不同的幂级数之间存在双射:+a1z1+a0z0+a1z1+a2z2++anzn+. 由于您在索引和幂之间有这种类比,因此柯西积自然会编码卷积(同构)。

您可以阅读更多内容: