анализ АЧХ звукового файла, или как это делается в демо.

Тема в разделе "WASM.A&O", создана пользователем Booster, 23 окт 2006.

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Похоже, что так оно и есть.

    Ты имееш ввиду, что в PCM(.vaw), среднее значение принимается за нулевую амплитуду, а FFT 0=0, поэтому и нужен такой сдвиг? Как то не задумывался на этим.
     
  2. Santaev

    Santaev New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2006
    Сообщения:
    29
    Не совсем так. Просто данные в wav - файле представлены как целые без знака.
    Для 8-бит это означает, что "0" в wav соответствует минимальному значению сигнала -127, а 255 - максимальному (+127). А FFT честно все считает и получает постоянную составляющую (нулевую амплитуду).
    За преобразованием данных (из wav- файла в Real ) надо следить, так как в лучшем случае ты получишь не 0 значение нулевого коэффициента (это не страшно)- а в худшем - значительное искажение спектра. Советую просто выведи на экран в графическом виде кусок wav - сразу видно будет.
     
  3. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Santaev
    Это зависит от формата, который указан в заголовке, который, в свою очередь, может находиться в любом месте файла. Формат может быть знаковым или беззнаковым, целочисленным или в формате float, 8/16/24 бит, PCM/ADPCM и т.д. В общем, лучше не полагаться на то, что формат всегда будет 16 бит стерео unsigned PCM
     
  4. Santaev

    Santaev New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2006
    Сообщения:
    29
    Quantum
    Очень правильное замечание!
    Booster
    Надеюсь ты в FFT не стерео запихиваешь?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Santaev
    Код (Text):
    1. Для 8-бит это означает, что "0" в wav соответствует минимальному значению сигнала -127
    Значит я правильно понял, просто не совсем ясно выразился.

    Нет один из каналов пропускаю.

    Теперь думаю как это всё запрограммировать. Если с логарифмированием по амплитуде проблем никаких, то по частотам довольно запарно. Ведь придётся делать несколько вычислений с разными N, для того чтобы получать разные диапазоны частот. К тому же будет получатся разная реакция, одни частоты будут реагировать сильнее других, возможно нужно будет логарифмически усреднять значения с предиущими вычислениями. Вобщем алгоритм ещё тот. Может лучшее решение - это использовать одно вычисление с большим N, а затем вычислять среднее по логарифмическим диапазонам. Или кто ещё подскажет?
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Не помню в каком форуме вычитал красивую (вызвавшую жаркий спор, окончившийся убедительной победой автора-исполнителя :) идею частотного фильтра на основе "плавающего усреднения":
    Суть фильтра в том, что каждое значение выборки усредняется с N-ным количеством соседних значений и заносится в новый буфер, в результате все частоты, период которых меньше периода усреднения, зарезаются - получается фильтр верхних частот. Если взять разницу результата с исходным сигналом - получается фильтр нижних частот. Если сначала резать сверху, затем снизу - получается полосовой фильтр любой заданой ширины :)
    ***
    ** **
    ** **
    * *
    * *
    Звёздочки - выборки, подчёркивание - диапазон усреднения.
    ЗЫ: Простейшая арифметика, и никакой борьбы с причудами Фурье алгоритма ;)
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Y_Mur
    Вроде верно. Вопрос насколько практично? Какова скорость?
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Автор алгоритма писал, что делал на этом вполне приличный RealTime эквалайзер, т.е. правил звук "на лету"
     
  9. Santaev

    Santaev New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2006
    Сообщения:
    29
    Такой алгоритм иногда применяют в микросхемах сигма-дельта АЦП. Нормально работает если частота дискретизации раз в 10 больше максимальной частоты целевого сигнала. То есть для звука надо 200 кГц частоту дискретизации (минимум). Ну и насчет
    - с крутизной АЧХ таких фильтров совсем плохо...
     
  10. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    Так по ходу один шаг до КИХ/БИХ фильтра остался. Хороший вариант, если не надо очень большой крутизны скатов фильтра т.к. при увеличении крутизны растет к-во весовых коэфициентов и в таком случае наверно быстрее использовать Фурье.
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Сдаётся мне что это можно интерполяцией вылечить и если хорошо помедитировать, то не столь уж большие накладные расходы потребуются.

    И ещё сдаётся мне, что спад АЧХ здесь не просто пологий, а имеет хитрый вид периодической затухающей функции, поскольку частоты кратные "частоте усреднения" будут подавлены полностью, а частоты отличающиеся от кратных на 1/2 периода будут частично "прорываться", но чем дальше тем меньше, создавая некое подобие пологого спада АЧХ. Т.е. крутизну можно улучшить за счёт двойного и т.д. усреднения с периодами х1,5 х1,75 и т.д. от исходного периода усреднения.

    В общем интересная штука - дойдёт ход, поэкспериментирую.
     
  12. veterok

    veterok New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    6
    читал,читал....
    выложте хоть что-то готовое
    я в высшей математике плохо разбираюсь.
    Просто хочу спектроанализатор для АЦП-LPT.