我不能说适当的零填充量....话虽如此,任何零填充都会构成不存在的数据。这不一定是错误的,但您应该意识到计算此信息的值可能存在偏差。有时你关心这个,有时你不关心。引入 1 零(在这种情况下)会使中间内核值始终保留在数据中,但为什么这应该是一个停止标准?重要的是,添加 2 个零仍然会留下实际存在于数据和内核中的值的一乘(x[0]*h[0] 和 x[3]*h[2] - 使用基于 0 的索引)。添加第三个零(或更多)只会在输出中产生零,因为 3 是内核的长度。换句话说,对于从 n=1 到 n = length(h)-1(在本例中为 1 或 2)的任何零填充,零填充将始终产生部分基于实际数据(但不完全)的输出。
即使长度为 2 或 1 的零填充仍然具有基于真实数据的乘法,但某些值会在“假”数据(与填充零相乘)上相加。在这种情况下,Matlab 为您提供了 3 个选项来说明您希望如何返回数据。首先,您可以获得full 卷积,其中包括有偏差的值,因为它们包括添加数据中并不真正存在的 0 值。或者你可以得到same,这意味着输出的长度是数据的长度y = [4 3 8 1]。这对应于 1 个零,但请注意,对于更长的内核,您可以在技术上获得 full 和 same 之间的其他长度,Matlab 只是不会为您返回这些长度。
最后,可能也是最重要的理解所有这些,你有valid 选项。在您的示例中,只有 2 个输出样本是根据仅对实际数据乘法产生的求和计算得出的(即,将内核样本与来自 x 的样本相乘,而不是从零开始)。更具体地说:
y[2] = h[2]*x[0] + h[1]*x[1] + h[2]*x[2] = 3 //0 based indexing like example
y[3] = h[2]*x[1] + h[1]*x[2] + h[2]*x[3] = 8
请注意,没有其他 y 值仅使用 h 和 x 计算,它们都包含填充的零,这不一定表示真实数据。例如:
y[4] = h[2]*x[2] + h[1]*x[3] + h[2]*0 <= padded zero