【平头哥RVB2601创意应用开发】 七、RVB2601之声音识别初试
[复制链接]
申请平头哥项目用的是语音识别,也一直尝试做语音识别,但在嵌入式开发板中尝试,还是难度太高。
用的是出ch2601_ft_demo例程,ft_demo实现了声音的录取和回放,程序空间中给语音数据提供48K的空间
在ft_demo的例程中,去除了多次回放,然后对录取的48K语音数据进行了分帧处理,为方便操作,用了128个字节作为一帧,大概16ms,因为采样率是8K。
然后对每帧的数据进行中值滤波,滤波后检测其绝对能量和过零率,得到了每帧的能量和过零数据。
printf("\n Frame_Pow: ");
for(i=0;i<384;i++){
FrameSum = 64;
for(j=0;j<FrameSize;j++){
FrameSum += repeater_data_addr[i*FrameSize+j];
}
FrameSum = FrameSum >> 7;
FramePow = 64;
for(j=0;j<FrameSize;j++){
if(repeater_data_addr[i*FrameSize+j] >= FrameSum)
repeater_data_addr[i*FrameSize+j] -= FrameSum;
else
repeater_data_addr[i*FrameSize+j] = FrameSum - repeater_data_addr[i*FrameSize+j] + 128;
FramePow += repeater_data_addr[i*FrameSize+j] & 0x7F;
}
Frame_Pow[i] = FramePow >> 7;
if(Frame_Pow[i] > MaxPow) MaxPow = Frame_Pow[i];
Frame_Zero[i] = 0;
k = repeater_data_addr[i*FrameSize] & 0x80;
for(j=0;j<FrameSize -1;j++){
n = repeater_data_addr[i*FrameSize+j+1] & 0x80;
if(k!=n) {
k = n;
Frame_Zero[i] ++;
}
}
printf("[%d,%d],", Frame_Pow[i], Frame_Zero[i]);
}
具体评测中发现,语音这边,只能测试3次,3次之后就会自动重启,不知道是不是看门狗起了作用?
想简单的对这两组数据进行识别,发现还是太天真了,
差异很大
离线的语音识别,看来难度不小啊。估计很难在评测的时间内完成了,不知道坛友们有啥建议?
|