labview调用matlab的问题
老师布置作业要做语音分析,我的部分是采集信号后把连续信号分割成孤立的信号(仅限于1到10的十个数字)声音采集后波形显示没问题,但我调用MATLAB节点的后,输入和输出变量都定义为X,然后连接到波形图,显示的是一条斜线。这很明显不正常,我不明白是什么问题,哪位大虾懂得话请不吝赐教。谢谢!
MATLAB代码是
function =speech_cut(x);
count=0;
%sp=list();
frameInc=80;
x=x';
x=x(1,:);
x=;
x2=1;
while (length(x)-x2*frameInc)>100*frameInc
=vad1(x);
if(x2+10)*frameInc>length(x)
break;
end;
if x1>50
z=x(1,(x1)*frameInc:(x2+10)*frameInc);
count=count+1;
sp{count}=z;
end;
x=x(1,(x2)*frameInc:length(x));
end;
save sp1 sp
function = vad1(x)
%幅度归一化到[-1,1]
x = double(x);
x = x / max(abs(x));
%常数设置
FrameLen = 240;
FrameInc = 80;
amp1 = 10;
amp2 = 2;
zcr1 = 10;
zcr2 = 5;
maxsilence = 8;% 6*10ms= 30ms
minlen= 15; % 15*10ms = 150ms
status= 0;
count = 0;
silence = 0;
%计算过零率
tmp1= enframe(x(1:end-1), FrameLen, FrameInc);
tmp2= enframe(x(2:end), FrameLen, FrameInc);
signs = (tmp1.*tmp2)<0;
diffs = (tmp1 -tmp2)>0.02;
zcr = sum(signs.*diffs, 2);
%计算短时能量
amp = sum(abs(enframe(filter(, 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} % 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, % 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;
%x3=length(x)*x1/length(amp);
%x4=length(x)*x2/length(amp); 王兄有空看一下,帮你顶一下 谢谢!,我调试了很久都没成功。 你先在matlab下调试,把波形和你的程序,压缩下放上来。 我调试了一下,在MATLAB下说有些变量没有定义,但是不影响运行。
调用到labview的时候就不行了。下面附有程序。谢谢!
页:
[1]