matlab 画短时能量图
Posted 胡刚2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 画短时能量图相关的知识,希望对你有一定的参考价值。
使用的 zqq.txt 是一个语音文件,只有1列,数字大概有60000多个
fid=fopen('zqq.txt', 'rt');
x=fscanf(fid, '%f');
fclose(fid);
%计算窗长为50,帧移=0时的语音能量
s=fra(50, 50, x);%帧长为50个数字,帧移为50个数字, 得到s为1319行,50列的矩阵。也就是每一行有50个数字,这50个数字为一帧
%disp(length(s2));
%disp(size(s2, 1));
%disp(size(s2, 2));
s2=s.^2;
%b=sum(a,dim); a表示矩阵;dim等于1或者2,1表示每一列进行求和,2表示每一行进行求和;表示每列求和还是每行求和;b表示求得的行向量
energy=sum(s2, 2);%对矩阵s2每一行求和, energy为1319行,1列,也就是每个数字代表一帧能量
%disp(size(energy, 1));
%disp(size(energy, 2));
subplot(2, 2, 1);
plot(energy);
xlabel('帧数');
ylabel('短时能量E');
legend('窗长N=50');
axis([0, 1500, 0, 2*10^10]);
%计算窗长为100,帧移=0时的语音能量
s=fra(100, 100, x);
s2=s.^2;
energy=sum(s2, 2);
subplot(2, 2, 2);
plot(energy);
xlabel('帧数');
ylabel('短时能量E');
legend('窗长N=100');
axis([0, 750, 0, 4*10^10]);
%计算窗长为400,帧移=0时的语音能量
s=fra(400, 400, x);
s2=s.^2;
energy=sum(s2, 2);
subplot(2, 2, 3);
plot(energy);
xlabel('帧数');
ylabel('短时能量E');
legend('窗长N=400');
axis([0, 190, 0, 1.5*10^11]);
%计算窗长为800,帧移=0时的语音能量
s=fra(800, 800, x);
s2=s.^2;
energy=sum(s2, 2);
subplot(2, 2, 4);
plot(energy);
xlabel('帧数');
ylabel('短时能量E');
legend('窗长N=800');
axis([0, 95, 0, 3*10^11]);
function f=fra(len, inc, x)
%len为帧长,inc为帧长一帧移
%size(X,1),返回矩阵X的行数;
%size(X,2),返回矩阵X的列数;
%disp(size(x, 1));
fh=fix(((size(x, 1) - len)/inc) + 1);%计算帧数,fh=1319
%disp(fh);
f=zeros(fh, len);%fh行,len列的0矩阵,这里是1319行,50列的0矩阵
i=1; n=1;
while i<=fh
j=1;
%下面的循环是每次循环一次填满一行50个数字,也就是一帧,填满一行以后,将行数加1后再次填
while j<=len
f(i, j)=x(n);
j=j+1;
n=n+1;
end
n=n-len+inc;% n-len代表将恢复到上帧的末尾,+inc的意思是在上一帧的末尾再移动inc长度
i=i+1;
end
end
以上是关于matlab 画短时能量图的主要内容,如果未能解决你的问题,请参考以下文章
短时能量基于matlab语音信号短时能量含Matlab源码 1719期
语音分析基于matlab短时自相关基音周期检测+LPC预测增益计算含Matlab源码 1517期