Matlab中的比例因子`conv()`

时间:2013-07-01 19:23:22

标签: matlab math signal-processing convolution

我有以下代码用于解卷积信号。它在我的错误限制内工作得非常好......只要我将最终结果除以非常大的因子(11000)。

width = 83.66;
x = linspace(-400,400,1000);

       a2 =  1.205e+004  ;
       al =  1.778e+005  ;
       b1 =       94.88  ;
       c1 =       224.3  ;
       d =       4.077  ;

measured =  al*exp(-((abs((x-b1)./c1).^d)))+a2;

rect = @(x) 0.5*(sign(x+0.5) - sign(x-0.5));
rt = rect(x/83.66);

signal = conv(rt,measured,'same');


check = (1/11000)*conv(signal,rt,'same');

这就是我所拥有的。 measured表示我给出的信号。信号是我想要找到的。检查是验证如果我用我发现的信号卷曲我的缝隙,我得到相同的结果。如果你使用我所拥有的东西,你会发现检查和测量结果是因为我扔到那里的那个因素是11000~。

有没有人有任何建议。我的想法是,切口高度不是1,否则卷积实际上不会有效地解卷积,正如我所要求的那样。 (deconv的使用只给我1分,所以我用了convolve)。

1 个答案:

答案 0 :(得分:3)

我认为你误解了conv(也可能因此也是deconv)正在做什么。

离散卷积只是一个总和。实际上,您可以使用一些显式循环,即测量和rt矢量的乘积之和,将其扩展为总和。

请注意,sum(rt)不是1.将rt缩放为总和为1,然后conv将保留原始向量的缩放。所以,请注意这些标记是如何通过的。

sum(rt)
ans =
   104

sum(measured)
ans =
   1.0231e+08

signal = conv(rt,measured);
sum(signal)
ans =
   1.0640e+10

sum(signal)/sum(rt)
ans =
   1.0231e+08

看到下一个版本确实保留了矢量的缩放比例:

signal = conv(rt/sum(rt),measured);
sum(signal)
ans =
   1.0231e+08

现在,事实证明,你对conv使用相同的选项。这会引入边缘效应,因为它会截断一些信号,因此最终会丢失一些信号。

signal = conv(rt/sum(rt),measured,'same');
sum(signal)
ans =
   1.0187e+08

我们的想法是,只要内核被缩放为1,并且由于边缘截断而没有损失,conv将保留信号的缩放。当然卷积作为一个整体也有类似的属性。

顺便说一下,大约11000的引用因素来自哪里?

sum(rt)^2
ans =
       10816

可能是巧合。或不。想一想。