人工智能通识教程(理工版)课件 第9章 人工智能与声音信号处理_第1页
人工智能通识教程(理工版)课件 第9章 人工智能与声音信号处理_第2页
人工智能通识教程(理工版)课件 第9章 人工智能与声音信号处理_第3页
人工智能通识教程(理工版)课件 第9章 人工智能与声音信号处理_第4页
人工智能通识教程(理工版)课件 第9章 人工智能与声音信号处理_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

人工智能通识(理工科)北京科技大主要内容声音的时域分析声音的频域分析声音信号中频谱分析的实现9.1声音的时域分析从时间域上进行分析(以时间为自变量),提取信号的时域特征。时域波形:从整体上看语音信号的特征及参数均是随时间而变化的,但在较短时间范围内(10~30ms)其特性基本保持不变,即语音信号的“短时平稳性”对语音信号的分析应建立在“短时平稳”的基础上9.1.1声音的时域分析时域分析的意义:语音的分割、分类的辅助运算元音:具有较大的振幅和很强的准周期性浊辅音:具有较强的周期性,振幅较清辅音大清辅音:振幅很小,没有明显的周期性浊音:发音时声带振动的音(多数元音、浊辅音)清音:发音时声带不振动的音(清辅音)声音的时域分析——短时加窗处理时域分析的步骤语音分帧:将语音信号分为一段一段来分析其特征。每一段称为一帧,帧长一般取10~30ms。加窗操作窗函数声音的时域分析——短时加窗处理声音的时域分析时域分析的步骤定量分析:语音信号具有典型的时域特征,短时能量、短时平均能量、短时平均过零率等设某语音信号s(x),分帧处理后的第n帧语音信号为sn(x),每帧取N个采样点声音的时域分析短时平均能量256个采样点为一帧N=256苹果派反映语音的能量随时间缓慢变化无声有声短时能量清音浊音声母韵母主要应用:区分清音和浊音;有声段和无声段判定,声母和韵母分解以及连字分界声音的时域分析短时平均过零率粗略反映信号的频率特征,区分清音和浊音浊音段有较低的过零率,在清音段有较高的过零率苹果派清音p浊音ing浊音g清音p浊音ai清音uo短时平均过零率和短时能量结合判断语音起止点的位置,端点检测9.2声音的频域分析频域分析:从频率域上提取信息的频率特性频域分析的意义:分析信号的频率构成,发现主要成分频域是看待声音信号的另一个角度时域分析描述了信号随着时间的变化关系频域分析描述了信号的频率组成及结构举例:在一段谈话的声音信号中,男声通常对应低频成分,女声通常对应高频成分,可以通过滤波来区分出各个频段的声音,提取男声部分和女声部分。也可以提高男声信号的频率,即可将男声变为女声。声音的频域分析语音的频域分析信号是由哪些单一频率的信号合成的基本思想:将函数表示为一组正弦函数或余弦函数的线性组合在物理学、电子学、信号处理等众多领域有着广泛的应用频域分析方法连续周期性的语音信号:傅立叶级数连续非周期性的语音信号:傅立叶变换时域频域傅立叶变换声音的频域分析——傅立叶级数设有周期为T的连续周期信号f(t)满足狄利克雷条件,其傅立叶级数展开式为:

n次谐波的幅值ω1t2ω1t3ω1t……2次谐波n次谐波的相位基波3次谐波……n次谐波的角频率9.2.1声音的频域分析——傅立叶级数(a)波形图(b)幅度谱T=0.005ms1/T=200kHz1次谐波基频2次谐波3次谐波9.2.2声音的频域分析——语音信号的语谱图傅立叶级数及傅立叶变换:呈现一帧声音的频谱语谱图:在连续一段时间上对声音信号进行的频谱分析短时傅立叶变换的基本思想:用傅立叶变换分析每个分帧,得到每个分帧的局部频谱。所有分帧的局部频谱组合在一起,体现了信号频谱在时间上的变化过程。声音的频域分析——语音信号的语谱图语谱图:横轴表示时间,纵轴表示频率,每个点的灰度值大小反映了相应时刻和相应频率的能量。点越亮表示能量越高。扬琴演奏《渔光曲》乐曲《天空》tfff1000Hz10kHz1000Hz10kHz声音的频域分析——语音信号的语谱图语谱图上不同的颜色形成不同的纹路,称为声纹。声纹因人而异,可以利用声纹来鉴别不同的说话人,即声纹识别。9.3声音信号的时域分析案例AdobeAudition查看一个音频信号的时域波形图,音频时长7.073秒,采用44.1KHz采样率、32bit量化深度,通过AdobeAudition可直观显示其时域波形图,其中坐标X轴代表时间轴(秒),Y轴表示振幅强度(单位为dB)。声音信号的时域分析案例当采样频率从44100Hz降至16000Hz时,采样点间隔变大,导致高频声音成分细节无法被精确捕捉,波形包络因失真而改变形状;因此,根据奈奎斯特采样定理,为避免失真,采样频率需至少为声音信号最高频率的两倍,才能确保获取无失真的高质量音频信号。9.3.1对WAV音频文件的编程处理在Python中,对音频文件的处理一般包括以下步骤:首先通过wave库读取音频文件,获取采样频率、采样帧数、声道数和量化位数等关键信息;接着读取原始音频数据,并借助Numpy库将其转换为数组形式,为后续数据处理和可视化建立基础;最后,利用matplotlib.pyplot库绘制波形图,直观呈现音频信号特性。matplotlib库可视化展示wave库读取音频数据WAV类型声音文件numpy库形成数组Wave库读取声音数据过程(1)导入wave库(2)打开WAV音频文件(3)读取WAV音频文件基本参数信息importwave#导入wave库wr=wave.open("EngAudio.wav","rb")#打开WAV文件,返回wave_read对象wrnchannels=wr.getnchannels()#获得声道数sampwidth=wr.getsampwidth()#获得量化位数framerate=wr.getframerate()#获得采样频率nframes=wr.getnframes()#获得总采样点数#打印各个参数信息print("该音频信号的声道数为(个):"+str(nchannels))print("该音频信号的量化位数为(字节):"+str(sampwidth))print("该音频信号的采样频率为(Hz):"+str(framerate))print("该音频信号的总采样点数为(个):"+str(nframes))Wave库读取声音数据过程(4)读取WAV音频数据使用readframes(nframes)方法从音频文件中读取指定数量的帧,并返回一个字符串,其中nframes参数表示要读取的帧数。若要读取音频文件的所有帧数据,可以使用getnframes()方法获取总帧数,然后使用readframes()方法读取所有帧。importwave#导入wave库wr=wave.open("EngAudio.wav","rb")frames=wr.readframes(1)#读取第1帧的二进制音频数据print("第1帧的采样数据为:",frames)nframes=wr.getnframes()#获取总帧数frames=wr.readframes(nframes)#读取所有帧的数据9.3.2绘制单声道音频波形具体程序代码importwaveimportnumpyasnpimportmatplotlib.pyplotasplt#通过wave库读取音频文件数据

wr=wave.open("EngAudio_single.wav","rb")#打开文件

params=wr.getparams()#获取音频基本参数信息,返回元组,包括声道数,量化位数,采样频率和采样帧数。

nchannels,sampwidth,framerate,nframes=params[:4]str_data=wr.readframes(nframes)#获取音频所有帧的数据wr.close()#关闭WAV文件具体程序代码#读取的二进制数据转换为numpy数组ifsampwidth==2:#根据音频数据的量化位数设置数组元素类型dtype=16#对于16位采样数据,使用16作为数组元素目标类型

elifsampwidth==4:dtype=32#对于32位采样数据,使用32作为数组元素目标类型

wave_data=np.frombuffer(str_data,dtype=dtype)#将音频字符串数据转换为一维数组#通过matplotlib.pyplot库绘制音频波形图

time=np.arange(0,nframes)*(1.0/framerate)#计算时间轴,使用采样帧数和采样频率来#计算每个采样点时刻,作为绘图时X轴坐标。plt.figure(figsize=(10,4))#创建绘图区域plt.plot(time,wave_data)#绘制波形,X轴为time序列,Y轴是音频数据。plt.xlabel("Time(s)")#设置X轴标签为时间(秒)plt.ylabel("Amplitude")#设置Y轴标签为幅值plt.title("Single-ChannelAudioWaveform")#设置图标题plt.grid('on')#设置网格线显示,on表示显示网格线,off表示不显示网格线。plt.show()#显示图形

9.3.3绘制双声道音频的部分采样点波形从Audition上可以很清楚的看到在两个声道中各采样点取值和时间间隔#省略与前面程序相同的读取文件数据和转换成numpy数组部分的代码#通过matplotlib.pyplot库绘制音频波形图

time=np.arange(0,nframes)*(1/framerate)#计算时间轴的采样点时间序列start_time=5.5600end_time=5.5626start_index=int(start_time*framerate)#计算时间起点的帧编号end_index=int(end_time*framerate)#计算时间终点的帧编号left_range=left_channel[start_index:end_index]#用切片截取左声道波形数据数组

right_range=right_channel[start_index:end_index]#用切片截取右声道波形数据数组

time_range=time[start_index:end_index]#用切片截取时间序列数组#创建两个子图分别绘制左、右声道音频波形。plt.figure(figsize=(10,4))#设置绘图窗口大小

plt.subplot(2,1,1)#创建2行1列的子图,当前是第1个子图。time=np.arange(0,nframes)*(1.0/framerate)#计算时间轴作为横坐标plt.plot(time_range,left_range,marker='o',linestyle='-',markerfacecolor='red')

#在子图1上绘制左声道波形,实线类型,红色圆点标识采样点。plt.xlabel("Time(s)")#设置子图1的X轴标签为时间(秒)plt.ylabel("Amplitude")#设置设置子图1的Y轴标签为幅值plt.title("LeftChannelAudioWaveformbetween5.5600sand5.5626")#设置子图1标题plt.grid(True)#设置子图1网格线显示

plt.subplot(2,1,2)#当前是第2个子图

#在子图2上绘制右声道波形,绿色虚线类型,黄色三角标识采样点。plt.plot(time_range,right_range,c='green',marker='^',linestyle='--',markerfacecolor='yellow')plt.xlabel("Time(s)")#设置子图2的X轴标签为时间(秒)plt.ylabel("Amplitude")#设置子图2的Y轴标签为幅值plt.title("RightChannelAudioWaveformbetween5.5600sand5.5626")#设置子图2标题plt.grid(True)#设置子图2网格线显示

plt.tight_layout()#调整两个子图的间距plt.show()#显示图形

9.4声音信号的频域分析案例音频信号的傅里叶变换FFT变换

输入时域信号离散时间序列x[n]n=0、1、2、...N-1

输出频域信号X(k)k为各频率分量声音信号的频域分析编程步骤编程实现音频信号的频率分析与可视化,通常包括三个关键步骤:(1)读取音频文件在Python中,可根据需求选择不同库读取音频数据。scipy.io.wavfile模块提供便捷接口,直接将WAV文件转换为NumPy数组,适合快速分析。(2)进行傅里叶变换使用numpy.fft.fft()函数实现快速傅里叶变换(FFT)。(3)绘制频谱图使用matplotlib.pyplot模块绘制频谱图,通过频谱图,可以观察音频信号在频域的分布,从而理解音频信号特性。频谱图的X轴表示频率值,Y轴表示幅度值。9.4.1实现绘制单声道音频信号的频谱图绘制频谱图的程序流程图importnumpyasnpfromscipy.ioimportwavfileimportmatplotlib.pyplotasplt#读取声音文件sampling_freq,audio_data=wavfile.read("EngAudio_single.wav")#使用read()方法读取音频文件时返回两个值:sampling_freq是音频数据采样频率,audio_data是离散采样值numpy数组。已知该信号是单声道音频,所以返回的audio_data为一维数组。audio_data=audio_data/np.max(np.abs(audio_data))#每个数组元素除以数组最大值的绝对值进行数据的归一化。#进行快速傅里叶变换,计算幅度值和频率轴数据。

fft_audio=np.fft.fft(audio_data)#应用FFT变换N=len(audio_data)#获取音频样本数量

fft_audio=np.abs(fft_audio[:N//2])#计算幅度值,因为FFT是对称#只绘制FFT一半的频率分量,即正频率部分,因此用[:N//2]切片选取数组的前半部分fft_audio=fft_audio/np.max(fft_audio)#归一化最大幅值为1freq_axis=np.fft.fftfreq(N,1.0/sampling_freq)[:N//2]#使用fft.fftfreq()方法计算FFT各频率分量值,生成X轴各频率值。该方法第一个参数N是输入数据的长度;第二个参数是采样频率sampling_freq的倒数,调用np.fft.fftfreq(N,1.0/sampling_freq)生成长度为N的数组,其中包含了从0到采样频率的N个等间隔频率点。由于FFT是对称的,因此用[:N//2]切片选取数组的正频率部分。#绘制频谱图plt.figure(figsize=(15,5))plt.plot(freq_axis,fft_audio)plt.xlabel('Frequency(Hz)')plt.ylabel('Amplitude')plt.title('SpectrumofSingleChannelAudio')plt.grid(True)plt.show()9.4.2绘制单声道音频信号的分贝幅度谱在本程序中使用NumPy库中的log10()对数函数与abs()绝对值函数来实现分贝幅度谱的转换。由源程序实例得到FFT变换结果的数组幅度谱正频率部分fft_audio后,转换成分贝幅度谱的语句如下:dB_value=20*np.log10(np.abs(fft_audio+1e-10))9.5语谱图绘制语谱图通常使用短时傅里叶变换(Short-TimeFourierTransform,简称STFT)计算得出,STFT短时傅里叶变换的具体步骤:1)选择窗函数:窗函数用于抑制频谱分析中的频率泄漏现象。频率泄漏是指对信号进行截短后,时域不再无限长,导致频域能量不再完全集中在预期的频率点,而是会向相邻频率扩散。选择合适的窗函数能减少频谱泄漏,提升频谱分析精度。2)信号分割:将原始信号按照设定的窗口大小分割成一系列连续的、等长的帧,每帧包含特定数量的样本,相邻帧之间存在重叠部分。通过设置窗口重叠参数,来决定相邻窗口重叠的采样点数。3)应用傅里叶变换:针对每帧应用快速傅里叶变换FFT,获取该帧的频率组成。4)生成STFT结果:将所有帧的FFT结果组合起来,形成一个二维数组,该数组各列代表不同时间点的频谱,各行表示不同频率分量随时间的变化。这个二维数组就是STFT的结果。语谱图绘制程序实现下面是实现语谱图绘制的程序代码:fromscipy.ioimportwavfileimportnumpyasnpfromscipy.signalimportspectrogramimportmatplotlib.pyplotaspltsampling_freq,audio_data=wavfile.read("EngAudio.wav")#读取音频文件ifaudio_data.ndim>1:#确保音频数据是一维的,如果是立体声则取一个声道audio_data=audio_data[:,0]#进行窗函数和重叠设置

nperseg=256#设定窗口大小为256noverlap=128#设定重叠参数为128nfft=512#设定实际数据段长度为512#计算语谱图

f,t,Sxx=spectrogram(audio_data,sampling_freq,nperseg=nperseg,noverlap=noverlap,nfft=nfft)#返回频率轴f、时间轴t以及不同时间和频率下的能量矩阵Sxx的值。Sxx_db=10*np.log10(Sxx+1e-10)#功率谱换成dB单位,并添加极小值1e-10语谱图绘制程序实现#绘制语谱图

plt.figure(figsize=(15,8))plt.pcolormesh(t,f,Sxx_db,shading='gouraud')#gouraud插值,使得图像更加平滑plt.xlabel('Time(s)')plt.ylabel('Frequency(Hz)')plt.colorbar(label='Power/Frequency(dB/Hz)')#添加颜色条和标签以显示颜色与能量的关系plt.title('AudioSpectrogram')plt.tight_layout

温馨提示

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

评论

0/150

提交评论