音频信号处理入门

普及知识

什么是信号分析?

将一个复杂信号分解成若干简单信号分量之和,或者用有限的一组参量去表示一个复杂波形的信号,从这些简单的分量组成情况去考察复杂信号的特性。

对信号分析的过程实际上就是一个特征提取的过程,从一段复杂的波形中提取我们需要的信息。

为什么要分析信号?

  1. 信号分析是获取信号特征信息的重要手段,通过信号分析,可以得到复杂信号的基本特征。
  2. 信号分析是获取信号源特征信息的重要手段,可以通过对信号特征的详细了解,得到信号源特性、运行情况等信息。
  3. 深度学习的第一步是要收集数据的特征(feature)。所以需要通过信号分析,提取数据集特征。

怎样进行信号分析?

信号分析方式────根据信号的类型选择

  1. 信号平稳────由于信号不随时变化,可以在时域和频域直接分析;
  2. 信号不稳────由于信号随时变化,需要将信号拆解分析
    1. 时间维度拆解,利用平均瞬时功率信号,可以知道信号传播规律
    2. 频域维度拆解,按照不同频带的滤波器进行滤波处理
    3. 时频域纬度拆解,同时包含信号随时间和频域变化的规律

信号的频域拆解

信号的频率成分

  1. 任何信号都可以看作是多个不同频率的简单波形(如正弦波)的叠加
  2. 每个频率的波形都有其特定的振幅

包络(Envelope)

包络是在信号处理中描述信号强度变化的曲线或轮廓。

包络曲线是在信号波形的最高点和最低点之间绘制一条平滑曲线,它可以用来描述信号的振幅随时间变化的趋势.

包络有助于捕获信号的宏观变化特征,忽略瞬时波动,适合分析具有调幅特性或其他周期性变化的信号。

精细结构

指音频中的高频细节,如每个振动周期内的变化。

信号的包络结构和精细结构与信号频率的关系

多个不同频率信号的叠加,由于和差化积,会形成包络结构和精细结构。

image-20240526002042154

决定包络结构(261.63Hz):image-20240526002129551

决定精细结构(3401.19Hz):

image-20240526002245212

信号的包络结构是由低频信号决定的,信号的精细结构是由高频信号决定的。

在语音识别中,主要通过信号的包络结构来区分不同的音频信号,因此在识别领域更关注低频的作用。

信号的时域分析

分帧(framing)

什么是分帧?

分帧是指:将信号按照时间尺度分割,划分为多个较短的、固定长度的帧。

也就是将信号按照时间尺度划分成多个段,每一段的长度就是帧长frame_size。

分出的段的数量,就是帧的个数frame_num。

如果不考虑重叠分帧,则该信号的总采样点数为frame_size * frame_num。

为什么要分帧?

由于音频信号是一个随时间变化的连续信号,而我们通常需要在一个较短的时间窗口内去分析,来捕捉信号的时间变化特性。

分帧重叠(Overlapping)

分帧重叠是指相邻帧之间存在部分重叠,这样可以确保帧与帧之间的过渡区域不会丢失重要信息。重叠部分有助于平滑的过渡,减少由分帧引入的边界效应。

重叠大小(Overlap Size):相邻帧之间重叠的样本数

帧移(Hop Size):每次移动的样本数,即相邻帧的开始位置之间的距离

帧数计算公式

设:

  • \(N\)为音频信号的总样本数
  • \(L\)为每帧的长度
  • \(O\)为帧与帧的重叠大小

帧移(Hop Size)可以表示为:

\[H=L-O \]

帧数\(F\)的计算公式为:

\[F=\left\lceil\frac{N-O}{H}\right\rceil \]

公式推导

为了计算帧数,我们需要知道音频信号在分帧后的帧数。

基本思路是:从信号起始位置开始,每次移动帧移(H)个样本,直到覆盖整个信号。

假设有总样本数\(N\),帧长度\(L\),重叠大小\(O\),帧移\(H=L-O\)

  1. 初步分析:

    我们要覆盖从0到\(N-1\)​的所有样本,从而计算总的帧移动次数。考虑到帧开始的位置

    • 第一个帧的起始位置:\(0\)
    • 第二个帧的起始位置:\(H\)
    • 第三个帧的起始位置:\(2H\)
    • ...
    • 第k个帧的起始位置:\((k-1)H\)
  2. 覆盖整个信号

    为了覆盖整个信号,我们希望最后一个帧的起始位置满足:\((k-1)H + L\ge N\)

    也就是说,k必须满足:\(k\ge \frac{N-L}{H}+1\)

  3. 得出总帧数计算公式

    为了确保所有的信号样本的覆盖,我们需要向上取整:

    \[F=\left\lceil\frac{N-L}{H}+1\right\rceil \]

    由于\(H=L-O\)​,化简得:

    \[F=\left\lceil\frac{N-O}{H}\right\rceil \]

幅值包络(Amplitude Envelope)

幅值包络是描述信号振幅随时间变化的曲线,能够反映一个信号整体的振幅结构。

幅值包络是一条平滑的曲线,代表信号在每个时间点的最大幅值,它定义了信号振幅的外部轮廓轨迹。

时域与频域的关系

相位与振幅

正弦波就是一个圆周运动在一个二维平面的投影。

任意时刻的相位:\(\phi\)

任意时刻的幅度:\(\sin{\phi}\times振幅A\)

在这里插入图片描述

频域的基本单元

频域的基本单元可以理解为一个是始终在旋转的圆。

在这里插入图片描述

快速傅里叶变换(Fast Fourier Transform)

FFT可以将信号从原始域(通常是时间或空间)转换到频域或逆转换回来。

在这里插入图片描述

任意波形的FFT

在这里插入图片描述

相位差

\[相位差=(时间差/周期)×2π \]

相位差不是时间差,通过求时间差占周期的比例,乘\(2\pi\)就得到了相位差。

在这里插入图片描述

频谱图(Spectrogram)

频谱图通常用来表示信号在频域上的能量分布。

它显示了信号各个频率分量的振幅或功率。一般是针对整个信号,或者某一个固定时间窗口。

频谱图是一个二维图像,横轴是信号频率,纵轴是信号振幅。

语谱图

语谱图是频谱图在时间轴上的延伸。

在这里插入图片描述

在这里插入图片描述

时频域分析

为什么不能只依靠频域分析?

频谱虽然可以看出信号的频率分布,但是由于丢失了时域信息,因此无法看出频率分布随时间的变化。

时域分析方法

幅值包络法

学习代码

其余方法待续

时频域分析方法

短时傅里叶变换(STFT)

短时傅里叶变换(Short-Time Fourier Transform,STFT)

小波变换(WT)

Wigner分布

声音

声音包括两个基本属性:频率和振幅

角频率

角频率与频率的关系:

\[\omega=2\pi f \]

简单理解:

\(\omega\)表示rad/s,f表示完成多少次/s,那么每转完一圈,也就是走了2\(\pi\)rad,就完成了一次。因此

\[\frac{走的总弧度/s}{2\pi}={完成的总次数/s} \]

\[\frac{\omega}{2\pi}={f} \]

响度(Loudness)

响度是指人耳对声音强弱的主观感受

它不仅与声音的物理属性有关,还与人耳的感知特性有关。

响度的主观感受取决于多个因素,包括声压级(Sound Pressure Level, SPL)、频率时间等。

声压级

声压级是声音强度的一个物理量,通常以分贝(dB)为单位。

声压级越高,响度感知通常越大。

频率

人耳对不同频率的声音敏感度不同。

一般来说,人耳对1kHz到4kHz之间的声音最为敏感。

同样声压级的声音,在这个频率范围内会会被感知为更响。

时间

持续时间对响度感知也有影响。

持续时间较短的声音可能会被感知为不如等声压级的长时间声音响。

人耳的非线性特征

人耳的响度感知是非线性的。

这意味着响度的增加与声压级的增加不是简单的线性关系。

通常使用等响曲线(Fletcher-Munson曲线)来描述这一特性,这些曲线显示了人耳在不同频率下对相对响度的感知。

img

频谱

频谱就是频域图像

频域

可以把某一时刻的声波拆分成一系列不同频率的正弦波,

频域关注的就是每个频率的正弦波的振幅(或者相位

时频谱

Time-Frequency Spectrum

一个用来表示信号在时域和频域属性的工具,它能在同时考虑时间和频率的情况下分析信号。

如何看时频图

音频遮掩效应

功率谱 (Power Spectrum)

什么是功率?

在信号处理中,功率通常表示信号的能量。

对于一个频率成分,功率通常是该频率成分振幅的平方

什么是功率谱?

功率谱是描述信号在不同频率功率分布的图像或函数。

它揭示了信号的频率成分及对应的能量大小。

功率谱通常用来分析信号的频率特性,比如找出信号中的主要频率成分、噪声特性等

如何计算功率谱?

  1. 对信号做傅里叶变换:对时域信号进行傅里叶变换,得到频域表示。

\[X(f)=F[X(t)] \]

  1. 计算功率谱密度:将傅里叶变换结果的振幅平方来计算功率谱密度(Power Spectral Density)。

\[P(f)={|X(f)|}^2 \]

  1. 归一化:有时需要对功率谱进行归一化处理,便于比较不同信号的功率谱。

梅尔频谱

梅尔刻度

梅尔刻度(mel scale)是一种基于频率定义的非线性刻度单位,目的是表示人耳对音高(pitch)等距变化的感官。

梅尔刻度与线性的频率刻度────赫兹(Hz)之间可以进行近似的数学运算,用来表述声音频率与人类感知的关系。

频率f与梅尔刻度m的转换公式

\[m=2595\log_{10}{(1+\frac{f}{700})} \]

image-20240527110532224

梅尔刻度将1000Hz,且高于人耳听阈值40分贝的声音信号,定为1000mel的参考点。在频率500Hz以上时,随着频率的增加,人耳每感觉到等量的音高变化,所需要的频率变化愈来愈大。这导致在赫兹刻度500Hz往上的四个八度(一个八度即为两倍的频率),只对应梅尔刻度上的两个八度。Mel的名字来源于单词melody,表示这个刻度是基于音高比较而被创造的。

什么是梅尔频谱?

梅尔频谱(Mel Spectrum)是将声音信号的频谱通过梅尔刻度进行转换后得到的结果,更贴近人类的听觉感知特性。在语音识别、语音合成等领域有重要应用。

动态时间规整(DTW)

常见音频文件

  • wav
  • mp3
  • ogg
  • wma
  • flac

如何让计算机听懂语音?

语音信号是模拟量,通过采样量化编码可以将模拟量转换为数字量

采样率(Sample rate)

单位时间内从连续信号中采样的次数

奈奎斯特定理

只要采样频率大于等于采样信号中最高频率两倍,原信号既可无失真恢复

即 音频文件能达到的最高频率是其采样率的一半

与音频相关的库

librosa

[!NOTE]

旧版本只支持wav,可以使用ffmpeg将其他类型的音频文件转换成wav(新版本自带ffmpeg)

librosa.effects.trim // 消除音频前后静音部分

librosa.effects.split // 找到所有非静音的下标区间
librosa.effects.remix // 根据多个下标区间来截取音频,与split结合可以消除音频中所有的静音部分

audioread

wave

soundfile

scipy

pyaudio

与音频相关的领域

语音合成TTS

Text-To-Speech

简单实现:将处理的文本作为输入,输出对应音频的频谱,再由频谱转化成声音

作用:将文本转换成口语

用途:

  1. 虚拟助手
  2. 有声读物
  3. 无障碍

常见的TTS系统:

WaveNet Google
GPT

语音识别ASR

Automatic-Speech-Recognition

音乐生成

声音分析与处理

语音转换VC

voice conversion

posted @ 2024-06-09 23:52  Texley  阅读(406)  评论(0编辑  收藏  举报