zl程序教程

您现在的位置是:首页 >  工具

当前栏目

迭代解卷积与噪声关系

迭代 关系 卷积 噪声
2023-09-11 14:15:19 时间

迭代求解卷积与噪声的关系

 

01 卷积


一、解卷积

  已知两个序列, 分别是 x[n] 以及 h[n], 它们之间的卷积  定义为这样的累加和。 是将其中一个序列进行反褶、平移、再与另外一个序列相乘、累加, 最终得到卷积结果。  如果已知卷积结果和其中一个序列, 求取另外一个序列的过程,  称为解卷积
GM1679882309_1280_800.MPG|_-13

▲ 图1.1.1 卷积与解卷积

▲ 图1.1.1 卷积与解卷积

  如果两个参与卷积的序列 都是因果序列。 那么累加的上下限就变成从 0 到 n。  然后再将该累加公式 分成两项。  进行化简之后,便可以得到关于 x[n] 的迭代公式。  将 h[0] 移到方程左边, 每一次迭代就可以得到最新的 x[n] 的数值。     下面讨论一下这个方程在噪声情况下的特性。 
GM1679883947_1280_800.MPG|_-17
  刚才展示的公式分子有误, 应该是减号。
GM1679884045_1280_800.MPG|_-2
x [ n ] = y [ n ] − ∑ m = 0 n − 1 x [ m ] ⋅ h [ n − m ] h [ n ] x\left[ n \right] = {{y\left[ n \right] - \sum\limits_{m = 0}^{n - 1} {x\left[ m \right] \cdot h\left[ {n - m} \right]} } \over {h\left[ n \right]}} x[n]=h[n]y[n]m=0n1x[m]h[nm]

二、加噪声解卷积

  为了展示解卷积,  还是利用前面的正弦信号的卷积作为例子。 这里假设已知 y[n],h[n],求解 x[n]。 为了展示迭代噪声的影响,这里将序列的密度增加, 这是 500 个数据点形成的 x[n] 序列,  将 h[n],y[n]对应的序列的采样密度也增加。 下面应用这些数据进行解卷积。
GM1679885016_1280_800.MPG|_-8

▲ 图1.2.1 参与解卷积的信号

▲ 图1.2.1 参与解卷积的信号

  下面通过 Python 编程, 实现其中的解卷积公式, 从给定的两个序列获得解卷积结果。 这是从 y[n],h[n] 中计算 x[n] 的取值, 可以看到与原来的 sine 波形是一样的, 证明了解卷积公式和子程序的正确性。
GM1679885492_1280_800.MPG|_-5

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2023-03-27
#
# Note:
#============================================================
from headm import *
t = linspace(0, 2*2*pi, 500)
sint = sin(t)
ht = array([1]*len(t))
yt = convolve(ht,sint)
yt = yt[:len(t)]
def deconv(y,h):
    x = []
    for i in range(len(h)):
        s = sum([v1*v2 for v1,v2 in zip(x, h[:i][::-1])])
        x.append((y[i]-s)/h[0])
    return x
dx = deconv(yt,ht)
plt.plot(t, dx, lw=4, label="Deconvolve")
plt.plot(t, sint, lw=1, label='Origin')
plt.xlabel("t")
plt.ylabel("ft")
plt.legend(loc='upper right')
plt.grid(True)
plt.grid(False)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

▲ 在没有噪声情况下的解卷积

▲ 在没有噪声情况下的解卷积

  首先在卷积结果上增加正态分布的白噪声, 噪声的方差为 1。 利用卷积公式求 x[n], 可以看到求解出的 x[n] 波形中也增加了白噪声, 方差大约为 1。 将 y[n] 中的噪声方程减小到 0.1, 求解得到的 x[n] 的噪声 也减少了。 特别是,这个结果中的噪声似乎并没有随着 n 的增加呈现累积增加的倾向。
GM1679886023_1280_800.MPG|_-6

▲ 图1.2.3 增加噪声情况下的解卷积

▲ 图1.2.3 增加噪声情况下的解卷积

  下面在参与求解的 h[n] 中增加噪声, 随机噪声的方差为 0.1,  大约是 h[n] 幅值的 10% 左右。 这是求解之后的 x[n] 的取值, 似乎 x[n] 已经发散了。 这是另一次运行结果, 与前面求解 x[n] 有所不同, 这是第三次运行的结果, x[n] 结果仍然是发散的趋势,  可以看到这种迭代解卷积对于 h[n] 中的噪声比较敏感, 而且每次运行结果还都是不尽相同。 这是在 h[n] 中叠加上 10% 的高斯噪声的测试结果。
GM1679886757_1280_800.MPG|_-9

▲ 图1.2.4 在 h[n] 上叠加 10% 高斯噪声迭代解卷积的结果

▲ 图1.2.4 在 h[n] 上叠加 10% 高斯噪声迭代解卷积的结果

  下面将 h[n] 的方程  减小到 0.05。 对 x[n] 进行解卷积, 这是解卷积 30 次形成的结果, 可以看到这种解卷积的结果不是很稳定, 特别是随着 n 增加,后面结果中的误差会累积,直到出现发散。 这个测试验证了这种迭代解卷积的方法在数值上不是很稳定。
GM1679887401_1280_800.MPG|_-7

▲ 图1.2.5  解卷积结果

▲ 图1.2.5 解卷积结果

 

  结 ※


  文对于迭代方法求解卷积进行测量测试, 可以看到在参与卷积数据中存在噪声时, 迭代方法求得结果中的误差会出现累计, 结果也呈现发散的倾向。
GM1679887542_1280_800.MPG|_-4


● 相关图表链接: