语音识别 - 线性预测编码

时间:2012-08-12 22:03:09

标签: c++ algorithm math fft speech

我正在为一个教育目的工作/研究一个项目构想,并希望做一个关于语音识别的项目,没什么太大的,只是一个介绍,让我开始在该领域。基本上,项目和算法将输入(.wav)文件,然后识别说话的人是说“是”还是说“否”。我正在寻求使用线性预测编码。

基本上,在我的脑海中,我正在考虑以下算法:

  1. 将.wav(原始数据)读入矢量
  2. 将矢量拆分为相等大小的块
  3. 处理特定特征的每个块
  4. 找到其模型最有可能与生产的手机字符串匹配的单词。
  5. 然后我想使用相关性度量(如Correlation)来找到正确的手机。

    所以,基本上,在读入数据文件之后,并将其拆分为块..它应该/将包含如下:

    rawdata = 
    
    [0] => 'Y',
    [1] => 'E',
    [2] => 'S'
    

    或者包含频率结果,然后可以与电话进行比较。

    我的问题是,这看起来像是一个很好的算法来解决问题。

    我的下一个问题:

    当我尝试将.wav文件读入内存时,我得到(种类)以下结果..

    20 30 10 30 40 50 .. 20 20 .. 10 20 .. 60 40 
    10 20 30 40 50 60 ... .. . . . . 
    

    它们都是整数值,所以,一旦我获取了所有的头信息..其余的数据是我需要转换成正确的介质然后这是数据..?我有点困惑。

    希望有人可以帮助我,并且我已经正确地写出了问题。谢谢。

1 个答案:

答案 0 :(得分:0)

如果你不是我的意见,不,这不是一个好的算法。

首先,人们以不同的速度说话,他们也会以不同的速度发音。您无法从随机切片输入数据开始。

其次,要获得一些好的结果,您需要大幅降低输入的噪音。你需要专注于人类语音主要使用的频率。然后你首先需要一些东西来识别元音,然后你试着猜出这个词,你需要一些真实的数据。你可能不会得到任何可用的东西。

回答关于waw文件的问题,那个标题+数据,我不知道标题,但是因为waw是一种古老的格式,所以在它上面获取一些文档并不难。

数据部分是一个整数值数组,即给定时刻的声音强度。对于44kHz的waw文件,测量强度为每秒44000次,并存储。它只是原始数字,根本没有压缩(曾经想知道为什么waw文件如此巨大?)除了标题,它告诉你采样率和整数类型(通常是16位),等等。

您分析这些巨大的数据以获取有关所用频率的一些信息,但您应该在开始之前研究声音和所有内容的数学。哎呀,即使我不确定我能写些什么东西,大约一半时间能成功识别3个字母的单词。