Russian Qt Forum
Марта 11, 2025, 08:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: DSP Спекта Звукового сигнала  (Прочитано 11115 раз)
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.034 секунд. Запросов: 22.