为什么我在matlab 中写了一个m function. 但是却不能用

程序中老是出现“??? Error: File: vad.m Line: 2 Column: 1
Function definitions are not permitted in this context.”的问题,不知道为什么。。。导致端点检测一直出不来,需要在前面加什么编码程序吗?以下是我输入进去的源程序:
x=wavread('e:\raoyi\raoyi.wav');
function mainfunc [x1,x2]=vad(x) %端点检测函数
x=double(x);
x=x/max(abs(x));
FrameLen=256;
FrameInc=128;
amp1=10;
amp2=5;
zcr1=10;
zcr2=5;
maxsilence=3.2;
minlen=15;
status=0;
count=0;
silence=0;
%计算过零率
temp1=enframe(x(1:length(x)-1),FrameLen,FrameInc);
temp2=enframe(x(2:length(x)),FrameLen,FrameInc);
signs=(temp1.*temp2)<0;
diffs=(temp1-temp2)>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{0,1}
if amp(n)>amp1
x1=max(n-count-1,1);
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,
if amp(n)>amp2 |...
zcr(n)>zcr2
count=count+1;
else
silence=silence+1;
if silence < maxsilence
count=count+1;
elseif count<minlen
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');
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');
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');
line([x1 x1],[min(zcr),max(zcr)],'color','red');
line([x2 x2],[min(zcr),max(zcr)],'color','red');
希望高手解答下~谢谢啊

把x=wavread('e:\raoyi\raoyi.wav');这个去掉,写在调用函数的文件里面
下面这里改成这样试试:
function [x1,x2]=vad(x) %function
%mainfunc

调用的时候就可以这样:
[x1,x2]=vad(x);
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答