多项式和矩阵乘积的卷积等价

信息处理 matlab 傅里叶变换 卷积 线性代数 八度
2022-02-20 16:48:22

我试图通过多项式(系数)乘法、快速傅里叶变换和矩阵乘法来理解卷积的等价性。我正在使用 octave 和 octave-signal 包,这个问题的一部分可能与它们的实现有关(我相信这与 MATLAB 相同)。

因此,我创建了长度为的原始信号,而我的棚车窗口长度为Nn

N = 48; 
n = 6; 

我使用作为这个例子的输入函数。sin

dt = 2*pi/N;
t = [-N/2:N/2-1]'*dt;
f = sin(t);

多项式乘法卷积():g=hf

h = ones(n,1);
g_conv = conv(h,f);
g_conv_same = conv(f,h,'same');

FFT 和 FFT 卷积与输入的零填充(也是):g=hf

g_ft = real(ifft(fft(h,N).*fft(f)));

f_padded = [f; zeros(n-1,1)]; % append zeros
g_ft_padded = real(ifft(fft(h,N+n-1).*fft(f_padded)));

矩阵乘法卷积():g=Af

A = convmtx(h,N);
g_mtx = A*f;

A看起来像这样: 卷积矩阵

查找修剪数组的索引:

idx_A = find(sum(A,2) == n);
idx_t = 1:length(idx_A);

绘制结果(通过不同方法卷积的信号):

plot(t(idx_t),g_mtx(idx_A),'k','linewidth',3);
line(t-5*dt,g_ft,'color','g','linewidth',2);       %-> offset by 5*dt
line(t-7*dt,g_ft_padded(1:length(t)),'color','r','linestyle','--'); %-> offset by 7*dt
line(t(idx_t),g_conv(idx_A),'color','b','marker','o');
line(t-2*dt,g_conv_same,'color','b','marker','+'); %-> offset by 2*dt
legend({'matrix','FFT','FFT (padded)','conv','conv (same shape)'},...
       'location','southeast')
xlabel('x value')
ylabel('y value')

看起来像这样:

卷积信号图

在这一点上我有几个问题:

  • 为什么 FFT 方法的结果会偏移几个单位dt
  • 如果我填充 FFT 结果以使输入向量不再是周期性的(红色虚线),为什么我会在结果中遗漏部分卷积函数(右侧)?
  • 如何处理 FFT 卷积的末端,以使结果与多项式和矩阵乘法结果对齐?

提前致谢。PS如果这些细节有很好的教科书参考,我将不胜感激。

(我已经编辑澄清。)

2个回答

卷积和多项式乘法在定义上是等价的。偏移量通常通过索引引入。末端的处理很重要。

一个有用的结构是“卷积单元”。如果您发现一个信号,其自身卷积后保持相同,那么您就会对卷积算法的工作原理了解很多。请注意,虽然所有离散单元(所有被零包围的单元)都是卷积单元,但某些实现可能会引入填充或偏移量,以便生成的信号与其自身不同。

首先,让我们假设卷积产生的信号与原始信号之一一样长。假设结果保留了较长输入信号的长度是有帮助的。在这种情况下,填充变得必要。如果您查看离散卷积的定义,您会注意到您必须评估信号的未定义部分。通常用零填充它们,或者通过重复或反射信号。每种习俗都有一定的优点。

为了满足其他要求(例如,一个信号被认为是对称的),可以使用其他规则,在这种情况下,您可以将一半的填充左侧添加到另一个信号,另一半添加到右侧。然后您可能会丢弃一些样本并再次找到相同长度的信号。

这解释了不同的实现如何给出不同的结果:填充和结果选择有点 ,, ad hoc''。实际上,一些实现让用户可以选择如何填充或返回信号的哪一部分。

FFT 卷积是 ,,ring 卷积''。时域环绕边缘。它隐含地旋转扩展信号。这解释了它如何破坏您的信号。偏移是一个小问题,因为它很容易通过实现来解释。如果您希望 FFT 不干扰信号 ,,edges'' (输入数组极端处的索引),您必须手动填充,至少与第二个信号的支持一样长。请注意,如果其中一个信号较短,则必须将其填充到相同的长度,以使 FFT 卷积可行。

因此,您观察到的现象是实施的结果。没有关于如何填充 ,, 正确'' 或如何实现卷积以使其不引入 ,,offset'' 的一般答案 - 实际上,您在谈论不同的时域,这是一个约定问题如何映射卷积样本。