資源簡介
語音信號分析與處理及其MATLAB實現LPCMFCCEDP-edp.rar
語音信號分析與處理及其MATLAB實現
Linear Predictive Coding
EDP
MFCC
運行lpc.m就可以:
lpc.jpg
edp.m運行結果
edp.jpg
mfcc.m運行結果:
mfcc.jpg
語音信號分析與處理及其MATLAB實現
Linear Predictive Coding
EDP
MFCC
運行lpc.m就可以:
lpc.jpg
edp.m運行結果
edp.jpg
mfcc.m運行結果:
mfcc.jpg

代碼片段和文件信息
close?all
clear
clc
web?-browser?http://www.ilovematlab.cn/thread-12335-1-1.html
[x]=wavread(‘speech.wav‘);
%幅度歸一化到[-11]
x?=?double(x);
x?=?x?/?max(abs(x));
%常數設置
frameLen?=?240;
frameInc?=?80;
amp1?=?10;
amp2?=?2;
zcr1?=?10;
zcr2?=?5;
maxsilence?=?10;?%?10*10ms?=?30ms
minlen?=?20;?%?15*10ms?=?150ms
status?=?0;
count?=?0;
silence?=?0;
%計算過零率
tmp1?=?enframe(x(1:length(x)-1)?frameLen?frameInc);
tmp2?=?enframe(x(2:?length(x))??frameLen?frameInc);
signs?=?(tmp1.*tmp2)<0;
diffs?=?(tmp1?-tmp2)>0.02;
zcr?=?sum(signs.*diffs?2)
%計算短時能量
amp?=?sum(abs(enframe(filter([1?-0.9375]?1?x)?frameLen?frameInc))?2);
%調整能量門限
amp1?=?min(amp1?max(amp)/4);
amp2?=?min(amp2?max(amp)/8);
%開始端點檢測
x1?=?0;
x2?=?0;
for?n=1:length(zcr)
goto?=?0;
switch?status
case?{01}?%?0?=?靜音?1?=?可能開始
if?amp(n)?>?amp1?%?確信進入語音段
x1?=?max(n-count-11);
status?=?2;
silence?=?0;
count?=?count?+?1;
elseif?amp(n)?>?amp2?|?...?%?可能處于語音段
zcr(n)?>?zcr2
status?=?1;
count?=?count?+?1;
else?%?靜音狀態
status?=?0;
count?=?0;
end
case?2?%?2?=?語音段
if?amp(n)?>?amp2?|?...?%?保持在語音段
zcr(n)?>?zcr2
count?=?count?+?1;
else?%?語音將結束
silence?=?silence+1;
if?silence?count?=?count?+?1;
elseif?count?status?=?0;
silence?=?0;
count?=?0;
else?%?語音結束
status?=?3;
end
end
case?3
break;
end
end
count?=?count-silence/2
x2?=?x1?+?count?-1
subplot(311)
plot(x)
axis([1?length(x)?-1?1])
ylabel(‘Speech‘);
title(‘語音信號檢測結果‘)
line([x1*frameInc?x1*frameInc]?[-1?1]?‘Color‘?‘red‘);
line([x2*frameInc?x2*frameInc]?[-1?1]?‘Color‘?‘red‘);
subplot(312)
plot(amp);
axis([1?length(amp)?0?max(amp)])
ylabel(‘Energy‘);
title(‘短時能量‘)
line([x1?x1]?[min(amp)max(amp)]?‘Color‘?‘red‘);
line([x2?x2]?[min(amp)max(amp)]?‘Color‘?‘red‘);
subplot(313)
plot(zcr);
axis([1?length(zcr)?0?max(zcr)])
ylabel(‘ZCR‘);
title(‘過零率‘)
line([x1?x1]?[min(zcr)max(zcr)]?‘Color‘?‘red‘);
line([x2?x2]?[min(zcr)max(zcr)]?‘Color‘?‘red‘);?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2146??2008-06-30?16:23??edp\edp.m
?????文件???????2147??2006-06-22?19:07??edp\enfr
?????文件????????122??2008-05-14?18:20??edp\Matlab中文論壇--助努力的人完成畢業設計.url
?????文件?????620046??1998-04-10?02:34??edp\speech.wav
?????文件???????3434??2008-05-15?08:26??edp\使用幫助:新手必看.htm
?????目錄??????????0??2008-06-30?16:24??edp
-----------?---------??----------?-----??----
???????????????627895????????????????????6
評論
共有 條評論