Частота проигрываемого звука.

Тема в разделе "WASM.BEGINNERS", создана пользователем Beowulf, 13 апр 2007.

  1. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    Как получить сие? Препод сказал что через БПФ не покатит, и он не будет принимать. Есть способ проще. Как это сделать? Ассемблер изучаю второй месяц. Свой моск пока не варит.

    В реале надо еще раскрашивать экран в зависимости от частоты. Просто раскрасить экран я могу. А вот частота - )=

    Заранее спасибо.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Рассмотри график функциий выводимого звука на предмет перехода через 0 в единицу времени. wav - это просто набор выборок с заданным интервалом времени между ними.
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Beowulf
    а при чем тут БПФ? Ты хотел скааить, ФПС?
    думаю, препод хочет получить от тебя спектральный анализ - разложение Фурье..
     
  4. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    Nouzui, БПФ - быстрое преобразование Фурье. Через него по идее можно получить.

    Y_Mur, а по-русски. Как рассмотреть этот график, и почему именно через 0?
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    легче спросит препода, что ему надо )
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Beowulf
    Чета здесь не-то. Если тебе нужно определить какая частота звука то это делается через БПФ, про другии способы не слышил. А если проверить есть ли данная частота, то это проще, через корреляцию.

    Можно придумать еще такой вариант сгладить(высокие частоты пропадут), далее ищем расстояние между максимумами/ минимумами.
     
  7. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    Хорошо, как тогда использовать БПФ? )= Я прочитал уже три статьи и ничерта не понял... )':
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Beowulf
    Нужна частота дискретизации или спектральный график звука? Фурье, естественно, имеет отношение только ко второму. Кстати, каким образом Вы получаете сигнал (из карточки, сами же его задаёте, ...)? Суть задачи мне лично совершенно не ясна.
     
  9. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    файл проигрываю
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Beowulf
    Так я правильно предположил, что требуется получить именно спектральные составляющие сигнала? Почему же тогда Фурье не катит??? Проще реализации преобразований косинуса или синуса DCT/DST, но они "зажёвывают" некоторые частоты.

    А понимать и не обязательно :) Передать в функцию БПФ массив дискретных амплитуд (а WAV-PCM именно это и содержит) и всё. Преобразованный сигнал заносится в другой массив. Что тут не понятно? Или, может, Вы сами решили реализовать БПФ по статьям/книгам - долго будете возиться.
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Quantum
    Да нет тут же очевидно, что препод хочет чтобы студент тупо посчитал количество периодов основной частоты в единицу времени, не обращая внимания на форму сигнала, определяемую спектром :)

    Beowulf
    Когда сигнал переходит через ноль - значит закончился очередной полупериод основной частоты звука, только есть нюанс ноль - не всегда ноль он может быть и смещённым, к примеру 0 equ 127 или 0 equ 32767, но насколько я помню эту инфу можно вытянуть из wav заголовка.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Y_Mur
    Сигнал не обязан проходить через 0. Он может колебаться около определенной амплитуды. А ее из заголовка не вытащить. Поэтому я и предлагаю искать через максимумы.

    Там если сампл имеет размер байт то 0 equ 0, а если слово то 0 equ 32767

    Beowulf
    Берешь сигнал. Вернее часть сигнала к примеру 1024 отсчета(сампла) пропускаешь через БПФ. На входе у нас амплитудная характеристика на выходи частотная. БПФ работает с комплексными числами. Находим амплитуду A=корень(квадрат(Re)+квадрат(Im))
    Ищем максимум, нулевую частоту пропускаем, а то она перекрывает. Где максимум та и частота.
    f=round(maxi*44100/1024); 44100-частота дискретизации
    f - искомое значение.
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Y_Mur
    А откуда эту "основную частоту" брать и что она собой представляет? Ну, допустим, я взял с потолка, что основная частота = 100 Гц. Если я посчитаю кол-во периодов этой частоты в единицу времени, я снова получу 100 Гц, разве не так? Потом Pavia уже обьяснил, что даже "посчитать" кол-во периодов тупым способом не получится. Сигнал пересекает ноль (или псевдо-ноль) в обоих направлениях с частотой в диапазоне 0 - f, где f - частота дискретизации (обычно 44.1 КГц). Фактически, конечно, диапазон будет гораздо уже. Что мы получим, посчитав таким образом "среднюю частоту"?
     
  14. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Из собственного опыта общения с преподами, могу посоветовать, что если хотят тупо, то надо делать тупо.
    Pavia, сигнал в подавляющем большинстве случаев колеблется около нуля (виртуального), если конечно звуковуха была не за 100 рублей. Проще всего брать конечно-разностную производную в точках, где звук меняет "квазизнак" и по количеству производных меньших (или больших) нуля за единицу времени найти частоту.
    ЗЫ если всё таки постоянное смещение есть, можно всю выборку нормализовать.
    Для отстройки от высших гармоник и шумов можно провести сглаживание выборки по трём или более точкам, либо "на лету" оценивать расстояние между производными в ~нулях
     
  15. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Quantum
    Чего-то тебя не в ту степь занесло :)
    Вспомни классическую задачу на разложение в ряд фурье бесконечного прямоугольного или треугольного сигнала - там получается основная гармоника (её частота и есть основная, т.е. та которую высветит обычный цифровой частотомер если ты подашь на него этот сигнал) + ряд кратных частот-гармоник которые определяют форму сигнала но на основную частоту не влияют :). Частота дискретизации через ноль не переходит - это частота с которой происходит измерение амплитуды сигнала, т.е. плотность расположения точек измерения на графике звука и не более того. Думаю тебя ввел в заблуждение тот факт, что в общем случае преобразование фурье позволяет разложить любой сигнал по любому базису, имхо потому препод и не велел Beowulfу в него лезть, чтобы не находили в звуке тех частот которых там нет ;) А подсчёт случаев когда меняется знак выборок, следующих с частотой дискретизации как раз и даст частоту реальной, а не гипотетической основной гармоники сигнала.
    Pavia
    да может, но загляни в реальный звук в любом звуковом редакторе и убедись, что на обычном звуке этот случай бооольшая редкость (обычно он ярко выражен, когда тестируя схему подаёшь прямоугольный сингал на колебательный контур). Конечно иногда можно заметить высокочастотную волну (частоту которой ты и найдёшь через экстремумы), наложенную на низкочастотный сигнал основной гармоники, но при восприятии на слух это вторично, поэтому лучше всё таки мерять частоту основной гармоники (т.е. переходы через ноль).

    Давненько я с этим не игрался, но помнится встречал в доках все возможные комбинации, т.е. в общем случае смещённый и не смещённый ноль может быть как в байте так и в ворде ;)
     
  16. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Y_Mur
    Кажется, теперь дошло. Тем не менее, практический смысл задания не понятен, но преподавателю должно быть виднее.
     
  17. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    Y_Mur
    а как? ]:


    Quantum, наш преподаватель вообще загадочная личность (:
     
  18. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Beowulf
    К примеру, имеем 16-битный моно канал и следующую последовательность выборок в формате PCM little-endian:
    ... 0034 FFF1 0001 0002 FFFF ...
    В десятичной системе это выглядит так:
    ... 52 -15 1 2 -1 ...
    Между 1й (52) и 2й (-15) есть переход через 0? - Есть. Между 2й и 3й? - Тоже есть. Между 3й и 4й уже нет.
     
  19. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    и что это значит? ((:
     
  20. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Допустим, частота дискретизации = 44.1 КГц. Тогда подсчитываем кол-во переходов через 0 на протяжении 44100 выборок - получаем искомую частоту (в Гц).