Я не могу говорить о правильной сумме заполнения нулями ... При этом любое заполнение нулями составляет данные, которых там нет. Это не обязательно неправильно, но вы должны знать, что значения, вычисляющие эту информацию, могут быть предвзятыми. Иногда вы заботитесь об этом, иногда нет. Введение 1 нуля (в данном случае) оставило бы среднее значение ядра всегда в данных, но почему это должно быть критерием остановки? Важно отметить, что добавление 2 нулей все еще оставляет одно умножение значений, которые фактически присутствуют в данных и ядре (x [0] * h [0] и x [3] * h [2] - с использованием индексации на основе 0). Добавление 3-го нуля (или более) приведет к получению нулей в выходных данных, поскольку 3 - это длина ядра. Другими словами, заполнение нулями всегда будет приводить к выводу, который частично основан на фактических данных (но не полностью) для любого заполнения нулями от n = 1 до n = длина (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