Страница 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;