фильтр

Отфильтруйте данные с объектом фильтра

Синтаксис

y = filter(hd,x)
y = filter(hd,x,dim)

Описание

Синтаксисы фильтра фиксированной точки

y = filter(hd,x) фильтрует вектор действительных или комплексных входных данных, x через фиксированную точку фильтрует hd, производя отфильтрованные выходные данные y. Векторы x и y имеют ту же длину. фильтр хранит итоговые условия для фильтра в свойстве States hdhd.states.

Когда вы устанавливаете свойство PersistentMemory на false (настройка по умолчанию), начальные условия для фильтра обнуляются, прежде чем фильтрация запускается. Чтобы использовать ненулевые начальные условия для hd, установите PersistentMemory на true. Затем установите hd.states на вектор nstates элементы (hd), один элемент для каждого состояния устанавливать. Если вы задаете скаляр для hd.states, filter расширяет скаляр до вектора соответствующей длины для состояний. Все элементы расширенного вектора имеют значение скаляра.

Если x является матрицей, фильтрами y = filter(hd,x) вдоль каждого столбца x, чтобы произвести матричный y независимых каналов. Если x является многомерным массивом, y = filter(hd,x) фильтрует x по первому неодноэлементному измерению x.

Чтобы использовать ненулевые начальные условия, когда вы фильтруете матричный x, устанавливает состояния фильтра на матрицу начальных значений условия. Установите начальные условия путем установки свойства States для фильтра (hd.states) к матрице строк nstates(hd) и size столбцы (x,2).

y = filter(hd,x,dim) применяет фильтр hd к входным данным, расположенным по определенному измерению x, заданного dim.

Когда вы фильтруете многоканальные данные, dim позволяет вам задать, какая размерность входной матрицы отфильтровать вперед — представляет ли строка канал или столбец, представляет канал. Когда вы обеспечиваете входной параметр dim, фильтр действует по измерению, заданному dim. Когда ваши входные данные, x является вектором или матрицей и dim, равняются 1, каждый столбец x обработан как входной канал того. Когда dim равняется 2, фильтр обрабатывает каждую строку входа x как канал.

Чтобы отфильтровать многоканальные данные в среде цикла, необходимо использовать входной параметр dim, чтобы установить соответствующую размерность обработки.

Вы задаете начальные условия для каждого канала индивидуально, при необходимости, установкой hm.states к матрице nstates строки (hd) (одна строка, содержащая состояния для одного канала входных данных) и столбцы size(x,2) (один столбец, содержащий состояния фильтра для каждого канала).

Примеры

свернуть все

Отфильтруйте сигнал с помощью фильтра с различными начальными условиями (IC) или никакими начальными условиями.

x = randn(100,1);    % Original signal.
b = fir1(50,.4);     % 50th-order linear-phase FIR filter.
hd = dfilt.dffir(b);    % Direct-form FIR implementation.

Не устанавливайте определенные начальные условия.

y1 = filter(hd,x);   % 'PersistentMemory'='false'(default).
zf = hd.states;      % Final conditions.

Теперь используйте ненулевые начальные условия установкой ICs, прежде чем вы отфильтруете.

hd.persistentmemory = true;
hd.states = 1;      % Uses scalar expansion.
y2 = filter(hd,x);
stem([y1 y2])       % Different sequences at beginning.
legend('y1','y2');

Рассмотрение диаграммы стебель-листья показывает, что последовательности отличаются в начале процесса фильтра.

Вот один способ использовать фильтр с потоковой передачей данных.

reset(hd);           % Clear filter history.
y3 = filter(hd,x);   % Filter entire signal in one block.

Как эксперимент, повторите процесс, фильтруя данные как разделы, а не в потоковой передаче формы.

reset(hd);              % Clear filter history.
yloop = zeros(20,5);    % Preallocate output array.
xblock = reshape(x,[20 5]);
for i=1:5
   yloop(:,i) = filter(hd,xblock(:,i));
end

Используйте диаграмму стебель-листья, чтобы видеть сравнение между фильтрацией блока блоком и потоковой передачей.

stem([y3 yloop(:)]);
legend('y3','yloop')

Фильтрация раздела разделом сигнала эквивалентна фильтрации целого сигнала целиком.

Алгоритмы

свернуть все

Квантованные фильтры

Реализации команды filter зафиксировали - или арифметика с плавающей точкой на квантованной структуре фильтра, которую вы задаете.

Алгоритм, примененный filter, когда вы используете объект фильтра дискретного времени на входном сигнале, зависит от ответа, который вы выбрали для фильтра, такого как lowpass или Найквист или bandstop. Чтобы узнать больше о каждом алгоритме фильтра, обратитесь к литературной ссылке, обеспеченной на соответствующей странице с описанием фильтра дискретного времени.

Примечание

dfilt/filter не нормирует коэффициенты фильтра автоматически. Функциональный filter, предоставленный MATLAB, действительно нормирует коэффициенты.

Адаптивные фильтры

Алгоритм, используемый filter, когда вы применяете адаптивный объект фильтра к сигналу, зависит от алгоритма, который вы выбрали для своего адаптивного фильтра. Чтобы узнать больше о каждом адаптивном алгоритме фильтра, обратитесь к литературной ссылке, обеспеченной на соответствующей адаптивной странице с описанием объекта фильтра.

Ссылки

[1] Оппенхейм, A.V., и Р.В. Шафер, обработка сигналов дискретного времени, Prentice Hall, 1989.

Смотрите также

Функции

Введенный в R2011a