Russian Qt Forum
Ноябрь 22, 2024, 22:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DSP Спекта Звукового сигнала  (Прочитано 10918 раз)
horror812
Гость
« : Март 29, 2011, 00:55 »

Всем привет, кто-нибудь
работал со звуком (не обязательно с QT)

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

Встречал Аудисити, там есть то что нужно,
но исходник для меня трудноват.
Есть ли что-нибудь попроще?
Спасибо.
Записан
ilyagoo
Гость
« Ответ #1 : Март 29, 2011, 10:57 »

делаешь спектр и рисуешь. в чем вопрос?
Записан
Denjs
Гость
« Ответ #2 : Март 29, 2011, 11:25 »

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

Тема Фурье преобразования хорошо расписана, есть множество алгоритмов, бытрое-фурье-преобразоание, дискретное фурье преобразование и прочее... Подмигивающий вперед?  Улыбающийся
« Последнее редактирование: Март 29, 2011, 12:08 от Denjs » Записан
Denjs
Гость
« Ответ #3 : Март 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
 Смеющийся
Удачи)
« Последнее редактирование: Март 29, 2011, 14:15 от Denjs » Записан
horror812
Гость
« Ответ #4 : Март 29, 2011, 20:13 »

Цитата: ilyagoo
делаешь спектр и рисуешь. в чем вопрос?
)) хороший ответ.... мог бы ничего не писать....

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

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

Немного разбирался с исходниками, там используются оконные функции Хамминга или Хана.
В общем такую спектрограмму хочу отразить и у себя.
Алгоритм я представляю, берем кусочек, применяем к нему весовую функции и отображаем этот кусочек и тп
Буду рад помощи)

 
 

Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #5 : Март 30, 2011, 18:21 »

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

xokc Привет.
С выводом и получением спектры разобрался.
Хотя я местами сомневаюсь))
Приведу код в нормальный вид.
И что-нибудь еще задам)
А про цвет, пока нормализовал значения и вывожу серым.
А там посмотрим  Смеющийся
ты этим тоже занимаешься\занимался?)
Что посоветуешь полистать из этой темы?
желательно по коду, а не  математику.
может статьи есть или еще что-нибудь  Подмигивающий
Единственную книжку которую я пока нашел  "Обработка звука на РС" Секунов...
Спасибо




Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #7 : Апрель 01, 2011, 18:22 »

ты этим тоже занимаешься\занимался?)
Я занимаюсь больше архитектурой системы и её GUI, спектр для меня считают другие люди.
Что посоветуешь полистать из этой темы?
Ну я просто не понимаю, что именно тебе не понятно. Задай конкретные вопросы - получишь конкретные ответы.




Записан
horror812
Гость
« Ответ #8 : Апрель 02, 2011, 17:35 »

привет,
С этим вроде разобрался.

А почитать, думал посоветуешь, если знаешь
непосредственно про методы реализации,
я математики много нашел,
хотел чего-нибудь по коду, что бы быть уверенным, что делаю правильно   Смеющийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Апрель 05, 2011, 13:09 »

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

Народ, есть замечательная либа по математике GSL
http://www.gnu.org/software/gsl/
там не только Фурье, а многое другое
уже давно пользуюсь и вам рекомендую.

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

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

Сообщений: 976



Просмотр профиля
« Ответ #11 : Сентябрь 12, 2011, 20:09 »

и еще глупый вопрос =)
сканлайн это r1g1b1 r2g2b2 r3g3b3 ... rNgNbN по горизонтали?
где rgb endian-specific.
Зависит от типа QImage. Может еще быть rgba или argb для QImage с альфа-каналом.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 22.