В чем разница между filter и conv в Matlab?
Я пытаюсь рассчитать выход системы LTI. Я натолкнулся на две разные функции Matlab, которые должны подходить для работы: filter
и conv
. В чем разница между ними двумя?
Ответы
Ответ 1
filter
может обрабатывать системы FIR и IIR, а conv
принимает два входа и возвращает их свертку. Таким образом, conv(h,x)
и filter(h,1,x)
дадут тот же результат. 1 в фильтре указывает, что рекурсивные коэффициенты фильтра равны [1]
. Но если у вас есть фильтр IIR, вы не можете использовать conv
. filter
также может возвращать состояния фильтра, так что он может использоваться в последующих вызовах без возникновения переходных процессов фильтра.
Смотрите conv и filter документацию для деталей.
Ответ 2
conv(x,b)
выполняет полную свертку. Длина результата length(x)+ length(b)-1
.
filter(b,[1],x)
дает выход той же длины, что и x
. Он не очищает линию задержки фильтра.
Предположим, что x
- это вектор строки. Сделайте x0 = [x zeros(1,length(b)-1)]
; теперь filter(b,[1],x0)
совпадает с conv(x,b)
. Это связано с тем, что дополнительные 0s используются для сброса линии задержки.
Какой из них более разумный? Это зависит от того, что вам нужно!