Matlab:卷积和反卷积结果很奇怪

Matlab : Convolution and deconvolution results weird

数据 x 被输入到自回归模型 (AR) 模型。 AR 模型的输出在 SNR = 30 dB 时被加性高斯白噪声破坏。观察结果用 noisy_y 表示。

让 AR 模型有一个接近的估计 h_hat(这些是从最小二乘法估计中获得的)。我想看看从 h_hat 反卷积获得的输入和测量值与已知 x 的接近程度。

反卷积后,我应该得到 x_hat。我不确定执行反卷积的正确方法是在添加噪声之前使用 noisy_y 还是使用 y。我使用了以下代码。

下面是x vs x_hat的情节。可以看出,这些不匹配。我的理解错在哪里?请帮助。

密码是:

clear all
    N = 200; %number of data points
    a1=0.1650;
    b1=-0.850;
    h = [1 a1 b1]; %true coefficients

    x = rand(1,N);
    %%AR model
    y = filter(1,h,x); %transmitted signal through AR channel
    noisy_y = awgn(y,30,'measured');
    hat_h= [1 0.133 0.653];
    x_hat = filter(hat_h,1,noisy_y); %deconvolution
    plot(1:50,x(1:50),'b');
    hold on;
    plot(1:50,x_hat(1:50),'-.rd');

第一个问题是您的 AR 模型的系数 h 对应于一个 不稳定的 系统,因为它的一个极点位于单位圆之外:

>> abs(roots(h))
ans =

   1.00814
   0.84314

在给定发散输入序列的情况下,参数估计技术很可能无法收敛。事实上,查看所述 hat_h = [1 0.133 0.653] 很明显,参数估计没有收敛到实际系数附近的任何地方。在您的具体情况下,您没有提供说明如何获得 hat_h 的代码(除了指定它是 "obtained from Least Squares estimation"),因此无法进一步评论您的估计出了什么问题。

也就是说,standard formulation of Least Mean Squares (LMS) filters is given for an MA model. A common method for AR parameter estimation is to solve the Yule-Walker equations:

hat_h = aryule(noisy_y - mean(noisy_y), length(h)-1);

如果我们将此估计方法用于 稳定 系统,定义如下:

h = [1 -a1 -b1];

x = rand(1,N);
%%AR model
y = filter(1,h,x); %transmitted signal through AR channel
noisy_y = awgn(y,30,'measured');
hat_h = aryule(noisy_y - mean(noisy_y), length(h)-1);
x_hat = filter(hat_h,1,noisy_y); %deconvolution

xx_hat 的情节看起来像: