Как представлять стерео аудио данные для БПФ - PullRequest
5 голосов
/ 20 июля 2010

Как стереофонические (2-канальные) аудиоданные должны быть представлены для БПФ?Вы

A.Возьмите среднее значение двух каналов и присвойте его действительному компоненту числа и оставьте мнимый компонент 0.

B.Присвойте один канал реальному компоненту, а другой канал - компоненту imag.

Есть ли причина сделать один или другой?Я искал в Интернете, но не смог найти однозначных ответов по этому вопросу.

Я делаю простой анализ спектра и, не зная ничего лучшего, использовал вариант А).Это дало мне неожиданный результат, тогда как вариант B) прошел как ожидалось.Вот еще несколько деталей:

У меня есть WAV-файл пианино "middle-C".По определению, средняя C составляет 260 Гц, поэтому я ожидаю, что пиковая частота будет на 260 Гц, а меньшие пики на гармониках.Я подтвердил это, просмотрев спектр с помощью программного обеспечения для редактирования аудио (Sound Forge).Но когда я сам взял БПФ с вариантом А), пик был на 520 Гц.При варианте B) пик был при 260 Гц.

Я что-то упустил?Объяснение, которое я придумал до сих пор, заключается в том, что представление стереоданных с использованием компонента real и imag подразумевает, что два канала являются независимыми, что, как я полагаю, не является, и, следовательно, беспорядок.

Ответы [ 4 ]

4 голосов
/ 20 июля 2010

Я не думаю, что вы принимаете среднее значение правильно.: -)

C.Обрабатывайте каждый канал отдельно, назначая амплитуду реальному компоненту и оставляя мнимый компонент равным 0.

2 голосов
/ 26 марта 2012

После того, как вы возьмете БПФ, вам нужно получить величину спектра сложной частоты.Чтобы получить величину, вы берете абсолют комплексного спектра | X (w) |.Если вы хотите посмотреть на спектр мощности, вы возводите в квадрат спектр амплитуды, | X (w) | ^ 2.

Что касается сдвига частоты, я думаю, это связано с тем, что вы устанавливаете мнимые части на ноль.Если представить комплексный частотный спектр в виде серии комплексных векторов или векторов положения в декартовом пространстве.Если вы выберете один дискретный интервал частот X (w), то будет один реальный компонент, представляющий его направление на реальной оси (x-направление), и один мнимый компонент на воображаемой оси (y - направление).Эта дискретная частота имеет четыре важных значения: 1. реальное значение, 2. мнимое значение, 3. величина и 4. фаза.Если вы просто берете реальное значение и устанавливаете мнимое значение 0, вы устанавливаете Magnitude = real и phase = 0deg или 90deg.Следовательно, вы изменили полученный спектр и применили смещение к каждому частотному бину.Взгляните на вики по Величина вектора , также называемая евклидовой нормой вектора, чтобы освежить ваше понимание.Леонблой был прав, но я надеюсь, что это было более информативно.

2 голосов
/ 21 июля 2010

Вариант Б не имеет смысла. Вариант A, который представляет собой преобразование сигнала в моно, подходит (если вы заинтересованы в глобальном спектре). Ваша проблема (двойная частота), безусловно, связана с некоторым недоразумением при использовании ваших процедур FFT.

0 голосов
/ 20 июня 2014

Думайте о БПФ как о способе получения информации из одного сигнала.То, что вы спрашиваете, - это лучший способ отображения данных двух сигналов.Мой ответ заключается в том, чтобы относиться к каждому независимо и отображать FFT для каждого.

Если вам нужен действительно быстрый потоковый FFT, вы можете прочитать об алгоритме, который я написал здесь: www.depthcharged.us/?p=176

...