思路是这样的:
1. 每个人的发音的频谱不同,和标准发音(老师的发音)有一个相对固定的频率偏移量,如果学生的发音经过FFT变换以后的频谱和老师标准发音的频谱的偏移,大部分重合的话,那么两者相似度就很高,你就可以认为学生的发音对了。
2. 在这个基础上,还要考虑到,每个人的语速是不一样的,比如老师的标准发音是5秒中,学生的6秒钟,那么你可以将信号分成比如5等份,即老师的1秒钟对应学生的1.2秒,这样分别做FFT变换,在按照上述方式进行对照即可。
3. 在2的基础上,还可以加入ANN(artificial neural network)的内容,主要用在两个频谱对比上。matlab可以帮助你建立神经网络。
1. 每个人的发音的频谱不同,和标准发音(老师的发音)有一个相对固定的频率偏移量,如果学生的发音经过FFT变换以后的频谱和老师标准发音的频谱的偏移,大部分重合的话,那么两者相似度就很高,你就可以认为学生的发音对了。
2. 在这个基础上,还要考虑到,每个人的语速是不一样的,比如老师的标准发音是5秒中,学生的6秒钟,那么你可以将信号分成比如5等份,即老师的1秒钟对应学生的1.2秒,这样分别做FFT变换,在按照上述方式进行对照即可。
3. 在2的基础上,还可以加入ANN(artificial neural network)的内容,主要用在两个频谱对比上。matlab可以帮助你建立神经网络。
这个项目,如果没有积分变换和神经网络的基础,还是蛮有难度的,如果有这些基础则不是特别难。楼主身边如果有这样人可以和他多加沟通。
FFT和逆FFT的Java代码:
1. http://www.cs.princeton.edu/introcs/97data/FFT.java.html
2. 一个FFT在声音处理方面的例子:
Sound Spectrum JAVA Demo
该链接中有相关的Java代码下载。