2016-03-05 8 views
1

Я захватил звуковой сигнал входного сигнала с помощью моего микрофона и визуализировал его в OpenCV Мате:OpenCV с помощью преобразования Фурье, чтобы получить частотную спектрограмму

Mat of the input sound

Я прочитал каждые 20 выборок (= каждые 20 пикселей в й -определение «звукового мата») и умножить его на функцию hann-window. Затем я выполняю dft (преобразование с уменьшенным преобразованием) в OpenCV (docs here) этой оконной последовательности. Вот пример mangitude выходе ДПФ такого сигнала в 20-образец:

dft output of a 20-sample-sequence

Но как я могу получить частоту спектрограммы? Является ли описанная попытка правильной? Что я должен делать с этими выходами dft, чтобы получить спектрограмму?

Извините, что не публиковали фотографии; только ссылки. Поскольку я новичок в stackoverflow, я не могу публиковать фотографии напрямую.

ответ

0

Это не работает с таким изображением. Вы должны использовать 1D-вектор (1D Mat в OpenCV не существует), который имеет размер длины вашего аудиосигнала.

Чем вам нужно сделать dft/fft на окном (например, hann-window) в разделе звука. Сделайте это для каждого раздела, чтобы вы получали частоту каждого такого раздела. Выходные данные могут быть объединены в спектрограмму.

0

20 образцов обычно являются слишком короткими, чтобы получить разумный диапазон частот и разрешение (это зависит от частоты дискретизации, например, 44100 Гц).

Когда вы делаете FT и вычисляете величину для некоторого интервала времени, начиная с t, постройте сегмент вертикальной линии по координате X. Y-координата на этом сегменте является частотой - обычно используется логарифмическая шкала. Пиксельная интенсивность представляет собой сумму значений величины в некоторой области вокруг частоты f (вы можете использовать также цветовое кодирование интенсивности).

л-й записи массива величины соответствует частоте

f=2*Pi*F/N 

где Р - дискретизация (образец) частоты (например, 44100 Гц), N - размер преобразования Фурье (например, 1024)

псевдокод
PixelValue[x = a * t, y = b * log2(i)] = c * Sum(l=i/2..i) FTAmplitude[l]

a, b, c - масштабные коэффициенты.

+0

Спасибо за ваш ответ! Я не понимаю, где частоты и его интенсивность находятся в изображении величины. Во-первых, это подход, позволяющий преобразовать аудиосигнал в такое изображение (первое изображение, о котором идет речь), и сделать FT в интересующей области, которая имеет размер Y-образа звукового изображения и количество образцов, которые я хочу, анализировать как X-размер? Для меня изображение величины должно представлять где-то интенсивность каждой частоты в анализируемой аудиопоследовательности. – bingoStack

+0

spectrogram: http://sail.usc.edu/Peter/mystery/mystery.jpg Первое изображение - график аудиосигнала. FT должен выполняться в массиве аудиоданных, а не на изображении. Информация о частотах, добавленных в сообщение. – MBo

 Смежные вопросы

  • Нет связанных вопросов^_^