【基于pyAudioKits的Python音频信号处理(二)】数字音频信号的表示

pyAudioKits是基于librosa和其他库的强大Python音频工作流支持。

API速查手册

通过pip安装:

pip install pyAudioKits

本项目的GitHub地址,如果这个项目帮助到了你,请为它点上一颗star,谢谢你的支持!如果你在使用过程中有任何问题,请在评论区留言或在GitHub上提issue,我将持续对该项目进行维护。

import pyAudioKits.record

pyAudioKits提供了音频录制的api。首先运行底下这段代码,录制一段5s的音频。

record = pyAudioKits.record.record(44100,5)  #以44100的采样率录制5s音频
record.plot()    #绘制音频波形

'''
outputs:
********** Please speak in 5 seconds. 
********** End of recording.
'''

在这里插入图片描述

声音是由于介质的振动产生的,而振动的模式可以被描述为随机过程。音频信号的本质是随机过程 { X ( t ) , − ∞ < t < ∞ } \{X(t),-∞<t<∞\} { X(t),<t<}的一次实现 { x ( t ) , − ∞ < t < ∞ } \{x(t),-∞<t<∞\} { x(t),<t<}

现实世界中的音频信号是模拟的,具有取值连续、时间连续的、无限而非因果(现实世界的声音从开始录制前就存在,在停止录制后依然在持续)的特点。为了能够在计算机中表示和储存音频信号,在进行音频的录制过程中,进行了三个操作:

一是量化,所谓量化就是要用有限的比特数去表示 x ( t ) , ∀ t x(t),\forall t x(t),t的值,从而解决取值连续的问题。而在现代计算机系统中,float、double等数据类型已经可以让音频量化做到相当精细,造成的影响一般可以忽略。

二是采样,所谓采样,就是让时域被因子 T s T_s Ts归一化: { x [ n ] = x ( n T s ) , − ∞ < n < ∞ } \{x[n]=x(nT_s),-∞<n<∞\} { x[n]=x(nTs),<n<},这样我们就可以用一个分量个数有限的向量 x ⃗ n = x [ n ] \vec x_n=x[n] x n=x[n]来表示音频信号了。其中,每个 n n n代表向量的一个分量,分量之间采样的时间间隔为 T s T_s Ts T s T_s Ts称为采样周期,其倒数就是采样率。这等价于为模拟信号乘上一个间隔为 T s T_s Ts的冲激序列,实际做法就是每隔时间 T s T_s Ts对模拟信号 x ( t ) x(t) x(t)进行一次量化。得到的 x [ n ] x[n] x[n]是离散的数字信号

刚才我们录制音频使用的采样率为44100Hz,采样周期就是(1/44100)s。

record.sr    #显示采样率

'''
outputs:
44100
'''

采样率 1 / T s 1/T_s 1/Ts为44100Hz。

三是截断,比如录制音频的时长为5s,就相当于是只取 { x ( t ) , 0 ≤ t < 5 } \{x(t),0≤t<5\} { x(t),0t<5}再进行采样和量化得到 { x [ n ] , 0 ≤ n < 44100 ∗ 5 } \{x[n],0≤n<44100*5\} { x[n],0n<441005}(一般将开始采集模拟信号的时间 t t t设为0)。在表示的时候认为先截断得到 { x ( t ) , 0 ≤ t < T s N m a x } \{x(t),0≤t<T_sN_{max}\} { x(t),0t<TsNmax}再采样成 { x [ n ] , 0 ≤ n < N m a x } \{x[n],0≤n<N_{max}\} { x[n],0n<Nmax},还是先采样成 { x [ n ] , − ∞ ≤ n < ∞ } \{x[n],-∞≤n<∞\} { x[n],n<}再进行截断得到 { x [ n ] , 0 ≤ n < N m a x } \{x[n],0≤n<N_{max}\} { x[n],0n<Nmax}都是没有问题的。

len(record)	#获取音频样本数

'''
outputs:
220500
'''

音频样本数 N m a x N_{max} Nmax为220500。我们也可以以样本数为横轴画出波形图。

record.plot(xlabel="n")

在这里插入图片描述

record.getDuration()

'''
outputs:
5.0
'''

音频持续时间 T s N m a x T_sN_{max} TsNmax为5s,符合我们的表达式。

另外,截断也等价于首先采样得到 { x d [ n ] , − ∞ ≤ n < ∞ } \{x_d[n],-∞≤n<∞\} { xd[n],n<},再乘上一个矩形窗 w [ n ] = { 1 0 ≤ n < N m a x 0 o t h e r s w[n]=\begin{cases}1\quad 0≤n<N_{max}\\0\quad others\end{cases} w[n]={ 10n<Nmax0others得到 x [ n ] = { x d [ n ] 0 ≤ n < N m a x 0 o t h e r s x[n]=\begin{cases}x_d[n]\quad 0≤n<N_{max}\\0\quad others\end{cases} x[n]={ xd[n]0n<Nmax0others。这个操作称为加窗

经过量化、采样、截断后,音频信号就被表示为了能在计算机中储存的、以向量方式表示的数字音频信号,而采样率、持续时间等则是音频信号最基本的属性。

猜你喜欢

转载自blog.csdn.net/weixin_43441742/article/details/126093467