Чому це погана ідея фільтрувати, обнуляючи нутрощі FFT?


72

Фільтрувати сигнал дуже просто, виконавши на ньому FFT, знявши на нуль частину бункерів, а потім виконавши IFFT. Наприклад:

t = linspace(0, 1, 256, endpoint=False)
x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t)
X = fft(x)
X[64:192] = 0
y = ifft(X)

Компонент високої частоти повністю видаляється цим FFT-фільтром "цегляної стіни".

Але я чув, що це не гарний метод використання.

  • Чому це взагалі погана ідея?
  • Чи є обставини, за яких це нормально чи вдалий вибір?

[ як пропонують пікенети ]

Відповіді:


74

sin(ωt)/ωt

Ці пульсації будуть найбільшими для будь-якого спектрального вмісту, який знаходиться "між бункерами" або не цілим періодичним періодом по ширині діафрагми FFT. Отже, якщо ваші вихідні вхідні дані про FFT - це вікно для будь-яких даних, які дещо неперіодичні у цьому вікні (наприклад, більшість несинхронно відібраних сигналів "реального світу"), то ці конкретні артефакти будуть створюватися нульовими бункерами.

Ще один спосіб подивитися на це, що кожен відрізок FFT представляє певну частоту синусоїди у часовій області. Таким чином, обнулення біна призведе до того ж результату, що і віднімання цієї синусоїди, або, що еквівалентно, додавання синусоїди з точною центральною частотою бін FFT, але з протилежною фазою. Зауважте, що якщо частота деякого вмісту в часовій області не є чисто цілим періодичним періодом у ширині FFT, то спроба скасувати її, додавши зворотну сторону точно цілої періодичної синусоїди, призведе до не тиші, а до щось подібне нота "биття" (синусова хвиля, модульована АМ різної частоти). Знову, напевно, не те, що потрібно.

І навпаки, якщо ваш вихідний сигнал часової області є лише кількома чистими немодульованими синусоїдами, які є точно цілим періодичним періодом у ширині діафрагми FFT, то нульові FFT бункери видалять позначені без артефактів.


3
У цій відповіді є хороші речі, але я вважаю за краще зосередити увагу на ефекті Гіббса.
Джим Клей

4
Спробу отримати відповідь на ефект Гіббса вже запитували тут: dsp.stackexchange.com/questions/1144/…
hotpaw2

@ hotpaw2 Це хороше пояснення. Однак мені потрібне посилання на це, і я знаходжу певні труднощі з його визначенням. Це є причиною того, що ми робимо фільтрацію часової області, а не працюємо в частотній області. (Крім того, часовий домен може бути в режимі реального часу.) Однак, здається, ніхто не починає це з констатації!
Х'ю

Як це може бути пов’язано з віконним методом для проектування фільтрів?
Філіпе Пінто

Порівняйте перетворення вікна Von Hann (et.al.) з трансформацією будь-якого прямокутного вікна. Набагато краща реакція фільтра в цілому, особливо між FFT-бункерами в стоп-смузі. Загалом, різко занулення бункерів гірше, ніж не нульове біля переходів.
hotpaw2

3

Це питання також мене давно бентежить. @ hotpaw2 пояснення добре. Можливо, вам буде цікавий простий експеримент з використанням matlab.

https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html


оновлена ​​інформація.

Щоб перевірити цей факт простий, нам просто потрібно обережно спостерігати за спектром імпульсної реакції ідеального (?) Смугового фільтра, який просто нулює FFT-бункери. Чому потрібно додавати прислівник «обережно»? Якщо ми просто використовувати один і той же розмір FFT , щоб спостерігати реакцію імпульсу, ми будемо обмануті , як показано на рис 1 . Проте, якщо ми додамо порядок ДПФ при спостереженні вихідного фільтра, тобто доповнення нулями імпульсної характеристики, можна знайти так зване явище Гіббса, пульсації в частотної області, як показано на рис 2 .

Результати насправді є результатом віконного ефекту. Якщо ви хочете повністю зрозуміти проблему, зверніться до розділу 7.6 та глави 10.1-10.2 Біблії DSP (1). Підводячи підсумок, тут відзначаються три ключові моменти.

  1. Розмір вікна та порядок DFT (FFT) абсолютно незалежні. Не змішуйте їх разом.
  2. Властивості вікна (тип / розмір) переважають у формі DTFT. (напр., ширша головна доля призводить до ширшої перехідної смуги в частотній характеристиці.)
  3. DFT - це лише вибірка DTFT в частотній області. Більше того, чим вище порядок DFT, тим щільніше спектр DFT.

Отже, за допомогою більш щільного спектру на рис. 2 ми можемо побачити крізь маску ідеального (фальшивого) смугового фільтра.

введіть тут опис зображенняОбманливо частота. Відповідь.

введіть тут опис зображенняЯвище Гіббса в Freq. Відповідь.

(1) Алан В. Оппенхайм та Рональд Ш. Шафер. 2009. Дискретна обробка сигналу часу (3-е видання). Пренсіс Холл Прес, Верхнє сідло, річка Нью-Джерсі, США.

fps = 15;

LPF = 1;
HPF = 2;

n = -511:512;
n0 = 0;
imp = (n==n0);

NyquistF = 1/2*fps;

%% Ideal BPF
tmp_N = 512;
tmp_n = 0:1:tmp_N-1;
freq = ( n .* fps) ./ tmp_N;
F = fft(imp, tmp_N);  
F_bpf = IdealBandpassFilter(F, fps, LPF, HPF);
imp_rep =[real(ifft(F_bpf))'];

% Zero padding.
imp_rep2 =[zeros(1,2048) real(ifft(F_bpf))' zeros(1,2048)];

N = 2^nextpow2(length(imp_rep));
F = fft(imp_rep,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Mis leading Freq Response');


N = 2^nextpow2(length(imp_rep2));
F = fft(imp_rep2,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Zero Padding (DFT) with more points');

%% Function
function filered_signal = IdealBandpassFilter(input_signal, fs, w1, w2)

    N = length(input_signal);
    n = 0:1:N-1;
    freq = ( n .* fs) ./ N;

    filered_signal = zeros(N, 1);

    for i = 1:N
        if freq(i) > w1 & freq(i) < w2
            filered_signal(i) = input_signal(i);
        end

    end
end

Чи можна це перетворити на коментар?
ендоліт

Вибачте, у мене недостатньо репутації. Пояснення в URL-адресі написане також моїм власним. Я просто хочу надати тестовий код, який може уявити поганий вплив пульсацій.
По-вей Хуан

1

FFT дає низьку часову роздільну здатність, тобто не дає інформації, в який час існує конкретна частота. Він дає інформацію про існуючі частотні компоненти за задану тривалість сигналу.

Шляхом обнулення бункерів у FFT дає слабке дозвіл після IFFT у часовій області.


однак є обчислювальні труднощі для дуже довгого сигналу, щоб прийняти Fft, а потім ifft. Щоб уникнути зазору / дзвінки, фільтрація сигналу повинна проходити плавно з діапазону проходу до смуги зупинки.
Ітта Гутхамі

"FFT дає низьку часову роздільну здатність" FFT не дає часової роздільної здатності, це спектральне перетворення домену, і так, як сказано згодом, дає лише інформацію про частотні компоненти сигналу.
EdParadox

Роздільна здатність, надана FFT, - це довжина її вікна. Все, що знаходиться поза вікном FFT, не вирішено як те, що знаходиться у вікні FFT.
hotpaw2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.