【发布时间】:2019-03-21 03:13:34
【问题描述】:
我想对两个一维向量进行离散卷积。这些向量对应于作为频率函数的强度数据。我的目标是将一个强度向量 B 与其自身进行卷积,然后将结果与原始向量 B 进行卷积,依此类推,每次将结果与原始向量 B 进行卷积。我想要最终结果与原始向量 B 的长度相同。
我开始尝试将 IDL 中的代码修改为 MATLAB。代码的相关部分为:
for i=1,10 do begin
if i lt 2 then A=B else A=Rt
n=i+1
Rt=convol(A,B,s,center=0,/edge_zero)
...
endfor
我已经用 MATLAB 重写了
for i = 2:11
if i < 3
A = B; % indices start at 0, not 1
else
A = Rt;
end
n = i + 1;
% Scale by 1/s
Rt = (1/s).*conv(A,B);
...
end
但我不确定如何合并使用edge_zero 选项的零填充。在 IDL 中,卷积计算向量边缘的元素值,就好像向量用零填充一样。 MATLAB 中卷积函数的可选第三个选项包括选项 'same',它返回与 conv(u,v) 的 u 大小相同的卷积的中心部分,但这似乎不是正确的方法关于这个问题。如何在 MATLAB 中进行类似的零填充?
【问题讨论】:
-
MATLAB 始终使用零填充进行卷积。为什么你说“相同”不是正确的方法?你得到不同的结果吗?
标签: matlab convolution idl-programming-language