1、项目5初识语音数据加工处理加载并预处理语音数据1实训目标(1) 掌握IibroSa库读取和处理语音数据的方法。(2) 掌握Iibrosa和Matplotlib库的数据可视化展示方法。(3) 掌握使用effects模块、UtiI模块实现移除静音、分帧和重叠的方法。2实训环境环境版本说明Windows1064电脑操作系统Python3.8.5Python语言版本pandas1.3.0主要用于数据读取、清洗等操作NumPy1.21.6主要用于Python中的数值计算jieba0.42.1主要用于文本分词Gensim4.2.0主要用于检索文本、计算文本相似度、训练词向量、建模主题等Matplotlib
2、3.3.0主要用于数据可视化PaddlePaddle2.4.2是一个深度学习框架,提供了高效的计算框架和优化算法PaddleSpcech1.2.0主要用于语音和音频中的各种关键任务的开发scikit-learn1.0.2广泛地用于统计分析和机器学习建模等数据科学领域Librosa0.8.1主要用于分析一般的音频信号,是一个非常强大的Python语音信号处理的第三方库NLTK3.5是一个常用的自然语言处理工具包,可用于文本处理、语义分析、词性标注等SciPy1.7.3是一个科学计算工具包,可用于数学、科学、工程学等领域pyttsx32.9.0主要用于将文本转换成语音3实训说明音频数据在当今数字世
3、界中占据着举足轻重的地位,具有极高的价值。众多不同规模和领域的组织在数字世界中持续生成和积累各式各样的音频数据,如电话通话、语音助手互动、会议录音、播客等。这些音频数据包含了丰富的信息和潜在价值,因此音频数据分析与处理在数据科学领域中显得尤为重要。然而,音频数据的原始形式通常是非结构化、杂乱且复杂的,这使得从中提取有意义的洞察和模式变得困难。因此,在对音频数据进行分析之前,对其进行读取和预处理变得尤为必要。本任务的数据读取与预处理流程主要包括读取数据、数据降噪、移除静音、音量处理、分帧和重叠,具体过程如图5-1所示。4实训步骤4.1音频数据读取并可视化使用的示例音频数据为“file.wav,如
4、图5-2所示。file.wav图5-2示例音频数据可以使用PythOn中IibroSa库的IOad函数读取音频数据。读取音频文件,如代码5-1所7Jo代码5-1读取音频文件importIibrosaimportlibrosa.displayimportnumpyasnpimportmatplotlib.pyplotaspitplt.rcParamsfont.sans-serif=1SimHeiplt.rcParams,axes.unicode-minus,=Falseaudio_file=.datafle.wav,# 加载音频文件# 参数sr=None表示保持原始音频文件的采样率# audio
5、data是一个包含音频数据的NumPy数组# sampling_rate是音频数据的采样率,单位是Hz(赫兹)audio_data,sampling_rate=librosa.load(audio_flle,sr=None)PrintC包含音频数据的NumPy数组:IaUdiO_data)PrintC音频数据的采样率:,sampling_rate)在代码5-1中,使用IibrOSa库中的IOad函数进行音频数据读取,常用参数说明如表5-1所示。表5-1load函数的常用参数说明参数名称参数说明audio_file接收str,表示要加载的音频文件的路径。无默认值sr接收int,表示采样率。默认
6、为None经过运行代码5-1,得到音频数据相关信息。包含音频数据的NumPy数组:-0.00138855-0.00363159-0.00479126.-0.02793884-0.01925659-0.01679993音频数据的采样率:8000通过基本信息输出,可以得知音频数据的采样率为8000Hz。为了更直观地观察音频数据,对音频数据进行可视化,如代码5-2所示。代码5-2原始音频数据可视化# 创建一个新的Matplotlib图形plt.figure()# 使用Iibrosadisplaywaveshow函数显示音频波形# 这个函数将音频数据作为输入,并根据采样率在时间轴上显示波形libros
7、a.display.waveshow(audio_data,sr=sampling_rate)# 设置图形的标题、X轴标签和Y轴标签plt.title(原始音频波形,fontsize=14)plt.xlabel(时间(秒),fontsize=14)pltylabel(振幅;fontsize=,14,)# 显示图形plt.show()运行代码5-2,得到原始音频数据的波形,如图5-3所示。图5-3原始音频数据的波形从图5-3中可以看出,原始音频数据是由一组震荡的声波组成的。4.2音频数据预处理在进行音频数据分析时,常面临诸如音量过小、过大和噪声等问题。因此,在对音频数据进行分析之前,需要对其进行
8、预处理。音频预处理的核心目标是将非结构化且混乱的音频数据转换为干净、结构化和机器可读的格式,从而可以更有效地进行分析和建模。预处理可以消除噪音和不相关的信息。音频数据可能包含自然噪音、电磁噪音、操作噪音、污染噪音和信号损失噪音等多种噪音,这指的是可能对分析结果产生负面影响的不相关或冗余信息。降噪、去除静音段等预处理技术有助于消除不必要的元素,仅保留最相关的信息。预处理还可以通过音量标准化、分帧和重叠技术来增强音频数据。音频数据预处理流程如图5-4所示。图5-4音频数据预处理流程1.音频数据降噪音频数据降噪在音频处理和分析中具有重要意义。降噪的主要目的是减少或消除音频信号中的背景噪音、干扰和其他
9、不需要的声音成分,从而提高音频质量。在许多实际应用中,如语音识别、语音通信、音乐处理和环境声音分析,音频降噪都具有关键作用。音频数据降噪可以使用Iibrosa库中decompose模块的nn_filter函数对音频数据进行降噪。nn-filter函数是用于神经网络滤波的函数,可以用于滤除音频信号中的冗余信息。音频数据降噪如代码5-3所示。代码5-3音频数据降噪# 代码5-3音频数据降噪# 加载音频文件audio_file=,.datafile.wav,y,sr=librosa.load(audio_file)# 计算音频文件的Mel频谱mel_spectrogram=librosa.featu
10、re.melspcctrogram(y,sr=sr)# 使用nn_filter函数进行神经网络滤波filtered_mel_spectrogram=librosa.decompose.nn_filter(mel_spectrogram,aggregate=np.median)filtered_audio=librosa.feature.inverse.mel_to_audio(filtered_mel_spectrogram,sr=sr)# 绘制原始波形和降噪后的波形plt.figure(figsize=(15,6)plt.subplot(2,1,1)librosa.display.waves
11、how(y,sr=sr)PILtitleC原始波形)pk.xlim(0,2)pltxlabel(时间(秒),fontsize=14)plt.subplot(2,1,2)librosa.display.waveshow(filtercd_audio,sr=sr)plt.titleC降噪后的波形,)plt.xlim(2)plt.xlabel(时间(秒),fontsize=14)plt.tightjayout()plt.show()在代码5-3中,nn_filter函数的常用参数说明如表5-2所示。表5-2nn_filter函数的常用参数说明参数名称参数说明S接收NUmPy,表示一个音频特征的时间序
12、列数据。无默认值aggregate接收函数,表示对特征向量求平均值。默认为np.mean运行代码5-3,得到原始音频数据与降噪数据的波形结果如图5-5所示。除始波形图5-5原始音频数据与降噪数据的波形从图5-5中可以看出,降噪后的波形有明显变化,相较原始数据波形更加明显。2.移除静音部分移除音频数据中的静音部分是一种常见的数字信号处理技术,旨在从语音信号中识别出有声部分的起始点和结束点,即去除静音部分。移除静音部分可以使用Iibrosa库中effects模块的trim函数对音频数据进行裁剪。trim函数的目的是移除音频信号中静音部分。移除音频数据中的静音部分,如代码5-4所示。代码5-4移除音
13、频数据中的静音部分# 对音频数据进行裁剪,去除静音部分# filtered_audio:降噪的原始音频数据# top_db:静音阈值,小于此阈值的部分将被视为静音并被裁剪audio_data_trimmed,_=librosa.effects.trim(filtered_audio,top_db=20)# 可视化原始音频数据plt.figure(figsize=(14,5)librosa.display.waveshow(audio_data,sr=sampling_rate)PILtitle(,原始音频数据,)plt.xlabel(时间(秒)PILyIabe1(振幅,)pk.xlim(0,2
14、)plt.show()# 可视化裁剪后的音频数据pltfigure(figsize=(14,5)librosa.display.waveshow(audio_data_trimmed,sr=sampling_rate)PlLtitIec裁剪后的音频数据)plt.xlabel(时间(秒)PILylabe1(振幅,)plt.xlim(O,2)plt.show()在代码5-4中,trim函数的常用参数说明如表5-3所示。表5-3trim函数的常用参数说明参数名称参数说明audio_data接收数组,表示输入音频信号。无默认值top_db接收float,表示被认为是静音的最大分贝值(单位:分贝)。默认
15、为20运行代码5-4,得到降噪后的原始音频数据与移除静音部分数据的波形结果如图5-6所/Jo时间(秒)图5-6原始音频数据与移除静音部分音频数据的波形从图5-6中可以看出,静音处理后的波形长度减少,静音部分己经被裁剪掉。3.音量处理音量处理在音频处理和分析中具有重要意义。音量处理的主要目的是调整音频信号的响度,使其适应不同的场景和需求。在许多实际应用中,音量处理都具有关键作用,可以提高音频信号的清晰度和可理解性。音量处理使用将音频数据的NumPy数组乘以增益系数的方式实现。将音频信号乘以增益系数可以实现音量的增大或减小。音量处理过程如代码5-5所示。代码5-5音量处理gain=1.5#增加音量
16、通过将音频数据乘以增益因子来提高音量audio_data_louder=audio_data_trimmed*gain#可视化原始音频数据和调整后的音频数据plt.figure(figsize=(14,5)librosa.display.waveshow(audio_data_trimmed,sr=sampling_rate)PILtitIe(原始音频数据,)PItXlabe1(时间(秒)PlLylabe1(振幅)plt.ylim(-1.5,1.5)plt.show()plt.figure(figsize=(14,5)librosa.display.waveshow(audio_data_l
17、ouder,sr=sampling-rate)plttiUeC调整后的音频数据)PlLxlabelC时间(秒力pltylabelC振幅)plt.ylim(-1.5,1.5)plt.show()运行代码5-5,得到原始音频数据与增强数据的波形对比,如图5-7所示。15调整后的音频数据时间(秒)图5-7原始音频数据与增强数据的波形从图5-7中可以看出,经过音频处理的数据,声波的振幅有明显的增强。4.分帧和重叠分帧和重叠在音频信号处理中具有重要意义,它们通常用于将连续的音频信号切分为较短的片段,以便在局部范围内进行分析。音频信号通常是非平稳的,即信号特性随时间而变化。通过分帧和重叠技术,可以将非平稳
18、信号分解为局部近似平稳的子信号,从而简化分析过程并提高结果的可靠性。总之,分帧和重叠技术在音频信号处理中具有重要意义,它们有助于捕捉音频信号的局部特征、降低计算复杂性、提高分析质量和连续性,并简化非平稳信号的处理。分帧和重叠使用IibroSa库中util模块的frame函数对音频数据进行处理。frame函数是用于将音频数据分成多个短时帧的函数。它的作用是将一个长时间的音频信号分割成多个小的时间段,每个时间段称为一个帧。分帧和重叠过程如代码5-6所示。代码5-6分帧和重叠framejength=int(sampling_rate*0.025)#25ms的帧长hopjength=int(sampl
19、ing_rate*0.010)#IOms的跳跃长度#将调整后的音频数据分为帧,每帧的长度为25ms,帧之间的跳跃长度为IOmSframes=librosa.util.frame(audio_data_louder,frame_length=frame_length,hop_length=hop_length)#可视化音频数据的帧plt.figure(figsize=(12,6)pit.imshow(frames,aspect=auto,origin=lowercmap-viridis)plt.titleC音频数据帧热力图plt.xlabelC帧索弓IPlLylabelC采样点)plt.colo
20、rbar()plt.show()在代码5-6中,frame函数的常用参数说明如表5-4所示。岐世咪17515012517550250音频数据帧热力图1500帧索引表5-4frame函数的常用参数说明参数名称参数说明audio_data_louder接收数组,表示输入音频信号。无默认值frame_length接收int,表示帧的长度。无默认值hop_length接收int,表示相邻帧之间的跳跃长度。无默认值运行代码5-6,得到音频数据帧热力图,如图5-8所示。图5-8音频数据帧热力图音频数据帧热力图是一种可视化工具,用于表示音频信号在时间和频率域的能量分布情况。它通常是一个二维矩阵,其中,横轴表
21、示帧索引代表时间,纵轴表示采样点代表频率,矩阵中的每个点则表示在某个时间和频率上的能量值。热力图的颜色通常用来表示不同能量级别,低能量值通常用深色表示,高能量值则用浅色表示。这种颜色编码方案可以帮助用户快速识别音频信号中哪些时间段和频率段具有较高的能量,从而帮助用户更好地分析音频信号。在分帧和重叠处理中,可以将每个频域片段叠加起来,并使用对数幅度进行放大以生成音频热力图。重叠处理时,热力图中的每个像素通常对应多个频域片段,这有助于提高频率分辨率并减少频率泄漏的影响。5实训小结技术点自评达标未达标能够通过Iibrosa库读取音频数据,并对音频数据进行处理能够使用可视化库绘制音频数据波形图能够使用effects模块、Util模块实现静音移除、分帧和重叠心得体会(如遇到的问题及解决方法、存在的不足之处等):