一、声音以具有诸如频率、带宽、分贝等参数的音频信号的形式表示,典型的音频信号可以表示为幅度和时间的函数。这些声音有多种格式,使计算机可以读取和分析它们,例如:mp3格式、WMA(Windows Media Audio)格式、wav(波形音频文件)格式。根据声波的特征,可把音频信息分类为规则音频和不规则声音。其中规则音频又可以分为语音,音乐和音效。规则音频是一种连续变化的模拟信号,可用一条连续的曲线来表示,称为声波。
声音的三个要素是音调,音强和音色,声波或正弦波有三个重要参数:频率、幅度和相位,这也就决定了音频信号的特征,语音识别等应用离不开音频特征的提取,Python有一些很棒的音频处理库,比如Librosa和PyAudio。
二、过零率:N为一帧的长度,n为对应的帧数,按帧处理。过零率体现的是信号过零点的次数,体现的是频率特性。因为需要过零点,所以信号处理之前需要中心化处理。
三、MFCC梅尔频率倒谱系数:声音信号是连续变化的,为了将连续变化信号简化,我们假设在一个短时间尺度内音频信号不发生改变。因此将信号以多个采样点集合成一个单位,称为"讯框"。一个讯框多为20-40毫秒,如果讯框长度更短,那每个讯框内的采样点将不足以做出可靠的频谱计算,但若长度太长,则每个讯框信号会变化太大。预强化的目的就是为了消除发声过程中,声带和嘴唇造成的效应,来补偿语音信号受到发音系统所压抑的高频部分。并且能突显高频的共振峰。由于信号在时域上的变化通常很难看出信号的特性,所以通常透过傅里叶变换将它变换成频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。由于能量频谱中还存在大量的无用信息,尤其人耳无法分辨高频的频率变化,因此让频谱通过梅尔滤波器。梅尔滤波器,也就是一组20个非线性分布的三角带通滤波器(Triangular Bandpass Filters),能求得每一个滤波器输出的对数能量。信号的Mel频率倒谱系数(MFCC)是一小组特征(通常约10-20),其简明地描述了频谱包络的整体形状,它模拟了人声的特征。
四、色度频率:是音乐音频有趣且强大的表示,其中整个频谱被投影到12个区间,代表音乐八度音的12个不同的半音(或色度)。
五、代码
import librosa
x, sr = librosa.load(r'E:\pythonProject\3 yinping\1.wav')
#print(type(x), type(sr)) #将音频时间序列作为numpy数组返回,默认采样率(sr)为22KHZ
#print(x.shape, sr)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
#时域波形
#plt.figure() # 将显示的所有图分辨率调高
matplotlib.rc("font",family='SimHei') # 显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 显示符号
time = np.arange(0, len(x)) * (1.0 / sr)
plt.plot(time/60, x)
plt.title("语音信号时域波形")
plt.xlabel("时长(分)")
plt.ylabel("振幅")
plt.show()
# #谱图:通过视觉表示频谱的频率、声音或其他信号,因为它们随时间变化。
import librosa.display
plt.figure(1)
X = librosa.stft(x) #短时傅里叶变换
Xdb = librosa.amplitude_to_db(abs(X))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
plt.colorbar()
plt.show()
plt.figure(2)
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='log') #所有动作都发生在频谱的底部,我们可以将频率轴转换为对数轴。
plt.colorbar()
plt.show()
# 每个音频信号都包含许多特征。
# 但是,我们必须提取与我们试图解决的问题相关的特征。
# 提取要使用它们进行分析的特征的过程称为特征提取
#1、过零率(Zero Crossing Rate,ZCR)是指在每帧中,语音信号通过零点(从正变为负或从负变为正)的次数。
n0 = 9000
n1 = 9100
plt.plot(x[n0:n1])
plt.grid()
plt.show()
zero_crossings = librosa.zero_crossings(x[n0:n1], pad=False)
print(sum(zero_crossings))
# #MFCC:信号的Mel频率倒谱系数(MFCC)是一小组特征(通常约10-20),其简明地描述了频谱包络的整体形状
mfccs = librosa.feature.mfcc(y=x, sr=sr,n_mfcc=20)
print(mfccs.shape) #计算了12846帧的20个MFCC
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.show()
#色度频率:音乐音频有趣且强大的表示,其中整个频谱被投影到12个区间,代表音乐八度音的12个不同的半音(或色度)
hop_length = 512
chromagram = librosa.feature.chroma_stft(x[10000:50000], sr=sr, hop_length=hop_length)
librosa.display. specshow(chromagram, x_axis='time', y_axis='chroma', hop_length=hop_length, cmap='coolwarm')
plt.show()
chromagram = librosa.feature.chroma_stft(x[300000:700000], sr=sr, hop_length=hop_length1)
librosa.display. specshow(chromagram, x_axis='time', y_axis='chroma', hop_length=hop_length, cmap='coolwarm')
plt.show()
#短时能量体现的是信号在不同时刻的强弱程度。
#傅里叶变换是为了把时域信号变换到频域,在频域对信号进行处理(如滤波)。
# 从频域也可以方便的看到此信号的一些信息,如不同频率的相位、幅度、能量。
#通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,
# 通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,
# 能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节
六、实验结果
1.时域图
2、频域图
3、过零率
4.MFCC图
5、整个音频文件色度频率图
文章来源地址https://www.toymoban.com/news/detail-719319.html
特定音频片段色度频率图
文章来源:https://www.toymoban.com/news/detail-719319.html
到了这里,关于python音频信号分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!