![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| david08 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 9.2.2014 Репутация: нет Всего: нет |
Доброго времени суток!
Подскажите пожалуйста, как снимать данные с потока микрофона для последующей обработки? Винда или Линукс не важно, интересует дальнейшее разложение сигнала в спектр и построение чего-то типа спектр от времени. Примерно представляю, что нужно пользоваться быстрым преобразованием Фурье, но если можете помочь разобраться как это реализуется, был бы очень признателен. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Спектр от времени получают при помощи оконного перобразования Фурье. Дело в том, что если для анализа сигнала просто вырезать фрагмент сигнала, то сама врезка превращает сигнал из непрерывного в импульсный, а как известно, импульс имеет широкий спектр не смотря на то, что он может иметь заполнение одной частоты. С точки зрения преобразования Фурье там добавляется только один множитель. А так в результате БПФ получается массив комплексных чисел F=X(f)+i*Y(f) . Соответственно амплитудой гармоники будет sqrt(x*x+y*y), впрочем формул и примеров алгоритмов завались (даже в той же википедии есть тыц). Задал массив амплитуд сингала получил спектр. Что касается записи звука с микрофона, то тема достаточно избитая. Например тыц -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Скачиваешь fftw, вызываешь fftw_execute, из полученного массива считаешь спектр мощности ( powSpectr[ i ] = complexSpectr[ i ][ 0 ] * complexSpectr[ i ][ 0 ] + complexSpectr[ i ][ 1 ] * complexSpectr[ i ][ 1 ] ), затем рассчитываешь логарифмический спектр ( logSpectr[ i ] = 10 * log10( powSpectr[ i ] ) ), затем повторяешь всё то же самое для следующей по времени выборки сигнала.
Затем рисуешь такой график: по оси X у тебя индекс массива logSpectr, по оси Y - время ( или просто номер выборки ), а цвет каждой точки берётся из таблицы цветов по индексу, равному logSpectr[ i ], т.е. как-то так: color = colorTable[ logSpectr[ i ] ]; -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Должен получиться вот такой "водопад" (нижняя половина рисунка)
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |