Проектирование фильтра Matlab: примеры реализации КИХ-фильтра и БИХ-фильтра
Проектирование фильтра Matlab: примеры реализации КИХ-фильтра и БИХ-фильтра

Проектирование фильтра Matlab: примеры реализации КИХ-фильтра и БИХ-фильтра

!! ✨ Версия Matlab — R2022b, совместимая с предыдущими версиями. Выдержки из этой статьи обобщены в: Введение в практику проектирования цифровых фильтров. - MATLAB & Simulink Example - MathWorks Китай.

В этой статье используется Signal в Matlab. Processing Toolboxвdesignfiltфункция,И реализовать следующие два типа в зависимости от частотной характеристикифильтр:

  • КИХ-фильтр: фильтр с конечной импульсной характеристикой, также известный как нерекурсивный фильтр;
  • БИХ-фильтр:бесконечные числа импульсной характеристики(Infinite Impulse Response) фильтр, также известный как рекурсивный фильтр.

1. Конструкция КИХ-фильтра

1.1 Введение в конструкцию фильтра нижних частот

Фактическая конструкция КИХ-фильтра обычно включает следующие три параметра:

  • Transition width:ширина переходной зоны;
  • Peak passband/stopband ripple:Максимальная неравномерность полосы пропускания и полосы задерживания;
  • Filter order:Порядок фильтра(Выбор длины усеченной импульсной характеристики)。

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

При проектировании фильтра неравномерность полосы пропускания/полосы задерживания и ширина полосы перехода являются отклонениями от идеального фильтра нижних частот, как показано на рисунке ниже:

Преимущества FIR-фильтров:

  • Его производительность очень стабильна;
  • Его можно спроектировать как фильтр с линейной фазой.

Однако КИХ-фильтры по-прежнему могут иметь длительные переходные характеристики, что может привести к увеличению вычислительных затрат для решения некоторых задач.

1.2 Конструкция КИХ-фильтра минимального заказа

Разработка КИХ-фильтра минимального заказа в основном включает в себя следующие два этапа:

  • Путем указания частоты полосы пропускания/полосы задерживания, пульсаций в полосе пропускания и затухания в полосе задерживания.,мы можем получить Проектирование КИХ-фильтра минимального заказа。
  • Алгоритм проектирования выберет минимальную длину фильтра, соответствующую установленному КИХ-фильтру.

Код Matlab выглядит следующим образом,проходитьdesignfiltфункциявыполнить,и пройтиfvtoolфункция Проверятьразработанныйнизкий проходFIRфильтр Амплитудный отклик:

Язык кода:javascript
копировать
Fpass = 0.3;  % Частотный коэффициент полосы пропускания
Fstop = 0.43; % Коэффициент частоты стоп-диапазона
Ap = 1;       % пульсация в полосе пропускания
Ast = 30;     % Затухание в полосе задерживания

% Разработка КИХ-фильтра нижних частот с помощью функции designfilt
d = designfilt('lowpassfir', ...    % фильтр нижних частот
    'PassbandFrequency', Fpass, ... % Частота полосы пропускания
    'StopbandFrequency', Fstop, ... % частота полосы задерживания
    'PassbandRipple', Ap, ...       % пульсация в полосе пропускания
    'StopbandAttenuation', Ast);    % Затухание в полосе задерживания

% Амплитудный отклик КИХ-фильтра нижних частот, разработанный с помощью функции fvtool
hfvt = fvtool(d);

Результаты выполнения кода следующие:

!! проходитьfiltordфункция Может Проверятьгенерироватьизфильтрпорядок,Как показано ниже,разработанныйфильтрdпорядокглаздля19:

Уведомление: кроме того,fvtoolфункцияоткроется Фильтрация визуализацииинструмент,проходить Долженинструмент箱我们Может Проверятьразработанныйфильтр Следующие различные результаты анализа:

!! designfiltфункция По умолчанию выбран один Равная рябь(линейная фаза)алгоритм проектированияEquiripple,Можетпроходить Заказinfo(d)Проверятьфильтрполученная информацияфильтралгоритм проектирования。в целом,Фильтр пульсаций линейной фазы позволяет достичь идеальных результатов.,Это связано с заданным порядком для,линейное поведениефильтри идеалфильтр Максимально возможное отклонение。

  • 🚀 Уведомление: в целом,Мы также можем использоватьKaiserоконное усиление Проектирование КИХ-фильтра минимального заказа。ХотяKaiserокнов целомстанет большеиз Порядок фильтра,Но этот алгоритм имеет меньшие вычислительные затраты.,И проблемы конвергенции возникают реже.

В приведенном ниже коде используетсяKaiserДизайн оконного метода такой же, как указано выше.фильтр,И с равной пульсациейфильтр(Equirippleалгоритм)Амплитудный откликсравнивать:

Язык кода:javascript
копировать
% проходитьKaiserреализация окнаFIRфильтр нижних Дизайн по частоте
dk = designfilt('lowpassfir', ...   % фильтр нижних частот
    'PassbandFrequency', Fpass, ... % Частота полосы пропускания
    'StopbandFrequency', Fstop, ... % частота полосы задерживания
    'PassbandRipple', Ap, ...       % пульсация в полосе пропускания
    'StopbandAttenuation', Ast, ... % Затухание в полосе задерживания
    'DesignMethod', 'kaiserwin');   % Проектирование фильтра с использованием метода окна Кайзера

% т.е. добавьте фильтр dk к результату графика
addfilter(hfvt, dk);
% Добавить легенду
legend(hfvt, «Алгоритм проектирования фильтра Equiripple», «Алгоритм проектирования оконного фильтра Кайзера»)

Результат выполнения кода показан на рисунке ниже:

проходитьfiltord(dk)Может Проверять Порядок фильтрадля24:

1.3 Установка параметров частоты фильтра в герцах

Язык кода:javascript
копировать
Fpass = 350; % Частота полосы пропускания
Fstop = 400; % частота полосы задерживания
Ap = 1;      % пульсация в полосе пропускания
Ast = 30;    % Затухание в полосе задерживания
Fs = 2000;   % Частота дискретизации

% Разработка КИХ-фильтра нижних частот с помощью функции designfilt
d = designfilt('lowpassfir', ...    % фильтр нижних частот
    'PassbandFrequency', Fpass, ... % Частота полосы пропускания
    'StopbandFrequency', Fstop, ... % частота полосы задерживания
    'PassbandRipple', Ap, ...       % пульсация в полосе пропускания
    'StopbandAttenuation', Ast, ... % Затухание в полосе задерживания
    'SampleRate', Fs);              % Частота дискретизации

% Амплитудный отклик КИХ-фильтра нижних частот, разработанный с помощью функции fvtool
hfvt = fvtool(d);

Результат выполнения кода показан на рисунке ниже:

1.4. Проектирование КИХ-фильтра с фиксированным порядком и фиксированной полосой пропускания полосы перехода.

В этом разделе используются равные пульсации.фильтралгоритм(Equirippleалгоритм)и метод наименьших квадратов(Least squareалгоритм)Два видафильтралгоритм проектирования,Дизайн имеет фиксированный порядок、фиксированная ширина полосы переходаFIRфильтр。

Код Matlab выглядит следующим образом:

Язык кода:javascript
копировать
N = 30;      % Порядок фильтра
Fpass = 400; % Частота полосы пропускания
Fstop = 450; % частота полосы задерживания
Fs = 2000;   % Частота дискретизации

% Спроектируйте deq КИХ-фильтра, используя алгоритм проектирования фильтра equiripple по умолчанию.
deq = designfilt('lowpassfir', ...  % КИХ-фильтр нижних частот
    'FilterOrder', N, ...           % Порядок фильтра
    'PassbandFrequency', Fpass, ... % Частота полосы пропускания
    'StopbandFrequency', Fstop, ... % частота полосы задерживания
    'SampleRate', Fs);              % Частота выборки

% Спроектируйте deq FIR-фильтра с использованием алгоритма проектирования фильтра ls по методу наименьших квадратов
dls = designfilt('lowpassfir', ...  % КИХ-фильтр нижних частот
    'FilterOrder', N, ...           % Порядок фильтра
    'PassbandFrequency', Fpass, ... % Частота полосы пропускания
    'StopbandFrequency', Fstop, ... % частота полосы задерживания
    'SampleRate', Fs, ...           % Частота выборки
    'DesignMethod', 'ls');          % Алгоритм построения фильтра методом наименьших квадратов

% Фильтрация визуализации
hfvt = fvtool(deq, dls);
legend(hfvt, «Алгоритм проектирования фильтра Equiripple», 'Алгоритм построения фильтра методом наименьших квадратов');

Результат выполнения кода показан на рисунке ниже:

!! ✨ проиллюстрировать:

  • Равная рябьфильтр Идеально подходит для ситуаций, когда соблюдаются определенные допуски.,Например, разработка фиксированной минимальной полосы задерживания、ослабленныйфильтр;Но методдля Хотите минимизировать полосу пропускания/стоп-полосавэнергия ошибкиизвопрос,Результаты обычно далеки от идеальных.
  • Если мы хотим минимизировать энергию сигнала в определенной полосе частот, используйте метод наименьших квадратов для разработки алгоритма.

1.5 Конструкция КИХ-фильтра с фиксированным порядком и фиксированной частотой среза

  • Мы можем использовать метод проектирования окон для проектирования фиксированного Порядок фильтраичастота срезаизфильтр,То есть мы можем использовать разные окна (например,,Hamming、Chebyshevокно и т. д.)контролировать Затухание в полосе задерживания,И оставьте порядок неизменным.

Код Matlab выглядит следующим образом:

Язык кода:javascript
копировать
% Конструкция КИХ-фильтра окна Хэмминга
dhamming = designfilt('lowpassfir', ... % КИХ-фильтр нижних частот
    'FilterOrder', 50, ...              % Порядок фильтра
    'CutoffFrequency', 100, ...         % частота среза
    'SampleRate', 1000, ...             % Частота дискретизации
    'Window', 'hamming');               % Функция окна Хэмминга

% Конструкция КИХ-фильтра окна Чебышева
dchebwin = designfilt('lowpassfir', ... % КИХ-фильтр нижних частот
    'FilterOrder', 50, ...              % Порядок фильтра
    'CutoffFrequency', 100, ...         % частота среза
    'SampleRate', 1000, ...             % Частота дискретизации
    'Window', {'chebwin', 90});         % Оконная функция Чебышева с затуханием боковых лепестков 90

% Фильтрация Визуализации и их сравнение
hfvt = fvtool(dhamming, dchebwin);
legend(hfvt, «Окно Хэмминга», «Окно Чебышева»)

Результат выполнения кода показан на рисунке ниже:

2. Конструкция БИХ-фильтра

2.1 Знакомство с БИХ-фильтрами

  • Недостатки КИХ-фильтров в основном выражаются в: его потребность великаиз Порядок фильтр может соответствовать фактическому дизайну,тем самым увеличивая потребность в вычислениях,В это время для решения проблемы можно использовать БИХ-фильтр.

!! Идеи конструкции БИХ-фильтра: Если пульсация остается постоянной, порядок фильтра обратно пропорционален полосе пропускания фильтра. Благодаря обратной связи можно спроектировать фильтр, соответствующий требованиям, используя фильтр очень малого порядка. Бесконечная импульсная характеристика IIR (Бесконечная Impulse Смысл Response): когда на фильтр подается импульс, выходной сигнал никогда не спадает до нуля.

БИХ-фильтры полезны, когда вычислительные ресурсы ограничены. Однако стабильные причинные БИХ-фильтры не могут обеспечить идеально линейную фазу. Избегайте использования БИХ-схем, где требуется линейность фазы. Другая важная причина использования БИХ-фильтров заключается в том, что БИХ-фильтры имеют меньшую групповую задержку и, следовательно, более короткую переходную характеристику по сравнению с КИХ-фильтрами.

Обычно используемые БИХ-фильтры включают: фильтр Баттерворта, фильтр Чебышева типа I, фильтр Чебышева типа I и эллиптический фильтр. Их основные характеристики, а также сходства и различия приведены в таблице ниже:

БИХ-фильтр

Функции

Фильтр Баттерворта

БИХ-фильтр с максимальной плоскостностью,Но это приводит к увеличению ширины переходной зоны,и нужен большийиз Порядок фильтрауменьшить переходную зонуизширина。

Фильтр Чебышева I типа

проходитьпозволятьпульсация в полосе пропускания,Фильтр Чебышева I Ширина переходной зоны у типа меньше, чем у того же заказа. Фильтр Баттерворта。Butterworth и Chebyshev I добрыйфильтриметь самый плоскийизстоп-полоса。дляданныйиз Порядок фильтра,Потребность в пульсации в полосе пропусканияиширина переходной зоныкомпромисс между。

Фильтр Чебышева II типа

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

Эллиптический фильтр

Чтопроходитьпозволять通带и Пульсация в полосе задерживания для обобщенияButterworthиChebyshevфильтр。С рябьюизуменьшать,Эллиптический фильтр Может быть приближен к любомуButterworthиChebyshevфильтриз Амплитудаи Фазовый отклик。

2.2 Реализация и сравнение производительности БИХ-фильтра

Например 4, используйте Фильтр соответственно. Баттерворта、Chebyshev I Фильтр классов, Чебышев I Фильтр классов и Эллиптический фильтрчетыре вида БИХ-фильтрметод проектирования。и сравнить соответственночетыре видаметодиз Следующие три аспектаизфильтр Параметры производительности:

  • порядок фильтра;
  • отклик фильтра;
  • Сравнение групповых задержек;

(1) Реализация четырех фильтров

Код Matlab выглядит следующим образом:

Язык кода:javascript
копировать
Fp = 100;   % Частота полосы пропускания
Fst = 250;  % частота полосы задерживания
Ap = 1;     % пульсация в полосе пропускания
Ast = 60;   % Затухание в полосе задерживания
Fs = 2e3;   % Частота дискретизации

% Butterworth фильтр
dbutter = designfilt('lowpassiir', ...  % IIRфильтр нижних частот
    'PassbandFrequency', Fp, ...        % Частота полосы пропускания
    'StopbandFrequency', Fst, ...       % частота полосы задерживания
    'PassbandRipple', Ap, ...           % пульсация в полосе пропускания
    'StopbandAttenuation', Ast, ...     % Затухание в полосе задерживания
    'SampleRate', Fs, ...               % Частота дискретизации
    'DesignMethod', 'butter');          % Фильтр Баттерворта

% Фильтр Чебышева I типа
dcheby1 = designfilt('lowpassiir', ...  % IIRфильтр нижних частот
    'PassbandFrequency', Fp, ...        % Частота полосы пропускания
    'StopbandFrequency', Fst, ...       % частота полосы задерживания
    'PassbandRipple', Ap, ...           % пульсация в полосе пропускания
    'StopbandAttenuation', Ast, ...     % Затухание в полосе задерживания
    'SampleRate', Fs, ...               % Частота дискретизации
    'DesignMethod', 'cheby1');          % Фильтр Чебышева I типа

% Фильтр Чебышева II типа
dcheby2 = designfilt('lowpassiir', ...  % IIRфильтр нижних частот
    'PassbandFrequency', Fp, ...        % Частота полосы пропускания
    'StopbandFrequency', Fst, ...       % частота полосы задерживания
    'PassbandRipple', Ap, ...           % пульсация в полосе пропускания
    'StopbandAttenuation', Ast, ...     % Затухание в полосе задерживания
    'SampleRate', Fs, ...               % Частота дискретизации
    'DesignMethod', 'cheby2');          % Фильтр Чебышева II типа

% Эллиптический фильтр
dellip = designfilt('lowpassiir', ...   % IIRфильтр нижних частот
    'PassbandFrequency', Fp, ...        % Частота полосы пропускания
    'StopbandFrequency', Fst, ...       % частота полосы задерживания
    'PassbandRipple', Ap, ...           % пульсация в полосе пропускания
    'StopbandAttenuation', Ast, ...     % Затухание в полосе задерживания
    'SampleRate', Fs, ...               % Частота дискретизации
    'DesignMethod', 'ellip');           % Эллиптический фильтр

(2) Сравнение порядков четырех фильтров.

Код Matlab выглядит следующим образом:

Язык кода:javascript
копировать
% Сравните четыре IIR фильтрпорядок
FilterOrders = [filtord(dbutter) filtord(dcheby1) filtord(dcheby2) filtord(dellip)]

Результат выполнения кода показан на рисунке ниже:

По результатам выполнения кода видно, что для одних и тех же установленных ограничений метод Баттерворта выдает наивысший порядок, а эллиптический метод — минимальный порядок.

(3) Сравнение откликов четырех фильтров.

Код Matlab выглядит следующим образом:

Язык кода:javascript
копировать
% Сравните четыре IIR фильтризответ
hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip);
axis([0 1e3 -80 2]);

Результат выполнения кода показан на рисунке ниже:

(4) Сравнение групповых задержек четырех фильтров.

для IIR При использовании фильтров нам необходимо учитывать не только компромисс между пульсацией и шириной полосы перехода, но и степень фазовых искажений. В общем, это связано с невозможностью иметь линейную фазу на всем интервале Найквиста. Таким образом, вы можете увидеть, насколько далека фазовая характеристика от линейной, взглянув на групповую задержку (в идеале постоянную) и увидев, насколько она ровная.

Код Matlab выглядит следующим образом:

Язык кода:javascript
копировать
% Сравниватьчетыре видафильтризгрупповая задержка
hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip,'Analysis','grpdelay');
legend(hfvt,'Фильтр Баттерворта', 'Chebyshev Type Iфильтр', 'Chebyshev Type IIфильтр','Эллиптический фильтр')

Результат выполнения кода показан на рисунке ниже:

Как видно на картинке выше, Баттерворт и Chebyshev II Проект класса имеет самую плоскую групповую задержку, что вносит наименьшие искажения.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose