Разница в амплитуде от одного и того же источника с использованием БПФ

У меня вопрос по использованию БПФ. Используя функцию getBand(int i) с Minim, я могу извлечь амплитуду определенной частоты и сделать красивые карты этого. Работает отлично.

Впрочем, это скорее вопрос любопытства. Когда я смотрю на значения, извлеченные из воспроизведения одной и той же песни два раза с использованием одной и той же частоты (поэтому амплитуда должна быть одинаковой), но я получаю очень разные значения - почему это так?

0.0,0.0,0.0,0.0,0.0,0.08706585,0.23708777,0.83046436,0.74603105,0.30447206
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.08706585,0.4790409,0.9608221,0.83046436,0.74603105

person Anders    schedule 05.04.2010    source источник


Ответы (2)


Вы уверены, что входные данные в обоих случаях одинаковы? Если вы просто берете случайный фрагмент песни, то результат БПФ будет сильно отличаться для разных начальных точек песни.

person Paul R    schedule 05.04.2010
comment
Да ввод точно (это мп3 файл - который я начинаю проигрывать с самого начала и убиваю где-то через несколько секунд, но разве БПФ до того момента, когда я его убиваю, не должен быть таким же тогда?), это более-менее тот же код, который я написал (я бы опубликовал его, но сейчас у меня нет к нему доступа): code.compartmental.net/minim/examples/FFT/ForwardFFT/ - person Anders; 05.04.2010
comment
Вам потребуется каждый раз иметь одинаковое количество выборок, и значение каждой выборки должно быть одинаковым для обоих прогонов. Если вы не начнете выборку каждый раз с одной и той же выборки, результат БПФ будет другим. Вам также необходимо убедиться, что вы каждый раз обрабатываете полный буфер. Вероятно, вам следует проверить, правильно ли работает ваше БПФ, используя подходящий тестовый ввод, например. синтезируйте синусоиду и убедитесь, что вы получаете правильный результат. - person Paul R; 05.04.2010

Декодирование mp3 может быть ненадежным, и/или начальная буферизация подпрограммы fft может быть ненадежной (разная продолжительность тишины перед серией). В этом случае похоже, что ввод примерно на 2 шага больше во 2-м выходе.

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

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

person strainer    schedule 05.04.2010