Страница 1 из 1

Искажение амплитуд спектральных составляющих после применения оконной функции

Добавлено: 20 окт 2016, 15:07
Евгений
Привет!
После того, как домножаю исходный сигнал на окно искажаются амплитуды спектральных составляющих после БПФ.
Есть ли возможность скорректировать влияние окна?

Re: Искажение амплитуд спектральных составляющих после применения оконной функции

Добавлено: 20 окт 2016, 16:33
Бахурин Сергей
Как искажаются?

Re: Искажение амплитуд спектральных составляющих после применения оконной функции

Добавлено: 20 окт 2016, 16:54
Евгений
Написал скрипт для демонстрации:

Код: Выделить всё

FFTSIZE = 1024;

fs = 16384;
fsine = 512;
n = 0:1:FFTSIZE;
A = 120;
phase = 0;

xx = A * cos(n * 2 * pi * fsine / fs + phase); 

mm = fftshift(fft(xx));
mag = abs(mm) ./ FFTSIZE;
mag = mag .* 2;

close all;
figure; stem(mag); title('Без окна');

xx = (hamming(length(xx)).') .* xx;
mm = fftshift(fft(xx));
mag = abs(mm) ./ FFTSIZE;
mag = mag .* 2;

figure; stem(mag); title('С окном');
Без окна амплитуда получается правильная (120 едениц).
С окном - ~2 раза меньше (но вблизи пиков на 512 Гц почти отсутствуют боковые лепестки).

Re: Искажение амплитуд спектральных составляющих после применения оконной функции

Добавлено: 21 окт 2016, 09:13
Бахурин Сергей
Это происходит потому что сумма отсчетов окна неравна меньше FFTSIZE. Необходима нормировка

Re: Искажение амплитуд спектральных составляющих после применения оконной функции

Добавлено: 21 окт 2016, 14:48
Евгений
Ага! Всё просто оказалось. Сделал такую нормировку и амплитуды получились одинаковые:

Код: Выделить всё

wnd = hamming(length(xx)).';
k = length(xx) / sum(wnd);
...
mag = mag .* k;