То, что именно является содержанием "zf" в функциональном фильтре MATLAB

Я знаю, что для фильтрации большого количества данных в chuncks можно использовать функцию "фильтр" с соответствующими коэффициентами фильтра, и передать заключительные условия "zf" следующему куску в качестве его начальных условий "zi".

Я смущен. что такое содержание "zf"?

содержит ли последние соответствующие входные данные? (в чистом FIR-фильтре) последние соответствующие выпускные образцы? (в МИР) что он удерживает, когда актуальны как последние входы, так и последние выходы?

Большое спасибо

2 ответа

Если у нас есть большой набор данных или у нас недостаточно памяти, опции zf и zi пригодится.

Например, мы можем разделить наши данные на две части: x и newx и использовать функцию filter, например,

[y,zf] = filter(b,a,x);
newy = filter(b,a,newx,zf);

Для фильтра с a и b, как в,

мы вернемся к length(a) -1 образцам y и length(b) -1 образцов x.

Итак, для продолжения нашего фильтра во второй половине нам понадобятся вызовы max(length(a),length(b)) -1 из первой половины.

Пример 1

y[n] = x[n] + 2 * x[n-1] + 3 * x[n-2];

который,

a = 1;
b = [1 2 3];

пример ввода и вывода:

x = [1 2 3 4 5 6 7 8 9];
y = [1 4 10 16 22 28 34 40 46];
zf = [42 27]';

Реализуя фильтр над newx, для первых двух образцов мы имеем

newy[1] = newx[1] + 2*9 + 3*8 = newx[1] + 42 = newx[1] + zf[1];
newy[2] = newx[2] + 2 * newx[1] + 3*9 = newx[2] + 2 * newx[1] + zf[2];

Пример 2

x = 1 : 9;
b = [1 1 1];
a = [1 2];
[y,zf] = filter(b,a,x);

Это соответствует y[n] = x[n] + x[n-1] + x[n-2] - 2*y[n-1].

Входы и выходы:

x = [1 2 3 4 5 6 7 8 9];
 y = [1 1 4 1 10 -5 28 -35 94];
 zf = [-171 9]';

Теперь для первого значения второй половины:

newy[1] = newx[1] + 9 + 8 - 2 * 94 = newx[1] - 171 = newx[1] + zf(1);
newy[2] = newx[2] + newx[1] + 9 - 2*newy[1] = newx[2] + newx[1] + zf(2) - 2*newy[1];

Итак, я думаю, теперь это довольно очевидно, как работает zf.


Значения в zf содержат внутреннее состояние фильтра IIR. Существуют различные способы реализации этих фильтров на практике, но во всех них есть некоторые элементы задержки, которые передают некоторые значения следующей итерации. См., Например, этот раздел в записи wikipedia о цифровых фильтрах. В "прямой форме 1" есть некоторые элементы задержки для хранения последних нескольких входов и некоторых других элементов задержки для хранения последних нескольких выходов. В "прямой форме 2" элементы задержки содержат некоторые промежуточные результаты. Независимо от точной реализации, эти ячейки памяти должны быть восстановлены, чтобы не вызывать сбоев в выходе при обработке данных в кусках.

При обработке данных в кусках вы должны использовать функцию filter следующим образом:

filter_state = []; % start with empty state
for i = 1:num_chunks
 input_chunk = get_chunk(i);
 [output_chunk, filter_state] = filter(b, a, input_chunk, filter_state);
 save_chunk(i, output_chunk)
end

licensed under cc by-sa 3.0 with attribution.