python преобразование - Анализ аудио с использованием быстрого преобразования Фурье




2 Answers

Массив, который вы показываете, это коэффициенты преобразования Фурье аудиосигнала. Эти коэффициенты могут использоваться для получения частотного содержимого аудио. БПФ определяется для комплекснозначных входных функций, поэтому коэффициенты, которые вы выберете, будут мнимыми числами, даже если ваш ввод - все реальные значения. Чтобы получить количество мощности на каждой частоте, вам нужно рассчитать величину коэффициента FFT для каждой частоты. Это не только реальная составляющая коэффициента, вам нужно вычислить квадратный корень из суммы квадрата его реальной и мнимой составляющих. То есть, если ваш коэффициент равен + b * j, то его величина равна sqrt (a ^ 2 + b ^ 2).

Как только вы вычислили величину каждого коэффициента FFT, вам нужно выяснить, к какой аудиочастоте относится каждый из коэффициентов FFT. N-точечный FFT даст вам частотное содержание вашего сигнала на N равноотстоящих частотах, начиная с 0. Поскольку ваша частота дискретизации составляет 44100 выборок в секунду. и количество точек в вашем БПФ равно 256, ваш частотный интервал составляет 44100/256 = 172 Гц (приблизительно)

Первым коэффициентом в вашем массиве будет коэффициент частоты 0. Это в основном средний уровень мощности для всех частот. Остальные ваши коэффициенты будут отсчитывать от 0 до 172 Гц, пока вы не достигнете 128. В БПФ вы можете измерять частоты до половины ваших выборочных точек. Прочтите эти ссылки по частоте Найквиста и теореме выборки Найквиста-Шеннона, если вы являетесь обжором для наказания и должны знать, почему, но основным результатом является то, что ваши более низкие частоты будут реплицироваться или aliased в высокочастотных ковшиках. Таким образом, частоты будут начинаться с 0, увеличиваясь на 172 Гц для каждого коэффициента до коэффициента N / 2, а затем уменьшаться на 172 Гц до коэффициента N - 1.

Это должно быть достаточно информации, чтобы вы начали. Если вы хотите гораздо более доступное введение в БПФ, чем указано в Википедии, вы можете попробовать Понимание обработки цифровых сигналов: 2-е изд. , Это было очень полезно для меня.

Вот что представляют собой эти цифры. Преобразование в процентах от высоты может быть выполнено путем масштабирования величины каждой частотной составляющей на сумму всех составляющих величин. Хотя это даст вам только представление относительного распределения частот, а не фактическую мощность для каждой частоты. Вы можете попробовать масштабировать максимальную возможную величину для частотной составляющей, но я не уверен, что это проявится очень хорошо. Самый быстрый способ найти работоспособный коэффициент масштабирования - это экспериментировать с громкими и мягкими аудиосигналами, чтобы найти правильную настройку.

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

звука быстрое

Я пытаюсь создать графический анализатор спектра в python.

В настоящее время я читаю 1024 байта 16-битного двухканального аудиопотока с частотой дискретизации 44,100 Гц и усредняет амплитуду двух каналов вместе. Итак, теперь у меня есть массив из 256 подписанных шорт. Теперь я хочу преформировать fft на этом массиве, используя модуль, например numpy, и использовать результат для создания графического анализатора спектра, который для начала будет составлять всего 32 бара.

Я прочитал статьи в Википедии о преобразовании быстрого преобразования Фурье и дискретном преобразовании Фурье, но я все еще не понимаю, что представляет собой результирующий массив. Вот как выглядит массив после того, как я заработал fft на моем массиве с помощью numpy:

   [ -3.37260500e+05 +0.00000000e+00j   7.11787022e+05 +1.70667403e+04j
   4.10040193e+05 +3.28653370e+05j   9.90933073e+04 +1.60555003e+05j
   2.28787050e+05 +3.24141951e+05j   2.09781047e+04 +2.31063376e+05j
  -2.15941453e+05 +1.63773851e+05j  -7.07833051e+04 +1.52467334e+05j
  -1.37440802e+05 +6.28107674e+04j  -7.07536614e+03 +5.55634993e+03j
  -4.31009964e+04 -1.74891657e+05j   1.39384348e+05 +1.95956947e+04j
   1.73613033e+05 +1.16883207e+05j   1.15610357e+05 -2.62619884e+04j
  -2.05469722e+05 +1.71343186e+05j  -1.56779748e+04 +1.51258101e+05j
  -2.08639913e+05 +6.07372799e+04j  -2.90623668e+05 -2.79550838e+05j
  -1.68112214e+05 +4.47877871e+04j  -1.21289916e+03 +1.18397979e+05j
  -1.55779104e+05 +5.06852464e+04j   1.95309737e+05 +1.93876325e+04j
  -2.80400414e+05 +6.90079265e+04j   1.25892113e+04 -1.39293422e+05j
   3.10709174e+04 -1.35248953e+05j   1.31003438e+05 +1.90799303e+05j...

Мне интересно, что именно представляют эти цифры и как я буду преобразовывать эти числа в процент от высоты для каждого из 32 баров. Кроме того, должен ли я усреднять два канала вместе?




у вас есть образец, длина которого равна 256/44100 = 0,00580499 секунд. Это означает, что ваше частотное разрешение составляет 1 / 0,00580499 = 172 Гц. 256 значений, которые вы получаете от Python, соответствуют частотам, в основном, от 86 Гц до 255 * 172 + 86 Гц = 43946 Гц. Выбираемые числа - это комплексные числа (следовательно, «j» в конце каждого второго номера).

EDITED: НЕПРАВИЛЬНАЯ ИНФОРМАЦИЯ

Вам нужно преобразовать комплексные числа в амплитуду, вычисляя sqrt (i 2 + j 2 ), где i и j - действительная и мнимая части, соответственно.

Если вы хотите иметь 32 бара, вы должны, насколько я понимаю, принять среднее значение из четырех последовательных амплитуд, получив 256/4 = 32 бара, как вы хотите.




Related

python audio signal-processing fft spectrum