Russian Qt Forum

Qt => Мультимедиа => Тема начата: horror812 от Март 29, 2011, 00:55



Название: DSP Спекта Звукового сигнала
Отправлено: horror812 от Март 29, 2011, 00:55
Всем привет, кто-нибудь
работал со звуком (не обязательно с QT)

Нужно отрисовать спектральную форму сигнала.
С теорией немного разобрался,
буду рад помощи.

Встречал Аудисити, там есть то что нужно,
но исходник для меня трудноват.
Есть ли что-нибудь попроще?
Спасибо.


Название: Re: DSP Спекта Звукового сигнала
Отправлено: ilyagoo от Март 29, 2011, 10:57
делаешь спектр и рисуешь. в чем вопрос?


Название: Re: DSP Спекта Звукового сигнала
Отправлено: Denjs от Март 29, 2011, 11:25
Самый простой источник? вы можете получить значения вашего сигнала в каждый момент времени?
Преобразование Фурье помните? вот берите снимок вашего сигнала за период, делайте преобразование фурье, и полученные коэффициенты членов ряда - это и есть "спектр". Потом его надо обработать, растянуть, масштабировать и т.п. )))

Тема Фурье преобразования хорошо расписана, есть множество алгоритмов, бытрое-фурье-преобразоание, дискретное фурье преобразование и прочее... ;) вперед?  :)


Название: Re: DSP Спекта Звукового сигнала
Отправлено: Denjs от Март 29, 2011, 14:05
Внимание! (барабанная дробь)

QtAssistant: Home >> Examples >> Spectrum Analyzer
(Qt 4.7.2) Но найти пример почему-то получается только через поиск по индексам. И более того - пример судя по скриншоту для мобильного девайса. Но думаю суть и ключевые классы и на десктопе будут прекрасно работать.. иначе Qt станет уж и не совсем Qt-шным))))

Цитировать
The Spectrum Analyzer demo shows how the QtMultimedia Module can be used in Qt applications to capture and then play back an audio stream.
...
Spectrum analysis is performed by calculating the Fast Fourier Transform (FFT) of a segment of audio data. An open-source library, FFTReal, against which the application is dynamically linked, is used to compute the transform.
Ссылка на FFTReal вот: http://ldesoras.free.fr/prod.html
 ;D
Удачи)


Название: Re: DSP Спекта Звукового сигнала
Отправлено: horror812 от Март 29, 2011, 20:13
Цитата: ilyagoo
делаешь спектр и рисуешь. в чем вопрос?
)) хороший ответ.... мог бы ничего не писать....

Цитата: Denjs
Самый простой источник? вы можете получить значения вашего сигнала в каждый момент времени?
Преобразование Фурье помните? вот берите снимок вашего сигнала за период, делайте преобразование фурье, и полученные коэффициенты членов ряда - это и есть "спектр". Потом его надо обработать, растянуть, масштабировать и т.п. )))
Да, разобрался с чтением wav файла, и  основными понятиями (типа частоты дискретизации и тп)
и дискретным преобразование Фурье

Цитата: Denjs
QtAssistant: Home >> Examples >> Spectrum Analyzer
(Qt 4.7.2) Но найти пример почему-то получается только через поиск по индексам. И более того - пример судя по скриншоту для мобильного девайса. Но думаю суть и ключевые классы и на десктопе будут прекрасно работать.. иначе Qt станет уж и не совсем Qt-шным))))
Угу, у меня тоже  из демонстрации не запускался (
Я посмотрел код. Там для fft используется библиотека fftw3, я пока использую простой пример из вики, для преобразование фуре хватит.
С волновой и амплитудной формой я разобрался.
Теперь хочу вот такой как в Аудисити
(http://savepic.net/894318.jpg)
Немного разбирался с исходниками, там используются оконные функции Хамминга или Хана.
В общем такую спектрограмму хочу отразить и у себя.
Алгоритм я представляю, берем кусочек, применяем к нему весовую функции и отображаем этот кусочек и тп
Буду рад помощи)

 
 



Название: Re: DSP Спекта Звукового сигнала
Отправлено: xokc от Март 30, 2011, 18:21
Алгоритм я представляю, берем кусочек, применяем к нему весовую функции и отображаем этот кусочек и тп
Буду рад помощи)
Ну так вроде разобрался же уже - какой еще помощи надо? Делаешь изображение размером Nx1 пиксель (N - размерность области значений весовой функции), рисуешь в нём с помощью QLinearGradient нужную тебе палитру, получаешь указатель на 1-й пиксель (quint32 *ptr = (quint32 *)imgPalette.scanLine(0)), вычисляешь весовую функцию
Код
C++ (Qt)
y = weight(x[i])
для каждого из элементов спектра, заменяешь её значение на ptr[y] и выводишь в соответствующий пиксель результирующего QImage.


Название: Re: DSP Спекта Звукового сигнала
Отправлено: horror812 от Март 30, 2011, 22:59
xokc Привет.
С выводом и получением спектры разобрался.
Хотя я местами сомневаюсь))
Приведу код в нормальный вид.
И что-нибудь еще задам)
А про цвет, пока нормализовал значения и вывожу серым.
А там посмотрим  ;D
ты этим тоже занимаешься\занимался?)
Что посоветуешь полистать из этой темы?
желательно по коду, а не  математику.
может статьи есть или еще что-нибудь  ;)
Единственную книжку которую я пока нашел  "Обработка звука на РС" Секунов...
Спасибо






Название: Re: DSP Спекта Звукового сигнала
Отправлено: xokc от Апрель 01, 2011, 18:22
ты этим тоже занимаешься\занимался?)
Я занимаюсь больше архитектурой системы и её GUI, спектр для меня считают другие люди.
Что посоветуешь полистать из этой темы?
Ну я просто не понимаю, что именно тебе не понятно. Задай конкретные вопросы - получишь конкретные ответы.






Название: Re: DSP Спекта Звукового сигнала
Отправлено: horror812 от Апрель 02, 2011, 17:35
привет,
С этим вроде разобрался.

А почитать, думал посоветуешь, если знаешь
непосредственно про методы реализации,
я математики много нашел,
хотел чего-нибудь по коду, что бы быть уверенным, что делаю правильно   ;D


Название: Re: DSP Спекта Звукового сигнала
Отправлено: Admin от Апрель 05, 2011, 13:09
Народ, есть замечательная либа по математике GSL
http://www.gnu.org/software/gsl/
там не только Фурье, а многое другое
уже давно пользуюсь и вам рекомендую.


Название: Re: DSP Спекта Звукового сигнала
Отправлено: once_again_abc от Сентябрь 04, 2011, 03:19
Народ, есть замечательная либа по математике GSL
http://www.gnu.org/software/gsl/
там не только Фурье, а многое другое
уже давно пользуюсь и вам рекомендую.

спасибо за ссылку!

и еще глупый вопрос =)
сканлайн это r1g1b1 r2g2b2 r3g3b3 ... rNgNbN по горизонтали?
где rgb endian-specific.


Название: Re: DSP Спекта Звукового сигнала
Отправлено: xokc от Сентябрь 12, 2011, 20:09
и еще глупый вопрос =)
сканлайн это r1g1b1 r2g2b2 r3g3b3 ... rNgNbN по горизонтали?
где rgb endian-specific.
Зависит от типа QImage. Может еще быть rgba или argb для QImage с альфа-каналом.