В настоящее время я разрабатываю систему распознавания речи, поэтому мне нужно было освежить свои знания об основах, связанных с ней. Эта статья является результатом этого.

Введение в аудио

Индекс

  1. Введение

Звук -

  • Звук представляет собой непрерывный сигнал и имеет бесконечные значения сигнала.
  • Цифровым устройствам требуются конечные массивы, поэтому нам необходимо преобразовать их в серию дискретных значений.
  • АКА Цифровое представительство
  • Мощность звука — скорость передачи энергии (Ватт).
  • Интенсивность звука — звуковая мощность на единицу площади (Ватт/м**2)

Форматы аудиофайлов —

  1. .wav
  2. .flac (бесплатный аудиокодек без потерь)
  3. .mp3

Форматы файлов различаются по способу сжатия цифрового представления аудиосигнала.

Этапы преобразования —

  • Микрофон улавливает аналоговый сигнал.
  • Затем звуковая волна преобразуется в электрический сигнал.
  • этот электрический сигнал затем оцифровывается с помощью аналого-цифрового преобразователя.

Выборка

  • Это процесс измерения значения сигнала с фиксированными интервалами времени.
  • После сэмплирования семплированный сигнал имеет дискретный формат.

Частота дискретизации/ Частота дискретизации

  • Количество выборок в секунду
  • например если в секунду делается 1000 выборок, то частота выборки (SR) = 1000
  • ВЫШЕЕ SR –> ЛУЧШЕЕ КАЧЕСТВО ЗВУКА

соображения SR

  • Частота дискретизации = (самая высокая частота, которую можно захватить из сигнала) * 2
  • Для человеческого уха слышимая частота составляет 8 кГц, следовательно, мы можем сказать, что частота дискретизации(SR) составляет 16 кГц.
  • Хотя большее значение SR дает лучшее качество звука, это не означает, что мы должны продолжать увеличивать его.
  • После необходимой строки не добавляет никакой информации, а только увеличивает стоимость вычислений.
  • Кроме того, низкий SR может привести к потере информации.

Моменты, которые следует помнить —

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

Амплитуда —

  • Звук создается изменением атмосферного давления на слышимых человеком частотах.
  • Амплитуда — уровень звукового давления в данный момент, измеренный в дБ(децибелах).
  • Амплитуда – это мера громкости.

Битовая глубина —

  • Описывает, насколько значение точность может быть описано
  • Чем выше битовая глубина, тем более близко цифровое представление напоминает исходную непрерывную звуковую волну.
  • Распространенными значениями битовой глубины являются 16-битные и 24-битные.

Квантование —

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

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

  • Требуется 16-битный звук — 65536 шагов
  • Требуется 24-битный звук — 16777216 шагов
  • Это квантование вызывает шум, поэтому предпочтительна большая битовая глубина.
  • Хотя этот шум не проблема
  • 16- и 24-битные аудио хранятся в виде целочисленных сэмплов, тогда как 32-битные аудиосэмплы хранятся в с плавающей запятой.
  • Для модели требуется число с плавающей запятой, поэтому нам нужно преобразовать этот звук в число с плавающей запятой, прежде чем мы будем обучать модель.

Выполнение -

#load the library
import librosa
#librosa.load function returns the audio array and sampling rate
audio, sampling_rate = librosa.load(librosa.ex('pistachio'))
import matplotlib.pyplot as plt
plt.figure().set_figwidth(12)
librosa.display.waveshow(audio,sr = sampling_rate)

  • амплитуда отложена по оси ординат, а время по оси абсцисс.
  • варьируется от [-1.0,1.0] — уже число с плавающей запятой
print(len(audio))
print(sampling_rate/1e3)
>>1560384
>>22.05
## Frequency Spectrum
import numpy as np
# rather than focusing on each discrete value lets just see first 4096 values
input_data = audio[:4096]


# DFT = discrete fourier transform
# this frequency spectrum is plotted using DFT
window = np.hanning(len(input_data))
window

>>array([0.00000000e+00, 5.88561497e-07, 2.35424460e-06, ...,
       2.35424460e-06, 5.88561497e-07, 0.00000000e+00])
dft_input = input_data * window
figure = plt.figure(figsize = (15,5))
plt.subplot(131)
plt.plot(input_data)
plt.title('input')
plt.subplot(132)
plt.plot(window)
plt.title('hanning window')
plt.subplot(133)
plt.plot(dft_input)
plt.title('dft_input')
# similar plot is generated for every instance

Дискретное частотное преобразование = ДПФ

  • Вы бы согласились со мной, если бы я сказал это до тех пор, пока у нас не будет дискретных данных о сигнале?
  • Если да, то вы понимаете, что до сих пор у нас были данные в временной области, а теперь мы хотим преобразовать их в частотную область. . Вот поэтому сэр DFT здесь, чтобы помочь
# calculate the dft - discrete fourier transform
dft = np.fft.rfft(dft_input)
plt.plot(dft)

# amplitude 
amplitude = np.abs(dft)
# convert it into dB
amplitude_dB = librosa.amplitude_to_db(amplitude,ref = np.max)

# sometimes people want to use power spectrum -> A**2

Зачем брать абсолют?

Когда мы взяли амплитуду, мы применили функцию абс, причина в том, что комплексное число

  • результат, возвращаемый после преобразования Фурье, имеет сложную форму, и взятие абсолютного значения дало нам величину, то есть абсолютное значение.
print(len(amplitude))
print(len(dft_input))
print(len(dft))
>>2049
>>4096
>>2049

Почему обновленный массив (половина + 1) исходного массива?

Когда ДПФ вычисляется для чисто действительных входных данных, выходные данные являются эрмитово-симметричными, т. Е. Члены с отрицательной частотой являются просто комплексными сопряжениями соответствующих членов с положительной частотой, и, следовательно, члены с отрицательной частотой являются избыточными. Эта функция не вычисляет отрицательные частотные составляющие, поэтому длина преобразованной оси выходных данных равна n//2 + 1. [источник - документация]

# frequency
frequency = librosa.fft_frequencies(n_fft=len(input_data),sr = sampling_rate)
plt.figure().set_figwidth(12)
plt.plot(frequency, amplitude_dB)
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude (dB)")
plt.xscale("log")

  • Как упоминалось ранее, временная область → частотная область
  • Частотная область обычно изображается в логарифмическом масштабе.

Спектрограммы —

  • показывает, как меняется частота относительно время
  • Алгоритм, который выполняет это преобразование, является мягким = короткое частотно-временное преобразование.

Как создать спектрограмму —

  • спектрограммы представляют собой набор частотных преобразований, как? покажи нам
  • Для данного звука мы берем небольшие сегменты и находим их частотный спектр. После этого мы просто складываем их по оси времени. Полученная диаграмма представляет собой спектрограмму
  • librosa.stft по умолчанию разбивается на 2048 сегментов

Частотный спектр —

  • Представляет амплитуду различных частот в один момент времени.
  • Частотный спектр больше подходит для понимания частотных компонентов, присутствующих в сигнале в определенный момент времени. Оба представления являются ценными инструментами для понимания характеристик сигналов в частотной области.
  • АМПЛИТУДА и ЧАСТОТА

Спектрограмма —

  • Представляет изменения частотного содержания с течением времени, разбивая сигнал на сегменты и отображая их частотные спектры с течением времени.
  • Спектрограмма особенно полезна для анализа и визуализации изменяющихся во времени сигналов, таких как аудиосигналы или данные временных рядов, поскольку она дает представление о том, как частотные компоненты изменяются в разные интервалы времени.
  • ЧАСТОТА против ВРЕМЕНИ
spectogram = librosa.stft(audio)
spectogram_to_dB = librosa.amplitude_to_db(np.abs(spectogram),ref = np.max)
plt.figure().set_figwidth(12)
librosa.display.specshow(spectogram_to_dB, x_axis="time", y_axis="hz")
plt.colorbar()

Спектрограммы Мела —

  • Спектрограмма в разных частотных шкалах.

Прежде чем продолжить, нужно помнить об этом.

  • На более низких частотах люди более чувствительны к изменениям звука, чем на более высоких частотах.
  • Эта чувствительность изменяется логарифмически с увеличением частоты.
  • Проще говоря, спектрограмма мела — это сжатая версия спектрограммы.
MelSpectogram = librosa.feature.melspectrogram(y=audio, sr=sampling_rate, n_mels=128, fmax=8000)
MelSpectogram_dB = librosa.power_to_db(MelSpectogram, ref=np.max)

plt.figure().set_figwidth(12)
librosa.display.specshow(MelSpectogram_dB, x_axis="time", y_axis="mel", sr=sampling_rate, fmax=8000)
plt.colorbar()

  • Приведенный выше пример используется librosa.power_to_db() , так как librosa.feature.melspectrogram() используется для создания спектрограммы мощности.

Заключение -

Mel Spectogram помогает фиксировать больше значимых признаков, чем обычная спектрограмма, поэтому она популярна.

Ссылка

Обнимающее лицо

Личное ядро ​​Kaggle (для вашей практики)

Социальные сети —

ЛинкедИн

Каггл

Если вам понравилась статья, не забудьте выразить признательность, похлопав в ладоши. Увидимся в следующем блокноте, где мы увидим "Как загружать и передавать аудиоданные".