音频信号处理入门

news/2024/10/8 0:24:58

普及知识

什么是信号分析?

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

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

为什么要分析信号?

  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

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

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

相关文章

7-1大作业集训总结心得

第二轮大作业比起第一轮大作业难度上升了不少,运用到的东西更新,更先进,所涉及的思维设计,逻辑框架也更难,还有其计算的设计也会很复杂很难。 第二轮大作业的第一次作业难度低,简单类型,因为其信息输入每一行固定的就是两个设备,都可以不用正则表达式光用split就能写出…

A successful Git branching model

A successful Git branching model https://nvie.com/posts/a-successful-git-branching-model/The main branches Supporting branches Feature branches Release branches Hotfix branches 出处:http://www.cnblogs.com/lightsong/本文版权归作者和博客园共有,欢迎转载,但…

第二次博客(PTA四到六次大作业)

第四次作业:7-4 答题判题程序-4 分数 87 作者 蔡轲 单位 南昌航空大学 设计实现答题程序,模拟一个小型的测试,要求输入题目信息、试卷信息、答题信息、学生信息、删除题目信息,根据输入题目信息中的标准答案判断答题的结果。本题在答题判题程序-3基础上新增的内容统一附加在…

第四到六次pta作业总结

前言 本次的总结是关于第四、五、六次pta编程作业的概括与分析,也是对自己近一个月java学习方面上的成 果收获与经验教训的回顾与反思。对于知识点的总结 第四次的作业主要还是在前三次的程序上进行迭代并添加了新的类来处理不同的数据,这也是主要的新的难点。在这次的作业中…

拓扑排序

topo,拓扑排序,我的第二篇文章哈哈拓扑排序 大家好,我是Weekoder! 接上次的二分查找,我又打算写一篇关于拓扑排序的文章! 本文涉及到的知识比较多,请确认已经掌握了以下知识:循环、输入、数组等基本语法STL vector容器的基本操作STL queue队列的基本操作图论基本知识其…

课程阶段性总结

前言: 学习Java到了第二个阶段了,通过这几个月的学习,我对Java的了解逐渐深入.但是随着深入学习,我发现编写代码所需要的知识越来越多,就需要我们不断学习更多的知识.通过这几次的大作业,让我成长的非常迅速,为我提供了宝贵的实践机会。我将对题目集的知识点、题量及难度进行简…

【攻防技术系列+权限维持】①

这种方式我觉得挺好用的,且不需要管理员权限,我们都知道lnk文件可以指向一个exe文件,相当于一个快捷方式,所以我们可以更改指向的文件,指向我们的exe文件,但是这样的话原本的lnk文件就没用了,所以我们可以CreateShortcut方法来创建lnk快捷方式,在不损坏其原始lnk文件的…

第四到第六次大作业总结

一,前言 第四次大作业:第四次大作业,对我而言,并没有新增多少内容,这也给了我更多的时间去审视之前的结构与设计,我将我原先的结构重新写了一遍,做了许多优化,比如说又多提取出了两个类,尽量去实现单一职责原则,但是,在主函数当中,仍然用了一些循环,或许我可以将这…