Добавление перекрытия для синтеза сигнала

Прошу прощения, если этот вопрос очень простой.

Я преобразовываю аудиосигнал (в настоящее время обычная синусоида) из временной области в частотную область с помощью БПФ, а затем обратно во временную область, чтобы сравнить разницу с исходным сигналом.

В настоящее время я делаю следующее:
— Беру неперекрывающиеся кадры (например, 1024 выборки на кадр).
— БПФ этого кадра
— БПФ информацию о частотной области
— отправляю вывод на динамики

РЕДАКТИРОВАТЬ (1):
Кажется, теперь это работает (см. изображения без окна и с окном, где ввод = коричневый, вывод = синий).
введите описание изображения здесь
введите описание изображения здесь
ЗАВЕРШИТЬ РЕДАКТИРОВАНИЕ (1)

Теперь я хочу выполнить метод перекрытия-добавления:
- взять кадры с 50% перекрытием (образцы 0-1023, 512-1535, 1024-2047...)
- применить окно Ханнинга к кадру ecah< br> - БПФ
- iFFT
- ??? Это мой вопрос!!

Итак, в конце моего iFFT у меня есть выходной кадр из 1024 отсчетов. Означает ли это, что мне нужно отправить первые 512 сэмплов на динамики, а остальные 512 сэмплов (512-1023) оставить в буфере, чтобы добавить к первым 512 семплам следующего кадра? Это так просто или я чего-то не понимаю?

Спасибо!


person Merlevede    schedule 02.03.2014    source источник
comment
Почему вы ожидаете, что на выходе будет копия исходной синусоиды плохого качества (кроме того факта, что вы не просмотрели ее в окне)?   -  person jaket    schedule 02.03.2014
comment
@jaket Я приложил изображение. Вход звучит непрерывно, а выход звучит как короткие импульсы. Насколько я понимаю, выходные данные отличаются из-за спектральной утечки, входная частота точно не соответствует ни одному частотному бину БПФ.   -  person Merlevede    schedule 02.03.2014
comment
У вас ошибка в коде. ОБПФ немодифицированного сложного результата БПФ должен возвращать точные исходные данные (за вычетом небольших проблем с числовым округлением). Итак, где-то вы портите свои данные. Например: отбрасывание информации о фазе сильно исказит ваш результат.   -  person hotpaw2    schedule 02.03.2014
comment
Что касается последнего вопроса: Да, сохранить вторую половину в буфере и добавить к первой половине следующего кадра. Чтобы быть уверенным, убедитесь, что оконные функции для последовательных кадров добавляются к 1 в области перекрытия.   -  person Lutz Lehmann    schedule 02.03.2014
comment
@ hotpaw2 Вы были правы насчет ошибки, как видите, я ее исправил. Не стесняйтесь опубликовать свое предложение в качестве ответа, чтобы я мог хотя бы проголосовать.   -  person Merlevede    schedule 02.03.2014
comment
@LutzL Спасибо! Я попробую.   -  person Merlevede    schedule 02.03.2014


Ответы (1)


Обычно, когда вы выполняете сложение с перекрытием, вы дополняете данные нулями перед БПФ и сохраняете оставшийся хвост, чтобы позже добавить его к результату следующего обрабатываемого кадра.

Ваша первоначальная проблема «плохого качества», вероятно, связана с какой-то ошибкой, из-за которой вы не сохраняете точную информацию о фазе (полный комплексный результат БПФ) между БПФ и ОБПФ. Вам придется исправить это, независимо от того, выполняете ли вы перекрытие-добавление или перекрытие-сохранение быстрой свертки или другой обработки.

person hotpaw2    schedule 02.03.2014
comment
Вы (и еще один пользователь) были правы насчет ошибки. Спасибо! Я не понимаю насчет заполнения нулями, если я возьму 1024 сэмпла, то что там дополнять? - person Merlevede; 02.03.2014