音频入门(一):音频基础知识与分类的基本流程

音频信号和图像信号在做分类时的基本流程类似,区别就在于预处理部分存在不同;本文简单介绍了下音频处理的方法,以及利用深度学习模型分类的基本流程。

目录

一、音频信号简介

[1. 什么是音频信号](#1. 什么是音频信号)

[2. 音频信号长什么样](#2. 音频信号长什么样)

二、音频的深度学习分类基本流程


一、音频信号简介

1. 什么是音频信号

音频信号是声音波形的电学表示,它可以捕捉声音的频率、幅度和时间特性。音频信号可以是模拟的,也可以是数字的:

  • 模拟音频信号

    • 模拟音频信号是连续变化的电信号,它模拟了原始声音波形的物理特性。
    • 它可以通过麦克风捕获,并通过扬声器、耳机或放大器进行播放。
    • 模拟信号可以被录制在磁带、黑胶唱片等介质上。
  • 数字音频信号

    • 数字音频信号是通过将模拟信号转换为一系列数字值来表示的,这个过程称为模数转换(ADC)。
    • 数字音频信号通常以文件形式存储,如MP3、WAV、AAC等格式。
    • 数字音频可以方便地进行编辑、处理和传输,且不受模拟信号的退化问题影响。

音频信号的基本属性包括:

  • 采样率(Sampling Rate):每秒内捕获的样本数量,单位是赫兹(Hz)。常见的采样率有44.1 kHz(CD质量)、48 kHz等。
  • 位深度(Bit Depth):每个样本的量化精度,单位是比特(bit)。常见的位深度有16位、24位等。
  • 通道数(Channels):音频信号的声道数量,如单声道(Mono)、立体声(Stereo)或环绕声(Surround Sound)。
  • 频率内容(Frequency Content):音频信号包含的频率范围,通常以赫兹(Hz)为单位。
  • 幅度(Amplitude):信号的强度或大小,通常影响声音的响度。

2. 音频信号长什么样

我们送入计算机的,肯定是数字音频信号了。那么,如何读取一段音频,并看看它是如何表示的呢?

和图像领域用Opencv或PIL等库读取图片类似,音频领域也有些专门的库可以读取/处理音频。

常用的库有soundfile、librosa等。下面我们使用soundfile读取一段音频,并展示其波形图、频谱图:

python 复制代码
import soundfile
import resampy
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import stft


if __name__ == '__main__':
    audio_path = "/data/datasets/Audios/Golf_sound/1_batting/batting_240725_36.MP3"
    audio, sample_rate = soundfile.read(audio_path)
    print(audio.shape)
    print(sample_rate)

    audio_mean = np.mean(audio, 1)
    audio_resampled = resampy.resample(audio_mean, sample_rate, 16000, filter="kaiser_best")
    print(audio_resampled.shape)

    # 计算STFT
    freqs, times, spectrogram = stft(audio_resampled, sample_rate)


    # 绘制波形图
    plt.figure(figsize=(10, 2))
    plt.title('Audio Waveform')
    plt.xlabel('Time (seconds)')
    plt.ylabel('Amplitude')
    plt.plot(audio[:, :])


    # 绘制频谱图
    plt.figure(figsize=(10, 4))
    plt.title('Audio Spectrogram')
    plt.xlabel('Time (seconds)')
    plt.ylabel('Frequency (Hz)')
    plt.imshow(np.abs(spectrogram), aspect='auto', origin='lower')
    plt.colorbar()

运行后会绘制两个图:音频的波形图和STFT频谱图。

可以看到,原始音频是多通道的(示例音频是2通道,不同可能会有不同通道数),每个通道都可以看成是个一维的时序信号。

二、音频的深度学习分类基本流程

那么我们如何对音频信号进行分类呢?在信号处理领域,通常会将原始信号转换为更容易捕获特征的频域信号,然后利用一些手工设计特征或者深度学习方法捕获的特征,送入分类器,然后得到各个类别的概率。

下面是一个从原始信号到最终类别概率的深度学习算法流程:

相关的深度学习模型有CAMPPlus、ResNetSE、Res2Net等,它们可以从频域特征提取更为高级的语义特征,然后利用一个FC层分类得到各个类别的概率。

模型论文(引自参考3):

参考:

  1. Librosa: https://librosa.org/

  2. python-soundfile --- python-soundfile 0.11.0 documentation

  3. https://github.com/yeyupiaoling/AudioClassification-Pytorch

相关推荐
cxylay4 个月前
【详细易懂】快速傅里叶变换(FFT)生成的频率、幅度具体求解过程
fft·频率·快速傅里叶变换·归一化·时域·频域·幅度
cxylay4 个月前
【FFT】信号处理——快速傅里叶变换【通俗易懂】
fft·频率·快速傅里叶变换·傅里叶变换·时域·频域·幅值
cxylay4 个月前
【python版】示波器输出的csv文件(时间与电压数据)如何转换为频率与幅值【方法③】
开发语言·python·示波器·频谱·csv文件·时域·频域
Web3&Basketball1 年前
AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别
人工智能·python·机器学习·scikit-learn·语音识别·librosa