资源简介
用DSP实现的一个简单的语音识别系统,对初接触者很有帮助。
代码片段和文件信息
#include
#include
#include
#include
#include “lpc.h“
#define frameLEN 240 //帧长
#define frameSHIFT 80 //帧移
#define LPCFACTOR 10 //lpc阶数
#define LPCCFACTOR 10 //lpcc阶数
#define REALMAX 100000000
//////////////////////////////////////////////////////////////////
/// 函数功能:计算lpc系数
/// 参数含义: fData----一帧数据,输入参数
/// fResult---返回结果,输出参数
//////////////////////////////////////////////////////////////////
void lpc(float* fData float* fResult)
{
int ijk;
float r[LPCFACTOR+1];
float l[LPCFACTOR];
float a[LPCFACTOR][LPCFACTOR];
float e[LPCFACTOR];
float c[LPCFACTOR];
float d[LPCFACTOR];
for(i=0; i {
float sum=0.0;
for(j=0; jameLEN-i; j++)
{
sum += (*(fData+j)) * (*(fData+j+i));
}
*(r+i) = sum;
}
l[0] = r[1]/r[0];
a[0][0] = l[0];
e[0] = (1-squre(l[0]))*r[0];
for(i=1; i {
float sum=0.0;
for(j=0; j {
sum += (a[i-1][j])*(r[i-j]);
}
c[i] = sum;
l[i] = (r[i+1]-c[i])/e[i-1];
a[i][i] = l[i];
for(j=0; j {
a[i][j] = a[i-1][j]-l[i]*a[i-1][i-j-1];
}
e[i] = (1-squre(l[i]))*e[i-1];
}
for(k=0; k {
d[k] = a[LPCFACTOR-1][k];
d[k] = (-1)*d[k];
}
memcpy(fResult d sizeof(float)*LPCFACTOR);
return;
}
/////////////////////////////////////////////////////////////////
// 函数功能:由lpc得到lpcc
// 参数含义: lpcdata---lpc系数所在的内存首地址输入参数
// lpccdata---返回的lpcc系数,输出参数
/////////////////////////////////////////////////////////////////
void lpctolpcc(float* lpcdata float* lpccdata)
{
int mk;
float sum=0.0;
float tempData[LPCCFACTOR];
for(m=0; m {
sum = *(lpcdata+m);
for(k=0; k {
sum += (*(lpcdata+k))*tempData[m-k-1]*(1.0-(float)(k+1)/(m+1));
}
tempData[m]=sum;
}
for(m=LPCFACTOR; m {
sum=0.0;
for(k=0; k {
sum += (*(lpcdata+k))*tempData[m-k-1]*(1.0-(float)(k+1)/(m+1));
}
tempData[m]=sum;
}
memcpy(lpccdata tempData sizeof(float)*LPCCFACTOR);
return;
}
////////////////////////////////////////////////////////////////////////////////////
// 函数功能:对模板参数和样本参数进行dtw比较
// 参数含义: mobandata---模板参数数组,输入参数,大小为mbfrmcnt*LPCCFACTOR
// yangbendata---样本参数数组,输入参数,大小为ybfrmcnt*LPCCFACTOR
// mbfrmcnt---模板的帧数,输入参数
// ybfrmcnt---样本帧数,输入参数
// cmpresult---比较结果,输出参数,大小为mbfrmcnt*ybfrmcnt
////////////////////////////////////////////////////////////////////////////////////
float dtw(float* mobandata float* yangbendata int mbfrmcnt int ybfrmcnt)
{
int ijk;
float sumd1d2d3retvalue;
float paccd[50][50];
//生成帧匹配距离矩阵
float pd[50][50];
// float* pd = (float*)malloc(sizeof(float)*mbfrmcnt*ybfrmcnt);
for(i=0; i {
for(j=0; j {
sum=0.0;
for(k=0; k {
sum += squre((*(mobandata+i*LPCCFACTOR+k))-(*(yangbendata+j*LPCCFACTOR+k)));
}
pd[i][j]=sum;
// *(pd+i*ybfrmcnt+j) = sum;
}
}
//
// paccd = (float*)malloc(sizeof(float)*mbfrmcnt*ybfrm
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4041 2006-11-04 13:37 DSP实现简单语言系统\用DSP实现的一个简单的语音识别系统\lpc.c
目录 0 2007-05-09 11:57 DSP实现简单语言系统\用DSP实现的一个简单的语音识别系统
目录 0 2010-04-02 15:49 DSP实现简单语言系统
----------- --------- ---------- ----- ----
4041 3
相关资源
- 数据结构实验七排序算法的实现题目
- 汇编语言实现快速排序
- 用汇编语言实现的电子时钟
- Vue.js实现购物车checkbox的全选与反选
- 汇编语言实现学生成绩管理系统
- 编写程序实现虚拟存储管理中OPTFIFO
- CSMA/CD 协议的模拟实现
- 用软件实现1-Wire通信
- 用prolog实现8数码问题
- 编程序实现设有10个学生的成绩分别为
- 简单实现windows下的输入法
- 符号表设计与实现
- 超市进销存销售管理系统的设计与实
- 应用eQEP及编码器测量电机位置与速度
- LU 分解,给出采用行连续划分方式下
- 乒乓球游戏机.pdsprj
- 图的最短路径算法实现实现.zip
- CKEDITOR实现新闻内容富文本显示以及添
- uart串口通信收、发fpga实现
- Linux ATM取款机简单实现附详细说明-
- verilog 实现的0-9 计数器数码管显示
- 爬虫代码实现.rar
- f_2000.vhd
- 用js实现的飞机大战的代码以及素材分
- 基于QT的聊天小程序实现注册登录,传
- 项目:UNIX Shell 和历史特点
- Echarts结合百度地图实现省市区散点展
- TMS320F28335CAN模块中文手册
- 实验四-指示灯和拨码开关实验.doc
- qt用QCustomPlot实现鼠标实时回调xy轴数
评论
共有 条评论