Почему мой график KISS FFT показывает повторяющиеся пики, отраженные на оси Y?

Я новичок в концепциях БПФ, и поэтому я понимаю, что если я введу 1024 сигнала, я получу 513 бинов в диапазоне от 0 Гц до 22050 Гц (в случае частоты дискретизации 44100 Гц). Используя KISS FFT в Cinder, функция getBinSize возвращает ожидаемые 513 значений для ввода 1024 сигналов. Чего я не понимаю, так это почему появляются повторяющиеся пики. Запустив тестовый образец звука, который проходит через частоты (по порядку) от 20 Гц до 22000 Гц, я все время вижу два пика. Это выглядит примерно так:

_____|______< /em>__|_____

Во время воспроизведения звука кажется, что пики движутся навстречу друг другу, поэтому второй пик действительно кажется зеркальной копией первого. Каждый пример, через который я прошел, кажется, просто идет вперед и отображает все 513 значений, и у них, похоже, нет этой проблемы с зеркалированием. Я не уверен, что мне не хватает.


person geranyl    schedule 16.01.2012    source источник
comment
Попробуйте сигнал чередующихся единиц и отрицательных единиц с нулями между ними. (т.е. 1,0,-1,0, 1,0,-1,0,...) Для реального БПФ длиной 1024 это должно дать вам один пик на выходе [255] (256-й частотный бин)   -  person Mark Borgerding    schedule 17.01.2012
comment
Спасибо, Марк. Я сделал это, и это дало мне один пик на частоте 256, но я не уверен, что это значит. Не могли бы вы помочь мне понять, почему в звуковой дорожке с входными блоками 1024 сигналы кажутся зеркальными, а этот сконструированный сигнал - нет?   -  person geranyl    schedule 18.01.2012


Ответы (2)


Хорошо, прочитав это, я нашел решение. Причина зеркального отображения в том, что я использую БПФ для действительных чисел (настоящее БПФ). Обычное БПФ, как всем известно, работает с комплексными числами. Следовательно, мнимая часть устанавливается равной 0 в реальном БПФ, что приводит к зеркальному отображению вокруг середины (или, технически говоря, зеркальное отображение составляет около 0 и N/2).

Вот подробное обсуждение: http://www.edaboard.com/thread144315.html ( страница больше недоступна, но есть копия на archive.org)

И прочтите стр. 238–242 этой книги (глава 12). Это фантастика, так что покупайте. Я думаю, что на сайте автора есть бесплатная версия в формате pdf: http://www.dspguide.com/

person goocreations    schedule 24.05.2012

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

Вершины будут двигаться навстречу друг другу, когда зеркально отражают друг друга относительно центра.

Другая возможность состоит в том, что ваше БПФ каким-то образом имело только длину 512.

person hotpaw2    schedule 17.01.2012
comment
Я проверил как длину ввода, так и вывод. Я ввожу 1024 и получаю 513 обратно. График 513 значений показывает мне зеркальное изображение, поэтому я не понимаю, что происходит. - person geranyl; 17.01.2012