Привет!
После того, как домножаю исходный сигнал на окно искажаются амплитуды спектральных составляющих после БПФ.
Есть ли возможность скорректировать влияние окна?
Искажение амплитуд спектральных составляющих после применения оконной функции
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Искажение амплитуд спектральных составляющих после применения оконной функции
Написал скрипт для демонстрации:
Без окна амплитуда получается правильная (120 едениц).
С окном - ~2 раза меньше (но вблизи пиков на 512 Гц почти отсутствуют боковые лепестки).
Код: Выделить всё
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('С окном');
С окном - ~2 раза меньше (но вблизи пиков на 512 Гц почти отсутствуют боковые лепестки).
- Вложения
-
- without window.png (2.87 КБ) 4615 просмотров
-
- hamming window.png (2.94 КБ) 4615 просмотров
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Искажение амплитуд спектральных составляющих после применения оконной функции
Это происходит потому что сумма отсчетов окна неравна меньше FFTSIZE. Необходима нормировка
Re: Искажение амплитуд спектральных составляющих после применения оконной функции
Ага! Всё просто оказалось. Сделал такую нормировку и амплитуды получились одинаковые:
Код: Выделить всё
wnd = hamming(length(xx)).';
k = length(xx) / sum(wnd);
...
mag = mag .* k;