(一)提取二维频谱中某个频率位置的能量值
# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚
本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;
# 然后在对象列表窗口选定并编辑(Edit)一个二维频谱对象(Spectrum),再在
二维频谱对象上将游标定位到您需要测量其能量的频率位置;
# 然后按脚本编辑器的Run 菜单下的Run 按钮;
# 执行结束后,您将在弹出的信息窗口中看见该频率位置的能量值。
clearinfo
spectrumN$=selected$("Spectrum")
editor Spectrum 'spectrumN$'
pitchV=Get cursor
endeditor
binNum=Get number of bins
binW=Get bin width
binN=Get bin number 'pitchV'
binNQ=floor(binN)
binNH=ceiling(binN)
pitchQ=Get frequency from 'binNQ'
pitchH=Get frequency from 'binNH'
if pitchH-pitchQ>0
rV=Get real value 'binNQ'
rV=rV
iV=Get imaginary value 'binNQ'
iV=iV
shengYaQ=(rV*rV+iV*iV)^0.5
dBQ=20*log10(shengYaQ/2*10^5)+15
rV=Get real value 'binNH'
rV=rV
iV=Get imaginary value 'binNH'
iV=iV
shengYaH=(rV*rV+iV*iV)^0.5
dBH=20*log10(shengYaH/2*10^5)+15
juli=(pitchV-pitchQ)/(pitchH-pitchQ)
dB=dBQ+(dBH-dBQ)*juli
endif
if pitchH-pitchQ=0
rV=Get real value 'binN'
rV=rV
iV=Get imaginary value 'binN'
iV=iV
shengYa=(rV*rV+iV*iV)^0.5
dB=20*log10(shengYa/2*10^5)+15
endif
print 'dB'
getsavefilename
(二)提取二维频谱中前n 个谐波峰的能量值
# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚
本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;
# 然后在对象列表窗口选定并编辑(Edit)一个二维频谱对象(Spectrum),并测
量其第10 个谐波的中心频率,再除以10 以得到这个时点的基频值;
# 然后按脚本编辑器的Run 菜单下的Run 按钮,接下来在弹出的对话窗口
里输入您刚才测定的基频值和需要测量的谐波峰数目n;
# 执行结束后,您将在弹出的信息窗口中看见n 个谐波峰位置的能量值。
form 对话框
positive Frequency_Zero_(Hz) 100
positive The_Number_of_harmonics 10
endform
fZero=frequency_Zero
fNum=the_Number_of_harmonics
print 'fNum'
clearinfo
for j from 1 to fNum
pitchV=fZero*j
binNum=Get number of bins
binW=Get bin width
binN=Get bin number 'pitchV'
binNQ=floor(binN)
binNH=ceiling(binN)
pitchQ=Get frequency from 'binNQ'
pitchH=Get frequency from 'binNH'
if pitchH-pitchQ>0
rV=Get real value 'binNQ'
rV=rV
iV=Get imaginary value 'binNQ'
iV=iV
shengYaQ=(rV*rV+iV*iV)^0.5
dBQ=20*log10(shengYaQ/2*10^5)+15
rV=Get real value 'binNH'
rV=rV
iV=Get imaginary value 'binNH'
iV=iV
shengYaH=(rV*rV+iV*iV)^0.5
dBH=20*log10(shengYaH/2*10^5)+15
juli=(pitchV-pitchQ)/(pitchH-pitchQ)
dB=dBQ+(dBH-dBQ)*juli
endif
if pitchH-pitchQ=0
rV=Get real value 'binN'
rV=rV
iV=Get imaginary value 'binN'
iV=iV
shengYa=(rV*rV+iV*iV)^0.5
dB=20*log10(shengYa/2*10^5)+15
endif
print 'dB' 'newline$'
endfor
(三)提取二维频谱中各频率成分的能量值
# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚
本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;
# 然后在对象列表窗口中选定一个二维频谱对象(Spectrum);
# 然后按脚本编辑器的Run 菜单下的Run 按钮;
# 执行结束后,您将在"C:/"文件中得到各频率成分的能量值。
saveFileName$= "c:/"
filedelete 'saveFileName$'
binNum=Get number of bins
binW=Get bin width
fileappend 'saveFileName$' Hz
fileappend 'saveFileName$' ,
fileappend 'saveFileName$' dB
fileappend 'saveFileName$' 'newline$'
for i from 1 to binNum
rV=Get real value 'i'
iV=Get imaginary value 'i'
shengYa=(rV*rV+iV*iV)^0.5
dB=20*log10(shengYa/2*10^5)+15
pitchV=(i-1)*binW
fileappend 'saveFileName$' 'pitchV'
fileappend 'saveFileName$' ,
fileappend 'saveFileName$' 'dB'
fileappend 'saveFileName$' 'newline$'
endfor
endfor
(四)将共振峰频率数据提取到TextGrid 对象中
# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚
本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;
# 打开一个声音,并按对象列表右侧的Edit 按钮来编辑这个声音,选择Show
Spectrogram 和Show Formant 按钮前的对钩。并将显示窗口调整到合适的横轴显
示比例,将游标定位到需要测量共振峰的位置上(一般定位在共振峰数据比较稳
定的地方或发生变化的地方,而不能放在那些红点散乱的位置);
# 然后按脚本编辑器的菜单"Run"下的"Run"按钮即可执行;
# 运行这段程序后,会出现一个对话框,询问您要提取多少个共振峰数据,
默认为3 个,另外还要询问您是否需要新建一个TextGrid对象来保存共振峰数据,
如果在对象列表窗口中没有对应于声音对象的TextGrid 对象,请选择"Create
TextGrid (for First Time)"按钮前的复选框,然后按"OK"按钮运行即可;如果已经
有了TextGrid 对象,则不必选择"Create TextGrid (for First Time)"按钮前的复选框,
直接按"OK"按钮运行即可。另外请保持Formant Number 与第一次设定的个数一
致,后面的操作过程不必修改它;
# 这个程序将提取出游标位置的共振峰频率数据和带宽数据,并把它写到一
个TextGrid 类型的文件之中,在TextGrid 对象中它们之间用“-”分开,“-”之
前表示共振峰的中心频率值,“-”之后表示共振峰的带宽;如果所提取出来的数
据不够准确,请在TextGrid 对象中进行修改,最后请记作保存TextGrid 对象。
form 对话框
positive Formant_Number_(no_more_than_5) 3
boolean Create_TextGrid_(for_First_Time) 0
endform
nf=formant_Number
createTextgrid=create_TextGrid
soundN$=selected$("Sound")
textGridN$=soundN$+"_Formant"
editor Sound 'soundN$'
yes no no yes no 10
time=Get cursor
for i from 1 to nf
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论