微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的说话人识别系统,包含原理图、源代码

基于FPGA的说话人识别系统,包含原理图、源代码

时间:06-04 来源:互联网 点击:

向量bbtzv:

2.5516 7.3047 10.2896 15.0233 18.7163 21.7753 25.8263 30.4965 34.4767 38.2047 42.6746 46.2591 49.9754 54.4766 58.5582 62.7232 66.4625 71.0343 74.8362 78.0749 82.2228 86.1855 90.2439 94.4314 98.5723 102.5504 106.2111 110.1579 114.2530 118.2325 122.2810 126.2972 130.5383 134.6598 138.7651 142.7511 146.8711 150.7495 154.4465 158.1874 162.6890 166.6006 170.9542 174.7016 179.1256 182.1497 186.1302 190.4031 194.2276 198.4698 202.4609 206.8553 210.8231 214.4258 218.5462 222.5539 226.4384 231.2354 235.0389 238.5223 241.7803 246.7281 249.9968 253.8746

训练所得说话人bb的确认阈值为bbp:

0.0940

说话人确认时:

  1. 计算测试语音语音1(zx036)的特征向量avtzv1与说话人zx的模型特征向量zxtzv的距离,为0.0196,小于说话人zx的确认阈值为zxp(0.0403),所以确认测试语音1为zx所说;计算测试语音2(bb13)的特征向量avtzv2与说话人zx的模型特征向量zxtzv的距离,为0.2310,大于说话人zx的确认阈值为zxp(0.0403),所以确认测试语音2不是zx所说。
  2. 计算测试语音语音1(zx036)的特征向量avtzv1与说话人bb的模型特征向量bbtzv的距离,为0.1292,大于说话人bb的确认阈值为bbp(0.0940),所以确认测试语音1不是bb所说;计算测试语音2(bb13)的特征向量avtzv2与说话人bb的模型特征向量bbtzv的距离,为0.0932,小于说话人bb的确认阈值为bbp(0.0940),所以确认测试语音2是bb所说。

说话人辨认:

  1. 计算测试语音语音1(zx036)的特征向量avtzv1与说话人zx的模型特征向量zxtzv的距离,为0.0196;计算测试语音语音1(zx036)的特征向量avtzv1与说话人bb的模型特征向量bbtzv的距离,为0.1292。所以,将测试语音1辨认为zx所说。
  2. 计算测试语音2(bb13)的特征向量avtzv2与说话人zx的模型特征向量zxtzv的距离,为0.2310;计算测试语音2(bb13)的特征向量avtzv2与说话人bb的模型特征向量bbtzv的距离,为0.0932。所以,将测试语音1辨认为bb所说。

三、 Matlab仿真程序

1. 说话人确认主函数

%%####=============说话人确认主函数(最小距离)==============####%%

clc;clear;

%============1 流程说明========%

%将测试语音与训练所得模板逐个进行确认,先确定出要确认的说话人的模板的训练判决阈值,

%再求出每个测试语音的平均特征向量与此说话人模板特征向量的距离,如果距离小于阈值,

%则确认此测试语音为该说话人所说,否则不是。

%==========2 符号说明===========%

% N:说话人数;K: 特征矢量的长度;

% TZV:N*K阶的训练特征矢量矩阵,第nn行表示第nn个说话人的模型特征矢量;

% DTH: N长的训练判决门限向量,第nn个元素代表第nn个说话人的训练判决门限;

% S1: 说话人1的语音信号;S2:说话人2的语音信号;......;SN: 说话人N的语音信号

%=========3 主程序=======%

%===根据训练数据,求出各个说话人的训练特征矢量和训练判决门限===%

N=2;

TIMES=10;%训练次数为10

load A1 A1; %A1为说话人zx的十次训练语音组成的cell

load A2 A2; %A2为说话人bb的十次训练语音组成的cell

%.......%

[mtzh1,p1]=xunlian(A1,TIMES);%调用训练子函数,得说话人的模型特征矢量和模型判决门限

TZV(1,:)=mtzh1;

DTH(1)=p1;

[mtzh2,p2]=xunlian(A2,TIMES);

TZV(2,:)=mtzh2;

DTH(2)=p2;

%.......%

K=length(mtzh1);

%===说话人说话,轮流进行确认===%

%==确认说话人1==%

nn=1;

S1=wavread(f:\speakerzx3\zx316);%%说话人x说话后语音信息被存储,用函数读出该语音信号

decisionf(S1,TZV,DTH,nn,K) %确认说话人x是否为说话人1,是输出‘yes’,不是输出‘no’

S2=wavread(f:\speakerbb1\bb13);%%说话人y说话后语音信息被存储,用函数读出该语音信号

decisionf(S2,TZV,DTH,nn,K) %确认说话人y是否为说话人1,是输出‘yes’,不是输出‘no’

%......%

%==确认说话人2==%

nn=2;

S1=wavread(f:\speakerzx3\zx316);%%说话人x说话后语音信息被存储,用函数读出该语音信号

decisionf(S1,TZV,DTH,nn,K) %确认说话人x是否为说话人2,是输出‘yes’,不是输出‘no’

S2=wavread(f:\speakerbb1\bb13);%%说话人2说话后语音信息被存储,用函数读出该语音信号

decisionf(S2,TZV,DTH,nn,K) %确认说话人y是否为说话人2,是输出‘yes’,不是输出‘no’

%......%

%=====......=====%

2.说话人辨认主函数

%%####=============说话人辨别主函数(

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top