找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1246|回复: 4

labview调用matlab的问题

[复制链接]
发表于 2008-5-16 01:22:38 | 显示全部楼层 |阅读模式
老师布置作业要做语音分析,我的部分是采集信号后把连续信号分割成孤立的信号(仅限于1到10的十个数字)
声音采集后波形显示没问题,但我调用MATLAB节点的后,输入和输出变量都定义为X,然后连接到波形图,显示的是一条斜线。这很明显不正常,我不明白是什么问题,哪位大虾懂得话请不吝赐教。谢谢!
MATLAB代码是
function [sp,count]=speech_cut(x);
  count=0;
  %sp=list();
  frameInc=80;
  x=x';
  x=x(1,;
  x=[x,zeros(1,60*80)];
  x2=1;
  while (length(x)-x2*frameInc)>100*frameInc
  [x1,x2]=vad1(x);
    if(x2+10)*frameInc>length(x)
    break;
  end;
  if x1>50
    z=x(1,(x1)*frameIncx2+10)*frameInc);
    count=count+1;
    sp{count}=z;
   end;
  
  x=x(1,(x2)*frameInc:length(x));
  end;  
  save sp1 sp

function [x1,x2] = 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 -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}                   % 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);
发表于 2008-5-18 21:20:29 | 显示全部楼层
王兄有空看一下,帮你顶一下
回复 顶

使用道具 举报

 楼主| 发表于 2008-5-19 01:18:40 | 显示全部楼层
谢谢!,我调试了很久都没成功。
回复 顶

使用道具 举报

发表于 2008-5-19 17:16:03 | 显示全部楼层
回复 顶

使用道具 举报

 楼主| 发表于 2008-5-20 17:59:33 | 显示全部楼层
我调试了一下,在MATLAB下说有些变量没有定义,但是不影响运行。
调用到labview的时候就不行了。下面附有程序。谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-30 06:24 , Processed in 0.046388 second(s), 12 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表