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

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

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
2
Anders 5 Апр 2010 в 14:52

2 ответа

Лучший ответ

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

3
Paul R 5 Апр 2010 в 15:31
Да, ввод "точно" (это mp3-файл, который я начинаю воспроизводить с самого начала и убиваю где-то через несколько секунд, но не должно ли БПФ быть таким же до того момента, когда я его убью?), Это больше или менее тот же код, который я написал (я бы опубликовал его, но у меня сейчас нет доступа к нему): code.compartmental.net/minim/examples/FFT/ForwardFFT/…
 – 
Anders
5 Апр 2010 в 15:47
Вам потребуется каждый раз иметь одинаковое количество выборок, и значение каждой выборки должно быть одинаковым для обоих прогонов. Если вы не начинаете выборку каждый раз с одной и той же выборки, результат БПФ будет другим. Вам также необходимо убедиться, что вы каждый раз обрабатываете полный буфер. Вероятно, вам следует проверить правильность работы вашего БПФ, используя подходящий тестовый вход, например синтезируйте синусоидальную волну и убедитесь, что вы получаете правильный выходной сигнал.
 – 
Paul R
5 Апр 2010 в 21:52

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

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

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

2
strainer 5 Апр 2010 в 21:42