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

news2025/5/11 13:02:53

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

目录

一、音频信号简介

1. 什么是音频信号

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读取一段音频,并展示其波形图、频谱图:

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):

  • EcapaTdnn:ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation in TDNN Based Speaker Verification
  • PANNS:PANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition
  • TDNN:Prediction of speech intelligibility with DNN-based performance measures
  • Res2Net:Res2Net: A New Multi-scale Backbone Architecture
  • ResNetSE:Squeeze-and-Excitation Networks
  • CAMPPlus:CAM++: A Fast and Efficient Network for Speaker Verification Using Context-Aware Masking
  • ERes2Net:An Enhanced Res2Net with Local and Global Feature Fusion for Speaker Verification

参考:

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

2. python-soundfile — python-soundfile 0.11.0 documentation

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2284284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis --- 分布式锁的使用

我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…

使用shell命令安装virtualbox的虚拟机并导出到vagrant的Box

0. 安装virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…

2025数学建模美赛|赛题翻译|E题

2025数学建模美赛,E题赛题翻译 更多美赛内容持续更新中...

SpringBoot统一数据返回格式 统一异常处理

统一数据返回格式 & 统一异常处理 1. 统一数据返回格式1.1 快速入门1.2 存在问题1.3 案列代码修改1.4 优点 2. 统一异常处理 1. 统一数据返回格式 强制登录案例中,我们共做了两部分⼯作 通过Session来判断⽤⼾是否登录对后端返回数据进⾏封装,告知前端处理的结果 回顾 后…

C语言学习强化

前言 数据的逻辑结构包括: 常见数据结构: 线性结构:数组、链表、队列、栈 树形结构:树、堆 图形结构:图 一、链表 链表是物理位置不连续,逻辑位置连续 链表的特点: 1.链表没有固定的长度…

反馈驱动、上下文学习、多语言检索增强等 | Big Model Weekly 第55期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 A Bayesian Approach to Harnessing the Power of LLMs in Authorship Attribution 传统方法严重依赖手动特征,无法捕捉长距离相关性,限制了其有效性。最近的研究利用预训练语言模型的…

git reset (取消暂存,保留工作区修改)

出现这种情况的背景:我不小心把node_modules文件添加到暂存区了,由于文件过大,导致不能提交,所以我想恢复之前的状态,但又不想把修改的代码恢复为之前的状态,所以使用这个命令可以只恢复暂存区的状态&#…

Coze插件开发之基于已有服务创建并上架到扣子商店

Coze插件开发之基于已有服务创建并上架到扣子商店 在应用开发中,需要调用各种插件,以快速进行开发。但有时需要调用的插件在扣子商店里没有,那怎么办呢? 今天就来带大家快速基于已有服务创建一个新的插件 简单来讲,就是…

Oracle 创建用户和表空间

Oracle 创建用户和表空间 使用sys 账户登录 建立临时表空间 --建立临时表空间 CREATE TEMPORARY TABLESPACE TEMP_POS --创建名为TEMP_POS的临时表空间 TEMPFILE /oracle/oradata/POS/TEMP_POS.DBF -- 临时文件 SIZE 50M -- 其初始大小为50M AUTOEXTEND ON -- 支持…

企业微信开发009_使用WxJava企业微信开发框架_封装第三方应用企业微信开发002_并且实现多企业授权访问---企业微信开发011

继续接上一节来贴代码: 接下来看 config部分的代码,这部分代码,系统启动的时候,就会执行,从而把配置的一些,配置读取出来,创建,针对每个企业微信的,操作service. 首先看yml配置文件中配置部分: 可以先看一下demo中: 提供了一个配置的示例,当然这个是针对 企业内部自建应用 …

机器学习 - 初学者需要弄懂的一些线性代数的概念

一、单位矩阵 在数学中,单位矩阵是一个方阵,其主对角线上的元素全为1,其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用,即任何矩阵与单位矩阵相乘,结果仍为原矩阵本身。 单位矩阵的定义&…

【学术会议-第五届机械设计与仿真国际学术会议(MDS 2025) 】前端开发:技术与艺术的完美融合

重要信息 大会官网:www.icmds.net 大会时间:2025年02月28日-03月02日 大会地点:中国-大连 会议简介 2025年第五届机械设计与仿真国际学术会议(MDS 2025) 将于2025年02月28-3月02日在中国大连召开。MDS 2025将围绕“机械设计”…

RabbitMQ 分布式高可用

文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…

海康工业相机 SDK对接 Hikvision

有C#基础的,可以参考下,直接上代码 BaseResult 来自于Nuget包,搜Rotion可以搜出来 LS.Standard.Data 海康的接口操作,要先引用相应的dll using MvCamCtrl.NET; using PCZD.Commons.Data.CameraModel; using PCZD.Data; using Sys…

MySQL 二进制安装(正式篇)

Author:Arsen Date:2025/01/24 官方参考文档:点击链接跳转 目录 规划下载安装管理FAQ 规划 OSMySQL Server Version备注CentOS 7.9 or Linux - Generic8.0.33(GNU libc) 2.17 下载 二进制包下载地址:https://downloads.mysql.…

K8S部署DevOps自动化运维平台

持续集成(CI) 持续集成强调开发人员提交了新代码之后,立刻自动的进行构建、(单元)测试。根据测试结果,我 们可以确定新代码和原有代码能否正确地集成在一起。持续集成过程中很重视自动化测试验证结果&#…

工业相机 SDK 二次开发-Sherlock插件

本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一.环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹,根据 Sherlock 版本找到…

分布式版本控制系统:Git

1 Git概述 Git官网:https://git-scm.com/ Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目Git易于学习,占地面积小,性能极快。它具有廉价的本地库、方便的暂存区域和多个工作流分支等特性…

C语言编程笔记:文件处理的艺术

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、为什么要用文件二、文件的分…

如何编写一个MyBatis插件?

大家好,我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助; 如何编写一个MyBatis插件? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 编写 MyBatis 插件需要使用 MyBatis 提供的插件接口,MyBa…