_sda 0 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба Потребовалось реализовать фильтр с нулевой задержкой, проверяю работу функции 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). Входной сигнал в обоих случаях один и тот же, изменяю только длительность сигнала. Может я что-то пропустил в скрипте, коллеги? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба В 24.04.2023 в 12:27, _sda сказал: Реакция фильтра почему-то зависит от количества отсчётов в сигнале Переходной процесс. Он не успел закончиться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба В 24.04.2023 в 14:54, Самурай сказал: Переходной процесс. Он не успел закончиться... Однако странно, ведь картина меняется даже в первых десяти отсчётах. В обычных фильтрах содержание первых выходных отсчётов не может зависеть от общего количества отсчётов. Это как то связано с инверсией во времени? Если это так, то есть ли вообще какой-нибудь способ отфильтровать конечное количество отсчётов без влияния переходного процесса? Я возлагал надежды на filtfilt, но похоже что он здесь не помощник. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба В 24.04.2023 в 17:26, _sda сказал: В обычных фильтрах содержание первых выходных отсчётов не может зависеть от общего количества отсчётов. Это как то связано с инверсией во времени? Да. В 24.04.2023 в 17:26, _sda сказал: Если это так, то есть ли вообще какой-нибудь способ отфильтровать конечное количество отсчётов без влияния переходного процесса? Нет. В 24.04.2023 в 17:26, _sda сказал: Я возлагал надежды на filtfilt, но похоже что он здесь не помощник Надежды на что? В чем именно не помощник? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба В 24.04.2023 в 19:25, Самурай сказал: Надежды на что? В чем именно не помощник? Есть входной сигнал являющийся синусоидой. Частота этой синусоиды может находиться в диапазоне 0...Fmax. Требуется с помощью ФВЧ выделить входной сигнал в полосе Fmax/8...Fmax и подавить сигнал в полосе 0...Fmax/8. В общем то банальная задача, но она усложняется тем что входной сигнал всегда содержит всего 32 отсчёта. Мне показалось что filtfilt поможет избавиться от переходного процесса после фильтрации. Похоже я ошибся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба В 24.04.2023 в 22:16, _sda сказал: Мне показалось что filtfilt поможет избавиться от переходного процесса после фильтрации. Похоже я ошибся. Да, ошиблись. Переходной процесс от фильтра будет всегда, нет переходного процесса - значит нет фильтра (точнее есть, но с одним коэффициентом:))) ). Очевидно, что в общем случае для произвольного сигнала уменьшить длительность переходного процесса можно только ослабив требования к фильтру, т.е. уменьшив его порядок. Вы не сказали, как сильно надо давить и какая переходная зона, может Вам КИХ 6...10-го порядка за глаза хватит, в том числе и по искажениям:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба КИХ не годится, нужно плавно менять частоту среза фильтра. В скрипте выше описан БИХ который я хотел применить. Его параметры по переходной области и внеполосному подавлению вполне устраивают. В 25.04.2023 в 00:31, Самурай сказал: Переходной процесс от фильтра будет всегда, нет переходного процесса значит нет фильтра А если попробовать связку FFT/IFFT? Сигнал всегда будет присутствовать во всех 32-х отсчётах. Как думаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба On 4/25/2023 at 6:43 AM, _sda said: А если попробовать связку FFT/IFFT? Чтобы сделать банк фильтров связка FFT/IFFT не нужна. Нужно либо FFT, либо IFFT. Полосу пропускания такого банка фильтров можно изменять с шагом Fd/N, где N - длина FFT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба А банк фильтров сможет работать без переходного процесса? Например такого, в начале оси абсцисс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба Та вроде получилось. Переходной процесс отсутствует от слова совсем, буду тестировать. Всем спасибо за дискуссию! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба On 4/25/2023 at 10:29 AM, _sda said: Переходной процесс отсутствует от слова совсем ... Значит и фильтрация "отсутствует от слова совсем" ... 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба Даже если между FFT и IFFT сигнал умножается на функцию, характеризующую нужную АЧХ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба On 4/25/2023 at 11:03 AM, _sda said: Даже если между FFT и IFFT сигнал умножается на функцию, характеризующую нужную АЧХ? Тогда обязательно должен присутствовать переходной процесс. Чтобы сигнал на выходе в точности повторял сигнал на входе, спектры обоих сигналов должны в точности совпадать. Если спектры не совпадают, то сигнал на выходе будет отличаться от входного. Это отличие и называется "переходным процессом". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба 5 minutes ago, blackfin said: Тогда обязательно должен присутствовать переходной процесс. Чтобы сигнал на выходе в точности повторял сигнал на входе, спектры обоих сигналов должны в точности совпадать. Если спектры не совпадают, то сигнал на выходе будет отличаться от входного. Это отличие и называется "переходным процессом". так там же идеальный синус, даже без шума. Он весь попал в нужный частотный бин, оттого и результат такой? Или так не бывает? ИМХО нужно поставить рядом второй синус или шума добавить, тогда можно будет увидеть результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 25 апреля, 2023 Опубликовано 25 апреля, 2023 · Жалоба 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)\).. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться