音频处理1_基本概念

AI变声和音乐创作的基础

声音本质上是人类可察觉范围内的气压周期性波动, 即声波

声波是一种连续信号,在任意时间内的声音信号有无数个取值。对于只能读取有限长数组计算机来说,我们需要将连续的声音信号转换为一个离散的序列,即数字化表示。

1.音频采样 (sampling)

采样是在固定时间间隔上测量连续信号,并将这些间隔信号转换为离散数值的过程。

采样率(sampling rate,也叫采样频率,sampling frequency)指的是每秒测量信号数值的次数,其单位为赫兹(Hz)。

  • CD音质的音频一般采用44100Hz的采样率,即每秒钟测量了44100次信号的数值。

  • 高清(High-resolution)音频的采样率一般为192000赫兹,即192千赫兹。

  • 语音模型常用的采样率为16,000赫兹,即16千赫兹。

1.1 采样幅值

幅值是描述声音在任意瞬间的气压大小,使用分贝(dB)作为单位

人类感知到的幅值强度称为响度

正常的说话声音响度在60分贝以下;一场摇滚演出的响度大概在125分贝,几乎是人耳的极限。

  • 在数字音频中,每个采样点记录某个时间点上的声波幅值

1.2 位深度

  • 采样点的位深度决定了采样点的数值可以有多少种变化,即采样的精度

  • 位深度越大,数字化表示就可以越准确地记录下原始的连续声波

在这一量化过程中,原始的连续幅值被约减到最近的离散值上,因此量化过程会引入噪声。位深度越大,量化噪声则越小。

最常见的音频位深度为16比特或24比特。比特是一个二进制单位,

表示了声波的连续幅值被数字化后可以取值的范围:16比特有65,536种可能的取值,而24比特有16,777,216种可能的取值。

在实际应用中,16比特音频的量化噪声已达到了几乎不可辨别的程度。

1.3 重采样

改变音频采样频率,频率变高(大)为上采样,频率变低(小)为下采样

信号的原始采样率为8千赫兹时,即信号每秒钟会包含8000个采样点,根据奈奎斯特采样定理,我们知道该信号不会包含高于4千赫兹的频率成分。

假设两个采样点中间的原始连续信号呈一条平滑的曲线:

  • 上采样是对曲线的估计计算得到两个采样点中间的额外数值。

  • 下采样首先要通过低通滤波器过滤高于 奈奎斯特极限频率 的成分,之后重新按低频率采样。

能通过简单的每隔一个采样点丢弃一个采样点来进行2倍的下采样, 会造成信号的失真,即混叠失真。

2.音频的时域-频域

音频信号的频域(谱)和其时域(波形)所包含的信息完全相同,他们只是相同数据的不同视角。

  • 时域波形表示的是幅值随时间的变化

  • 频谱表示的是各个频率成分在该时间段内的强度

2.1 音频的时域

采样点随着时间变化的数值被标记在直角坐标系中

这种可视化表示方法可以很好地帮助我们辨别声音信号中的某些特征,

用librosa来绘制音频信号的波形图:

import librosa
import librosa.display
import matplotlib.pyplot as plt

array, sampling_rate = librosa.load(librosa.ex("trumpet"))
plt.figure().set_figwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)
# y轴表示的是信号的幅值,x轴则表示时间

在这里插入图片描述

2.2 音频的频域

即音频的 频谱(spectrum) or 频域(frequency domain)

频谱通过离散傅里叶变换(Discrete Fourier Transform, DFT)求得,描述音频信号中每个频率成分的强度

使用numpy的rfft()函数来绘制小号声音的频谱图,使用整段音频的前4096个采样点计算DFT,这差不多是第一个音符的长度:

import numpy as np

dft_input = array[:4096]

# 计算 DFT
window = np.hanning(len(dft_input))
windowed_input = dft_input * window
dft = np.fft.rfft(windowed_input)

# 计算频谱的幅值,转换为分贝标度
amplitude = np.abs(dft)
amplitude_db = librosa.amplitude_to_db(amplitude, ref=np.max)

# 计算每个DFT分量对应的频率值
frequency = librosa.fft_frequencies(sr=sampling_rate, n_fft=len(dft_input))

plt.figure().set_figwidth(12)
plt.plot(frequency, amplitude_db)
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude (dB)")
plt.xscale("log")

在这里插入图片描述

这张图向我们展示了截取的音频片段中各个频率成分的强度。图中的x轴是频率的值,一般采用对数表示;y轴则对于频率的幅值。

可以看到这张频谱图中有几个峰值。这些峰值对应着当前音符的泛音频率,且更高的泛音声音更小。可以看到首个峰对应的频率在620赫兹左右,这说明当前演奏的音符的音高是E♭。

计算DFT所得到的频谱是由复数组成的序列,每个复数都包含了实部和虚部。我们可以使用np.abs(dft)来计算频谱的绝对值(又称模、幅值)。实部和虚部的夹角组成的序列也成为相位谱,但在机器学习应用中我们通常不关注这一部分。

我们使用了librosa.amplitude_to_db()函数将幅值转换为了分贝标度,方便我们观察频谱的细节。有时人们也使用测量能量而非幅值的能量谱(power spectrogram),其值为幅值的平方。

2.3 时频谱

描绘频率成分随着时间的变化

在一段乐器演奏中,演奏者实际上吹奏了几个不同频率的音符。 频谱只能表示一个短暂时间段内各个频率成分的总体幅值

时频谱表示了音频信号中各个频率成分随时间变化的过程。它可以在一张图中看到时间、频率和幅值的所有信息。

时频谱是信息量最大的音频工具之一:

  • 在分析音乐文件时,时频谱可以清晰地展示各个乐器和人声在音乐整体中所占的部分

  • 在语音文件中,可以在时频谱里看到每个元音音节以及它们频率成分的差异。

这里的解决方法是我们可以进行多次的DFT,每次DFT都覆盖一小段不同的时间段,然后再把所有的频谱堆叠起来,这样就构成了时频谱(spectrogram)

import numpy as np

D = librosa.stft(array) # Short Time Fourier Transform, STFT
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)

plt.figure().set_figwidth(12)
librosa.display.specshow(S_db, x_axis="time", y_axis="hz")
plt.colorbar()

在这里插入图片描述

图解:

- x轴表示的是和波形图中相同的时间

- y轴现在表示着不同的频率,以赫兹(Hz)为单位

- 颜色的强度表示着当前时间点和频率的幅值强度,使用分贝(dB)标度

时频谱计算步骤:

1. 首先截取很短的音频片段(通常只有几毫秒),然后对每个片段计算其离散傅里叶变换(DFT);

2. 获得所有片段的频谱之后,我们再将频谱延时间轴堆叠起来,这样就得到了我们的时频谱

时频谱图像的每个垂直切片都是一个单独的频谱图

3.梅尔时频谱

一种时频谱变体,与标准时频谱相比,梅尔谱可以捕捉更多人类可感知的音频特征,在语音识别、、音乐等任务中更常用。

标准时频谱的频率(y轴)是赫兹的线性变化。 由于人类听觉系统对于低频率声音的变化更敏感,对于高频率声音的变化则较不敏感。这一敏感度的变化是随频率的上升呈对数关系下降的。

S = librosa.feature.melspectrogram(y=array, sr=sampling_rate, n_mels=128, fmax=8000)
S_dB = librosa.power_to_db(S, ref=np.max)

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

在这里插入图片描述

  • 梅尔滤波器组:

梅尔标度作为一种感知标度,通过梅尔滤波器组,模拟人耳对于频率的非线性感知。

n_mels代表梅尔滤波器组中的滤波器个数

梅尔滤波器组会计算一组频率范围,这些频率范围会将整个频谱分割成许多部分

每个频率范围都对应滤波器组中的一个滤波器

滤波器的形状和间隔是模拟人耳对不同频率的感知差异而计算得出

常用的n_mels取值为4080

fmax则代表我们想选取的最大频率(以赫兹为单位)
  • 梅尔谱的计算过程中需要对信号进行滤波,因此梅尔谱的特征有损过程。

将梅尔谱转化回波形比标准时频谱更加困难,我们需要估计在滤波过程中丢失的频率成分。

  • HiFiGAN声码器可以将梅尔谱转化回波形。

4.其他

  • 反向短时傅里叶变换(inverse STFT)可将时频谱转换回原始的波形 这需要时频谱的强度谱之外,也需要时频谱的相位谱,目前的机器学习模型大多只能生成强度谱

  • 相位重建(phase reconstruction)方法,包括传统的Griffin-Lim算法,或者使用一种被称为声码器(vocoder)的神经网络来从时频谱还原其波形

  • 时频谱的作用不仅在于音频的可视化,许多机器学习模型也会使用时频谱作为模型的输入和输出而不直接使用音频的波形

Reference

  • 本文内容借鉴: https://huggingface.co/learn/audio-course/zh-CN/chapter1/introduction

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssm情侣购物系统-计算机毕业设计源码02387

目 录 摘要 1 绪论 1.1 开发背景与意义 1.2开发意义 1.3Vue.js 主要功能 1.3论文结构与章节安排 2 情侣购物系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分…

电脑蓝屏怎么办?7个方法为你解决问题!

“我今天开电脑时,不知道为什么电脑突然就蓝屏了。大家有什么方法可以解决电脑蓝屏问题吗?” 在现代社会的快节奏中,电脑已经成为了我们工作和生活的重要伙伴。然而,当这个“伙伴”突然展现出它的“任性”一面——蓝屏时&#xff…

idea插件开发之通过纯编码方式开发页面(不使用form ui)

写在前面 本文看线如何通过纯编码方式来定义页面。 1:正戏 我们首先来定义一个面板,需要继承抽象类:com.intellij.openapi.ui.SimpleToolWindowPanel,如下: public class MySelfDefinePanel extends SimpleToolWin…

【Python整蛊小代码】以及打包成.exe格式过程【踩坑,避坑】

一、项目介绍 该项目为一个Python写成的整蛊小代码,效果是不断弹出窗口,并显示图片和文字。并使用 项目大致效果: (图片过于搞笑,不宜展示) (无侵犯肖像权,禁止商用) …

优迅医学近10亿对赌协议今年到期,前五大客户收入波动剧烈

《港湾商业观察》廖紫雯 日前,优迅医学生物科技(以下简称:优迅医学)递表港交所,保荐机构为中金公司,优迅医学国内运营主体为北京优迅医学检验实验室有限公司。 作为一家以平台为基础的基因科技公司&#…

常见报错及程序框架图

程序框架图 程序流程图又称程序框图,是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上,通过对输入输出数据和处理过程的详细分析,将计算机的主要运行步骤和内容标识出来。程序框图是进行程序设…

湖北省七普分乡、镇、街道数据,shp、excel格式 需要自取

数据名称: 湖北省七普分乡、镇、街道数据 数据格式: Shp、excel 数据几何类型: 面 数据坐标系: WGS84 数据时间:2020年 数据来源:网络公开数据 数据可视化.

1.Element的table表高度自适应vue3+js写法

解决方法 在页面table上添加id,动态计算每页table的最大高度 ,将高度保存在store中,每次切换路由时进行计算。 文章目录 解决方法前言一、页面table使用二、store状态库1.引入库 效果 前言 提示:状态管理使用的是pinia,用法参考…

知识分享|个人查询大数据信用有哪些好处?

在当今数字化时代,个人信用评估已经成为金融、购物、租房等各个方面的关键因素。大数据技术的兴起为个人信用查询带来了新的可能性和好处。下面将探讨个人查询大数据信用的益处。 首先,个人查询大数据信用可以全面了解自己的信用状况 通过查询大数据信用…

LeetCode | 35.搜索插入位置

这套题可以直接遍历,找到第一个大于target的数并返回其位置即可,但是时间复杂度为 O ( n 2 ) O(n^2) O(n2),题目中明确要求时间复杂度为 O ( l o g n ) O(logn) O(logn),考虑二分查找算法,这道题就是标准的二分查找的一…

助力OTT大屏营销,酷开科技引领产业变革与创新

随着大屏电视产品的迭代,越来越多家庭以增换购等多种形式获得超高清、超大屏的智能电视,大屏的人均拥有量和渗透率进一步增加。在这种情况下,通过OTT应用为载体,将大量内容持续输送到大屏终端,从而形成了电视硬件普及与…

网格重构技术在AI绘画中的革新作用

引言: 随着人工智能(AI)技术的飞速发展,艺术创作也迎来了前所未有的变革。AI绘画不仅改变了艺术家的创作方式,还为非专业人士开启了艺术创作的大门。在众多AI技术中,网格重构技术因其独特的作用和效果成为A…

解决el-table表格拖拽后,只改变了数据,表头没变的问题

先看看是不是你想要解决的问题 拖拽后表头不变的bug修复 这个问题一般是使用v-for对column的数据进行循环的时候,key值绑定的是个index导致的,请看我上篇文章:eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):-…

远程主机强迫关闭了一个现有的连接redis

引言 在使用 Redis 进行开发和运维过程中,我们可能会遇到 Redis 连接被远程主机强制关闭的情况。本文将介绍造成这种情况的原因,并给出一些处理方法和建议。 远程主机强制关闭连接的原因 远程主机强制关闭连接通常是由于网络不稳定、连接超时、Redis 配…

技术流 | ClickHouse工具ckman v3.1.3 sinker v3.1.8 版本发布

【本文作者:擎创科技 ClickHouse专家,ckman作者禹鼎侯】 在这个端午小长假里,ckman和clickhouse_sinker分别带来了全新的版本。让我们一起来看看,新版本都有哪些新特性吧! ckman v3.1.3新版本特性 ckman v3.1.3作为…

多校园跑腿小程序源码系统 帮取+代拿+外卖配送 功能超多 带完整的安装代码包+搭建部署教程

系统概述 多校园跑腿小程序源码系统 是一款基于微信小程序平台开发的全功能校园服务应用。该系统采用先进的前后端分离架构,结合云服务技术,确保了系统的高可用性、可扩展性和安全性。系统设计之初就充分考虑到了多校园环境的特殊性,支持多校…

ToF原理记录

目录 1. ToF是什么?2. ToF深度测量原理2.1 脉冲调制法2.2 连续波调制法 1. ToF是什么? 飞行时间(Time-of-Flight,ToF)基本原理是通过连续发射光脉冲(一般为不可见光)到目标物体上,然…

《大道平渊》· 拾叁 —— 失眠?忍不住乱想?不如反其道而行之!

《平渊》 拾叁 "睡觉的时候就是要胡思乱想" 声明:以下内容针对非失眠症人群,如果失眠不是偶尔发生,而是长期存在,以下内容和你无关,请尽早治疗,遵循医嘱。 失眠的本质是什么?心理因素…

刚实习的大学生如何避免招聘骗局?

大学生在求职过程中,常常成为招聘骗局的受害者。为了避免这种情况,大学生需要提高警惕,采取一系列措施来防范招聘骗局。以下是一些建议: 首先,大学生应当保持警惕,不轻信招聘信息。在求职时,务…

6.8日志系统

当做大型项目的时候,出了bug可能需要借助于日志检查,小项目一般是打断点。 服务器是一直在运行的,不能停止,可以借助于日志检查错误。 日志分为两种:业务级别的日志(供用户分析业务过程)&…