Перейти к содержанию
    

Вопрос по функции filtfilt в матлабе

Потребовалось реализовать фильтр с нулевой задержкой, проверяю работу функции filtfilt для этого.

clc;clear variables;
N = 2^6;A = 1;fs = 1000;fc = 45;
phi_deg = 120;
sig = create_sin(N,A,fs,fc,phi_deg);
k = 31/32;
num = [1 -1];
denum = [1 -k];
sigf = filter(num,denum,sig);
sigff = filtfilt(num,denum,sig);
plot(sig)
hold on;
plot(sigf)
plot(sigff)
hold off;
legend('input','filter','filtfilt')

Реакция фильтра почему-то зависит от количества отсчётов в сигнале (N).

image.thumb.png.c2bb1bb7cc79dd6674c89e0724b314e3.png

image.thumb.png.629bcd9d79a4728891401b143150d4a3.png

Входной сигнал в обоих случаях один и тот же, изменяю только длительность сигнала. Может я что-то пропустил в скрипте, коллеги?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.04.2023 в 12:27, _sda сказал:

Реакция фильтра почему-то зависит от количества отсчётов в сигнале

Переходной процесс. Он не успел закончиться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.04.2023 в 14:54, Самурай сказал:

Переходной процесс. Он не успел закончиться...

Однако странно, ведь картина меняется даже в первых десяти отсчётах. В обычных фильтрах содержание первых выходных отсчётов не может зависеть от общего количества отсчётов. Это как то связано с инверсией во времени? Если это так, то есть ли вообще какой-нибудь способ отфильтровать конечное количество отсчётов без влияния переходного процесса? Я возлагал надежды на filtfilt, но похоже что он здесь не помощник.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.04.2023 в 17:26, _sda сказал:

В обычных фильтрах содержание первых выходных отсчётов не может зависеть от общего количества отсчётов. Это как то связано с инверсией во времени?

Да.

В 24.04.2023 в 17:26, _sda сказал:

Если это так, то есть ли вообще какой-нибудь способ отфильтровать конечное количество отсчётов без влияния переходного процесса?

Нет.

В 24.04.2023 в 17:26, _sda сказал:

Я возлагал надежды на filtfilt, но похоже что он здесь не помощник

Надежды на что? В чем именно не помощник?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.04.2023 в 19:25, Самурай сказал:

Надежды на что? В чем именно не помощник?

Есть входной сигнал являющийся синусоидой. Частота этой синусоиды может находиться в диапазоне 0...Fmax. Требуется с помощью ФВЧ выделить входной сигнал в полосе Fmax/8...Fmax и подавить сигнал в полосе 0...Fmax/8. В общем то банальная задача, но она усложняется тем что входной сигнал всегда содержит всего 32 отсчёта. Мне показалось что filtfilt поможет избавиться от переходного процесса после фильтрации. Похоже я ошибся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.04.2023 в 22:16, _sda сказал:

Мне показалось что filtfilt поможет избавиться от переходного процесса после фильтрации. Похоже я ошибся.

Да, ошиблись. Переходной процесс от фильтра будет всегда, нет переходного процесса - значит нет фильтра (точнее есть, но с одним коэффициентом:))) ). Очевидно, что в общем случае для произвольного сигнала уменьшить длительность переходного процесса можно только ослабив требования к фильтру, т.е. уменьшив его порядок. Вы не сказали, как сильно надо давить и какая переходная зона, может Вам КИХ 6...10-го порядка за глаза хватит, в том числе и по искажениям:)   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В 25.04.2023 в 00:31, Самурай сказал:

Переходной процесс от фильтра будет всегда, нет переходного процесса значит нет фильтра

А если попробовать связку FFT/IFFT? Сигнал всегда будет присутствовать во всех 32-х отсчётах. Как думаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/25/2023 at 6:43 AM, _sda said:

А если попробовать связку FFT/IFFT?

Чтобы сделать банк фильтров связка FFT/IFFT не нужна. Нужно либо FFT, либо IFFT.

Полосу пропускания такого банка фильтров можно изменять с шагом Fd/N, где N - длина FFT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А банк фильтров сможет работать без переходного процесса? Например такого, в начале оси абсцисс

image.thumb.png.2e6bf5814559c3122277552067a39a5e.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Та вроде получилось. Переходной процесс отсутствует от слова совсем, буду тестировать.

Всем спасибо за дискуссию!

image.thumb.png.2e726479cd87a1496e340489efb482e1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/25/2023 at 10:29 AM, _sda said:

Переходной процесс отсутствует от слова совсем ...

Значит и фильтрация "отсутствует от слова совсем" ... 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Даже если между FFT и IFFT сигнал умножается на функцию, характеризующую нужную АЧХ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/25/2023 at 11:03 AM, _sda said:

Даже если между FFT и IFFT сигнал умножается на функцию, характеризующую нужную АЧХ?

Тогда обязательно должен присутствовать переходной процесс.

Чтобы сигнал на выходе в точности повторял сигнал на входе, спектры обоих сигналов должны в точности совпадать.

Если спектры не совпадают, то сигнал на выходе будет отличаться от входного.

Это отличие и называется "переходным процессом".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, blackfin said:

Тогда обязательно должен присутствовать переходной процесс.

Чтобы сигнал на выходе в точности повторял сигнал на входе, спектры обоих сигналов должны в точности совпадать.

Если спектры не совпадают, то сигнал на выходе будет отличаться от входного.

Это отличие и называется "переходным процессом".

так там же идеальный синус, даже без шума. Он весь попал в нужный частотный бин, оттого и результат такой? Или так не бывает?

ИМХО нужно поставить рядом второй синус или шума добавить, тогда можно будет увидеть результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/25/2023 at 11:14 AM, des00 said:

так там же идеальный синус, даже без шума. Он весь попал в нужный частотный бин, оттого и результат такой? Или так не бывает?

ТС интересует переходной процесс. То есть, входной сигнал не идеальный синус, а идеальный синус умноженный на функцию Хевисайда.

 

Так что спектр такого сигнала отличен от нуля на всей частотной оси: \(S(\omega)=\frac{1}{2}e^{j\varphi_0}\frac{1}{j(\omega-\omega_0)}+\frac{1}{2}e^{-j\varphi_0}\frac{1}{j(\omega+\omega_0)}+\frac{1}{2}e^{j\varphi_0}\pi\delta(\omega-\omega_0)+\frac{1}{2}e^{-j\varphi_0}\pi\delta(\omega+\omega_0)\)..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...