没有甜甜的未来不是我想要的未来|

Texley

园龄:3年3个月粉丝:5关注:5

音频信号处理入门

普及知识

什么是信号分析?

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

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

为什么要分析信号?

  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=LO

帧数F的计算公式为:

F=NOH

公式推导

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

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

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

  1. 初步分析:

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

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

    为了覆盖整个信号,我们希望最后一个帧的起始位置满足:(k1)H+LN

    也就是说,k必须满足:kNLH+1

  3. 得出总帧数计算公式

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

    F=NLH+1

    由于H=LO​,化简得:

    F=NOH

幅值包络(Amplitude Envelope)

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

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

时域与频域的关系

相位与振幅

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

任意时刻的相位:ϕ

任意时刻的幅度:sinϕ×A

在这里插入图片描述

频域的基本单元

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

在这里插入图片描述

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

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

在这里插入图片描述

任意波形的FFT

在这里插入图片描述

相位差

=(/)×2π

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

在这里插入图片描述

频谱图(Spectrogram)

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

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

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

语谱图

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

在这里插入图片描述

在这里插入图片描述

时频域分析

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

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

时域分析方法

幅值包络法

学习代码

其余方法待续

时频域分析方法

短时傅里叶变换(STFT)

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

小波变换(WT)

Wigner分布

声音

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

角频率

角频率与频率的关系:

ω=2πf

简单理解:

ω表示rad/s,f表示完成多少次/s,那么每转完一圈,也就是走了2πrad,就完成了一次。因此

/s2π=/s

ω2π=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=2595log10(1+f700)

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

本文作者:Texley

本文链接:https://www.cnblogs.com/texley/p/18240279

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Texley  阅读(662)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.