В настоящее время я разрабатываю систему распознавания речи, поэтому мне нужно было освежить свои знания об основах, связанных с ней. Эта статья является результатом этого.
Введение в аудио
Индекс
- Введение
Звук -
- Звук представляет собой непрерывный сигнал и имеет бесконечные значения сигнала.
- Цифровым устройствам требуются конечные массивы, поэтому нам необходимо преобразовать их в серию дискретных значений.
- АКА Цифровое представительство
- Мощность звука — скорость передачи энергии (Ватт).
- Интенсивность звука — звуковая мощность на единицу площади (Ватт/м**2)
Форматы аудиофайлов —
- .wav
- .flac (бесплатный аудиокодек без потерь)
- .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 (для вашей практики)
Социальные сети —
Если вам понравилась статья, не забудьте выразить признательность, похлопав в ладоши. Увидимся в следующем блокноте, где мы увидим "Как загружать и передавать аудиоданные".