大数据采集与预处理技术(微课版)课件 8.2语音直播数据采集-语音预处理scipy_第1页
大数据采集与预处理技术(微课版)课件 8.2语音直播数据采集-语音预处理scipy_第2页
大数据采集与预处理技术(微课版)课件 8.2语音直播数据采集-语音预处理scipy_第3页
大数据采集与预处理技术(微课版)课件 8.2语音直播数据采集-语音预处理scipy_第4页
大数据采集与预处理技术(微课版)课件 8.2语音直播数据采集-语音预处理scipy_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据采集与预处理技术*

*项目三语音直播数据采集与预处理序号软件配置要求1OBS最新版本2Librosa等最新版本一、项目目标:1、根据应用需求确定语音数据采集方法,并完成语音数据采集;2、对采集的语音数据进行去噪、归一化、采样频率转换、语音特征提取、静音去除、语音切分、信号增强等预处理操作;3、根据训练模型要求完成语音数据文本转录、音频分割、标签标注等,为不同模型准备训练数据。二、环境要求:三、Scipy语音预处理(1)Scipy简介

Scipy是一个强大的科学计算库,提供了各种信号处理功能,包括滤波器设计、卷积、傅里叶变换等。适合做更深入的信号分析,如低通滤波、去噪等。SciPy偏向于低级别的处理,需要配合其他库(如numpy)直接对音频数据进行计算,适合进行数据分析、特征提取等任务,主要用于科研、数据处理或机器学习场景下的音频数据分析。(2)安装pipinstallscipy(3)音频信号的加载和保存fromscipy.ioimportwavfile#读取音频文件sample_rate,data=wavfile.read('example.wav')#保存音频文件wavfile.write('output.wav',sample_rate,data)(4)滤波SciPy的signal模块支持多种滤波器(如低通、高通、带通滤波器),可用于去除噪声、频带选择等。创建并应用数字滤波器(Butterworth、Chebyshev等),支持FIR和IIR滤波。适用于消除音频信号中的噪声、隔离特定频段(如语音或乐器频段),函数如下:scipy.signal.butter(N,Wn,btype='low',analog=False,output='ba',fs=None)参数:N(int):滤波器的阶数;Wn(array_like):截止频率,对于低通和高通滤波器是标量,对于带通和带阻滤波器,长度为2的序列。数字滤波器,相对于奈奎斯特频率(fs/2)归一化,范围[0,1]。对于模拟滤波器表示角频率(如rad/s);btype(str,optional):滤波器类型,‘low’:低通滤波器(默认),‘high’:高通滤波器,‘band’:带通滤波器,‘bandstop’:带阻滤波器;analog(bool,optional):False:返回数字滤波器(默认),True:返回模拟滤波器;output(str,optional):输出类型,‘ba’:返回分子/分母系数(默认),‘zpk’:返回零点、极点、增益,‘sos’:返回二阶节表示;fs(float,optional):采样频率(数字滤波器时使用);返回值:根据output参数的不同,返回不同形式的滤波器系数: ‘ba’(默认):(b,a)分子和分母多项式;‘zpk’:(z,p,k)零点、极点和系统增益;‘sos’:二阶节表示。(4)滤波#读取音频文件sample_rate,data=wavfile.read('audio/example1.wav')#设计一个4阶低通Butterworth数字滤波器,截止频率为0.2倍奈奎斯特频率b,a=signal.butter(4,0.2)#用于存储处理后的数据filtered_data=numpy.zeros_like(data)#处理多声道(如果是立体声)iflen(data.shape)==2:#如果是立体声

forchinrange(data.shape[1]):#处理每个声道

filtered_data[:,ch]=signal.filtfilt(b,a,data[:,ch])else:filtered_data=signal.filtfilt(b,a,data)#保存音频文件wavfile.write('audio/output.wav',sample_rate,filtered_data)(5)傅里叶变换(频谱分析)SciPy的fft模块支持快速傅里叶变换(FFT),用于将时域信号转换到频域,用于频谱分析。用于计算音频信号的频谱,显示各个频率成分的幅度,适用于音频特征提取、频谱可视化、音调检测等。fromscipy.fftimportfft,fftfreqimportnumpyasnp#计算傅里叶变换N=len(data)yf=fft(data)xf=fftfreq(N,1/sample_rate)#可视化频谱importmatplotlib.pyplotaspltplt.plot(xf,np.abs(yf))plt.xlabel("Frequency(Hz)")plt.ylabel("Amplitude")plt.show()(6)卷积卷积可用于模拟混响、延迟等效果,适用于一些简单的音效设计。通过卷积操作对信号进行时域处理,适合基础的混响或延迟模拟。适用于音频混响、声学效果模拟。#创建一个简单的脉冲响应impulse_response=np.zeros(500)impulse_response[0]=1impulse_response[50]=0.5impulse_response[100]=0.3#分别处理左右声道left_channel=data[:,0]right_channel=data[:,1]#对每个声道进行卷积convolved_left=signal.convolve(left_channel,impulse_response,mode='same')convolved_right=signal.convolve(right_channel,impulse_response,mode='same')#合并处理后的声道convolved_stereo=np.column_stack((convolved_left,convolved_right))#保存音频文件wavfile.write('audio/output_conv.wav',sample_rate,convolved_stereo)(7)窗函数(短时傅里叶变换、频率分辨率)SciPy的signal模块支持窗函数(如汉宁窗、海明窗等),可以用于短时傅里叶变换或信号的平滑处理(“滤镜”,平滑开启结束),用于创建和应用窗函数,优化频谱分辨率,减少频谱泄漏,适用短时频谱分析、动态信号的特征提取。短时傅里叶变换STFT,就像音乐的“心电图”:把声音切成小段时间片段,对每一段做傅里叶变换,最后得到一张“时间-频率-能量”的热力图,能精确显示每个频率的声音(如C调、G调等)什么时候开始结束。用于音乐频谱可视化,语音特征提取。普通傅里叶变换,能把混杂在一起的不同频率信号(比如一首歌)拆解成单独的音高成分(如C调、G调等),每个音高分别有多大声。f,t,Zxx=signal.stft(x, #输入信号(单声道/多声道)

fs=1.0, #采样率

window='hann', #窗函数(默认汉宁窗)

nperseg=256, #每段长度

noverlap=None, #重叠样本数(默认50%)

nfft=None, #FFT点数(默认=nperseg)

detrend=False, #是否去趋势

return_onesided=True, #是否返回单边谱

boundary='zeros', #边界处理

padded=True #是否填充)(7)窗函数importmatplotlib.pyplotasplt#对称窗(默认,适合滤波器设计)sym_win=signal.windows.hann(64,sym=True)#周期窗(适合频谱分析)per_win=signal.windows.hann(64,sym=False)plt.figure(figsize=(10,4))plt.plot(sym_win,label='SymmetricWindow')plt.plot(per_win,label='PeriodicWindow')plt.title('ComparisonofSymmetricandPeriodicHanningWindows')plt.legend()plt.grid(True)plt.show()(7)窗函数#应用窗口函数到信号,非立体音直接使用汉宁窗进行傅里叶变换STFTiflen(data.shape)==1:f,t,Zxx=signal.stft(data,fs=sample_rate,window='hann',nperseg=128)plt.figure(figsize=(10,6))plt.pcolormesh(t,f,np.abs(Zxx),shading='gouraud')plt.ylabel('Frequency[Hz]')plt.xlabel('Time[sec]')plt.colorbar(label='Magnitude')plt.show()#否则对左右声道分别加窗处理else:#获取左右声道

left_ch=data[:,0]right_ch=data[:,1]#对左右声道分别计算STFTf_left,t_left,Z_left=signal.stft(left_ch,fs=sample_rate,window='hann',nperseg=128)f_right,t_right,Z_right=signal.stft(right_ch,fs=sample_rate,window='hann',nperseg=128)(7)窗函数#绘制左右声道频谱

plt.figure(figsize=(15,6))plt.subplot(1,2,1)plt.pcolormesh(t_left,f_left,np.abs(Z_left),shading='gouraud')plt.title('LeftChannelSTFT(HanningWindow)')plt.ylabel('Frequency[Hz]')plt.xlabel('Time[sec]')plt.colorbar()plt.subplot(1,2,2)plt.pcolormesh(t_right,f_right,np.abs(Z_right),shading='gouraud')plt.title('RightChannelSTFT(HanningWindow)')plt.ylabel('Frequency[Hz]')plt.xlabel('Time[sec]')plt.colorbar()(8)插值和采样率转换SciPy的interpolate模块可以对音频信号做插值处理,适合于改变采样率。通过插值对音频信号进行重采样,以改变采样率,适用于音频的上采样或下采样,兼容不同设备的采样率。重采样就是改变音频的“时间刻度”,就像把一首歌从“慢速播放”调成“快速播放”,或者反过来。但和单纯变速不同,重采样要保证音高不变,只改变声音的“密度”。#读取音频文件original_rate,audio_data=wavfile.read('audio/example1.wav')target_rate=48000#例如从44.1kHz转到48kHz#创建时间轴original_length=len(audio_data)original_time=np.arange(original_length)/original_rate#创建插值函数interp_func=erp1d(original_time,audio_data,kind='cubic',#立方插值质

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论