基于MFCC系数的欧氏距离测量

基于MFCC系数的距离测量

所需项目文件以及语料我放在了自己的github上了:基于MFCC系数的距离测量

1 简介
1.1 本地文档简介
  • 语料:包含本次实验所需要的语料
  • Code:包含了本次实验的matlab代码
    • pr3_3_2.m 主程序,计算两个语音之间的匹配比较
    • mfcc_m.m 计算语音的MFCC特征
    • mel_dist.m Mel距离,基于欧氏距离
    • mfccDate.mat 提取的MFCC数据,24维
  • photo 实验结果截图
1.2 距离度量简介
距离度量(Distance)用于衡量个体在空间上存在的距离,距离越远说明个体间的差异越大。

欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

dist ⁡ ( X , Y ) = ∑ i = 1 n ( x i − y i ) 2 \operatorname{dist}(X, Y)=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}} dist(X,Y)=i=1n(xiyi)2
因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

for i=1 : fn1                   % 计算s1与s2之间每帧的Mel距离
    Cn1=Ccep1(i,:);
    Cn2=Ccep2(i,:);
    Dstu=0;
    for k=1 : num
        Dstu=Dstu+(Cn1(k)-Cn2(k))^2;
    end
    Dcep(i)=sqrt(Dstu);         % 每帧的Mel距离
end
2 同一个样本不同人发音(字)
2.1 语料介绍
语音是“唐”字的发音,由两个人发音组成,为了实验方便,将两个语音长度统一,采样率为44100Hz。
2.2 matlab代码
%
% pr3_3_2 
clear all; 
clc; close all;

%[x1,fs]=audioread('D:\Desktop\学习汇报\语料\元音\i1.wav');      % 读入信号s1-\i1\
%x2=audioread('D:\Desktop\学习汇报\语料\元音\i2.wav');           % 读入信号s2-\i2\
[x1,fs]=audioread('D:\Desktop\学习汇报\语料\同一个样本不同人发音\tang01.wav');
x2=audioread('D:\Desktop\学习汇报\语料\同一个样本不同人发音\tang02.wav'); 
x3=audioread('D:\Desktop\学习汇报\语料\元音\a1.wav');           % 读入信号a1-\a1\
wlen=1479;%200                       % 帧长
inc=626; %80                        % 帧移
x1=x1/max(abs(x1));             % 幅值归一化
x2=x2/max(abs(x2));
x3=x3/max(abs(x3));
% 计算/i1/与/i2/之间的匹配比较
[Dcep,Ccep1,Ccep2]=mel_dist(x1,x2,fs,16,wlen,inc);

fprintf('/tang01/与/tang02/之间的mel平均距离是%d\n',mean(Dcep));
figure(1)
plot(Ccep1(8,:),Ccep2(8,:),'k+'); hold on
plot(Ccep1(14,:),Ccep2(14,:),'kx'); 
plot(Ccep1(24,:),Ccep2(24,:),'k^');
plot(Ccep1(30,:),Ccep2(30,:),'kh'); 
% plot(Ccep1(3,:),Ccep2(3,:),'k+'); hold on
% plot(Ccep1(7,:),Ccep2(7,:),'kx'); 
% plot(Ccep1(12,:),Ccep2(12,:),'k^');
% plot(Ccep1(16,:),Ccep2(16,:),'kh'); 
legend('第8帧','第14帧','第24帧','第30帧','Location','NorthWest')
%legend({'第3帧','第7帧','第12帧','第16帧'},2)
xlabel('信号tang01');ylabel('信号tang02')
axis([-12 12 -12 12]);
line([-12 12],[-12 12],'color','k','linestyle','--');
title('/tang01/与/tang02/之间的MFCC参数匹配比较')
2.3 结果显示

在这里插入图片描述

每个音都有34帧,我从其中选择了4帧来绘图,把两个音在这些帧中前16个MFCC参数显示出来。从图中可以看出,两个音是较匹配的,他们的系数总体分布在$45^{\circ}$线附近。

不同人说同一个字平均欧氏距离:

/tang01//tang02/之间的mel平均距离是2.316534e+01
3 同一个样本同一个人发音
3.1 语料介绍
语音是“i”字的发音,由同一个人发音组成,为了实验方便,将两个语音长度统一,采样率为8000Hz。分为19帧,帧长200,帧移80.
2.2 实验结果

在这里插入图片描述

每个音都有19帧,我从其中选择了4帧来绘图,把两个音在这些帧中前16个MFCC参数显示出来。从图中可以看出,两个音是较匹配的,他们的系数分布在$45^{\circ}$线附近。

同一个样本同一个人发音平均欧氏距离:

/i1//i2/之间的mel平均距离是7.171738e+00
4 同一个人不同样本(单音节)
4.1 语料介绍
语音是“b”、"c"的发音,由同一个人发音组成,为了实验方便,将两个语音长度统一,采样率为16000Hz。分为24帧,帧长1479,帧移626.
4.2 实验结果

在这里插入图片描述

每个音都有24帧,从图中可以看出,两个音是不匹配的,他们的系数分布较广。

同一个人不同样本平均欧氏距离(单音节):

/a//b/之间的mel平均距离是2.968683e+01
5 同一个人不同样本(字)
4.1 语料介绍
语音是“唐”、"维"的发音,由同一个人发音组成,为了实验方便,将两个语音长度统一,采样率为44100Hz,分为34帧.
4.2 实验结果

在这里插入图片描述

从图中可以看出,两个音是不匹配的,他们的系数分布较广。

同一个人不同样本平均欧氏距离(字):

/tang02//wei/之间的mel平均距离是2.259611e+01
6 总结
6.1 欧氏距离总结
不同人说同一个样本平均欧氏距离()2.316534e+01
同一个人不同样本平均欧氏距离()2.259611e+01
同一个人不同样本平均欧氏距离(单音节)2.968683e+01
同一个样本同一个人发音平均欧氏距离(单音节)7.171738e+00

欧氏距离不适合比较单字或者单音节

6.2 MFCC系数总结

如果是同一个字或者同一个音节,MFCC系数总体都分布在 4 5 ∘ 45^{\circ} 45线附近,适合做实验比较。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐维康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值