短时傅里叶变换的原理与应用:电话拨号声分析(5)——大结局

来源:互联网 发布:淘宝功能流程图 编辑:程序博客网 时间:2024/04/27 14:28

张学友演唱会全场就说了一句普通话。“还是要我讲国语啊?” -_-!

估计是在问观众,是要我继续说粤语,还是讲普通话 -_-!!

反正一句都听不懂 =_=


我还从来没听过演唱会。第一次还就是去看这么大牌的。不错不错,效果很好~

这个光棍节,过得挺好的。


==============================================================

女朋友说,一般像我这种写博客的人,都是内心寂寞孤独的人,说是因为在现实

生活中找不到说话的人,所以只好在虚拟世界中寻找安慰。看我挺可怜的。

哎,她这么一说,我觉得似乎有点道理…………………………。唉,好惨!!!!

==============================================================


从广州回来以后,把“听音识号”最后一点小尾巴写完。

上一篇,把特征提取的第二部分讲完了。

Review:DTMF频率特征提取

特征提取完毕以后,剩下的应该就是做匹配了。

上一篇讲到,把DTMF信号的频率特征用一个8维向量表示。
提取出来的特征,就是一些向量,标准的12个按键,也都是8维向量。
这里要做的匹配,具体来说,就是分别看每一个电话按键声录音和哪个按键模式最相似。

因此,还需要建立那12个按键的模式向量。8维向量,那坐标表示就是(n1,n2,...,n8)。
我是这样设计的。因为是双音,所以其实对于每个按键来说,它的8维向量里面,只有2个是1,其他都是0。
比如,“1”,就是(1,0,0,0,1,0,0,0)。

把12个按键的标准模式都建立好以后,就可以把由按键音提出出来的DTMF信号的频率特征去和标准模式之间进行匹配了。

于是,怎么度量相似呢?
很多很多种标准。各种距离度量、内积、夹角……详细的可以参考一些模式识别的资料。这里就不罗嗦了。

然后,匹配出来的结果,就是以前出现过的那张图,也就是我的手机号。



最后,把这一段的Matlab代码贴上来。(完了,我之前都是写Java的,现在只会点Matlab了。还怎么找工作?-_-! 好惨!不行,要学C++……)

%% 构造所有已知的模式m_center(1).feature = [1,0,0,0,1,0,0,0]'; m_center(1).number_str = '1';m_center(2).feature = [1,0,0,0,0,1,0,0]'; m_center(2).number_str = '2';m_center(3).feature = [1,0,0,0,0,0,1,0]'; m_center(3).number_str = '3';m_center(4).feature = [1,0,0,0,0,0,0,1]'; m_center(4).number_str = 'A';m_center(5).feature = [0,1,0,0,1,0,0,0]'; m_center(5).number_str = '4';m_center(6).feature = [0,1,0,0,0,1,0,0]'; m_center(6).number_str = '5';m_center(7).feature = [0,1,0,0,0,0,1,0]'; m_center(7).number_str = '6';m_center(8).feature = [0,1,0,0,0,0,0,1]'; m_center(8).number_str = 'B';m_center(9).feature = [0,0,1,0,1,0,0,0]'; m_center(9).number_str = '7';m_center(10).feature = [0,0,1,0,0,1,0,0]'; m_center(10).number_str = '8';m_center(11).feature = [0,0,1,0,0,1,0,0]'; m_center(11).number_str = '9';m_center(12).feature = [0,0,1,0,0,0,0,1]'; m_center(12).number_str = 'C';m_center(13).feature = [0,0,0,1,1,0,0,0,]'; m_center(13).number_str = '*';m_center(14).feature = [0,0,0,1,0,1,0,0,]'; m_center(14).number_str = '0';m_center(15).feature = [0,0,0,1,0,0,1,0]'; m_center(15).number_str = '#';m_center(16).feature = [0,0,0,1,0,0,0,1]'; m_center(16).number_str = 'D';%% 计算与每一类之间的距离 (最大相关度量) cos(theta)的值越大,theta越小,两个越相似decision =  [];for k_number = 1:11    dist_max = 0;    dist_center_idx = 0;    temp_number = phone_number_frame(:,k_number);    for k_center = 1:16        temp_center = m_center(k_center);        dist = temp_number.' * temp_center.feature / norm(temp_number) / norm(temp_center.feature);        if dist_max < dist            dist_max = dist;            dist_center_idx = k_center;        end    end    decision = [decision m_center(dist_center_idx).number_str];endfprintf(['我的手机号是:' decision '\n']);

最后,从讲义上摘一点说明过来。
因为我们当特征的取值仅为(0, 1)两个值时,夹角余弦度量具有特别的含义,
即当模式的第i个分量为1时,认为该模式具有第i个特征;
当模式的第i个分量为0时,认为该模式无此特征。
这时,x和z的内积的值就等于x和z这两个向量共同具有的特征数目。

0 0
原创粉丝点击