2013-09-15 3 views
2

Я хочу надежно преобразовать как записанный звук (через микрофон), так и обработанный звук (WAV-файл) в те же дискретизированные представления в Python, используя specgram.Нормальный звуковой сигнал

Мой процесс выглядит следующим образом:

  1. получить необработанные образцы (считываются из файла или потока от микрофона)
  2. выполнить некоторую нормализацию (???)
  3. выполнять БПФ с оконным для создания спектрограммы (черчения частоты в зависимости от времени с амплитудой пиков)
  4. дискретизации пики в аудио затем запоминает

в основном, на время, которое я получаю до последнего процесса дискретизации, я хочу как можно более надежно достичь того же значения в пространстве freq/time/amplitude для той же песни.

Моя проблема заключается в том, как я могу объяснить, что громкость (т. Е. Амплитуды выборок) различаются в записанном и WAV-read аудио?

Мои варианты для нормализации (возможно?):

  • Разделить все образцы в окне на среднем до FFT
  • Detrend все образцы в окне перед FFT
  • Разделить все образцы в окне по максимальной амплитуде выборки значение (чувствительны к шуму и выбросам) перед БПФ
  • Divide все амплитуды в спектрограмме средней

Как мне решить эту проблему? У меня почти нет знаний или опыта обработки сигналов.

+0

Поскольку шум, вероятно, никогда не будет иметь самых высоких амплитуд, вы можете: 1) разделить каждый образец на соответствующий максимальный уровень до БПФ; 2), затем умножить на целевую общую амплитуду также до БПФ; 3) выполнить БПФ в нормированном образце –

+0

Я не уверен, что я понимаю вопрос, но если все, о чем вы заботитесь, это пиковые местоположения в спектрограмме, нет необходимости нормализовать амплитуду. –

+0

@SaulloCastro: что такое «целевая общая амплитуда»? – lollercoaster

ответ

2

Спектры WAV-файла и записанного звука никогда не будут иметь точно такую ​​же форму, потому что аудиоданные из источника микрофона подвергаются дополнительным нарушениям на пути к вашему компьютеру. Эти нарушения могут быть уравнены, но это, вероятно, больше работы, чем вы хотите.

Что касается нормализации, я бы рекомендовал масштабировать спектр сигнала микрофона, чтобы его энергия соответствовала спектру спектра WAV (где «энергия» представляет собой сумму квадратов величин коэффициентов FFT).

Теперь вы упомянули, что хотите, чтобы спектрограммы сигналов были как можно более похожими. Поскольку спектрограмма представляет собой график спектра сигнала во времени, возможно, вам захочется поэкспериментировать с перенормировкой на каждом временном интервале по сравнению с просто нормализацией один раз по всей аудиозаписи.

+0

для вашего третьего пункта, да, я нормализую каждый интервал окна, а не всю запись. к вашей второй точке: по шкале вы имеете в виду разделить периодограмму спектра на сумму квадрата значения abs для коэффициентов? это должно было быть сделано после FFT, хотя, что я подозрительно отношусь к хорошим советам ... – lollercoaster

+0

, и я согласен, что спектры не будут одинаковыми, но до тех пор, пока основные пики одинаковы, это нормально – lollercoaster

+0

@lollercoaster Позвольте мне попытаться уточнить мой второй пункт ... Предположим, у вас есть два аудиосигнала: a и b. Если вы берете БПФ этих сигналов, вы получите их спектры, A и B. Теперь предположим, что вы хотите масштабировать A так, чтобы это был тот же «размер», что и B. Поскольку я собираюсь использовать энергию сигнала в качестве меры «размер» я хочу найти постоянный коэффициент, такой, что сумма (abs (c * A) ** 2) = sum (abs (B) ** 2), где c - постоянный коэффициент. –

Смежные вопросы