dechaaar 发表于 2013-4-20 17:29

你是运行这段程序出的问题么?

把变量先全部定义好

arrow,tmPitch,FramArry

function [tmPitch,fx]=dbdoor(f)

FrameLen = 240;

FrameInc = 80;

%读入语音数据

[xd, fs] = wavread('d:\bishe\wav\signal.wav');

%单声道

x = xd(:,1);

%xlen=fix(length(x)/20);

%x=x(1:xlen);

%幅度归一化

x = double(x);

x = x/max(abs(x));

%整个录音的长度

t=(0:length(x)-1)/fs;

% 对音频信号进行预滤波 butter滤波

%[b,a] = butter(4,[300 3400]/(fs/2));

%fx=filter(b,a,x);

%预加重滤波器

fx=filter([1 -0.9375], 1, x);

%对数据进行分帧

FramArry = enframe(fx, FrameLen, FrameInc);

%arrow行即是帧数,colum列即是每帧数据的数值个数

[arrow,colum]= size(FramArry);

%把前10帧看作噪音,分析,取其阀值zrc,elt,eht

tmp1 = zeros(arrow,FrameLen);

tmp2 = zeros(arrow,FrameLen);

%两个10帧的矩阵,计算过零率

for i=1:arrow-1

tmp1(i,:) = FramArry(i,:);

tmp2(i,:) = FramArry(i+1,:);

end

signs = (tmp1.*tmp2) < 0; %过零

diffs = abs(tmp1 - tmp2) > 0.02;

zcr   = sum(signs.*diffs, 2); %求出了每一帧的过零率

for i=3:arrow-3

zcr(i)=(zcr(i-2)+zcr(i-1)+3*zcr(i)+zcr(i+1)+zcr(i+2))/7;

end

ZRCT = max(max(zcr(1:10)), 20);

%能量幅值

amp = sum(abs(FramArry), 2);

for i=3:arrow-3

amp(i)=(amp(i-2)+amp(i-1)+3*amp(i)+amp(i+1)+amp(i+2))/7;

end

emax = max(abs(amp(1:20)));

emin = min(abs(amp(1:20)));

i1 = 3*(emax - emin) + emin;

i2 = 5*emin;

%能量阀值ELT为低能量阀值,EHT为高能量阀值

ELT = min(i1, i2);

EHT = 5*ELT;

%ELT = 2;

%EHT = 12;

%从第1帧往后扫描找出第一个|En|>ELT的点

tmPitch = zeros(1,arrow);

ctrl = 1;

i = 20;

while(ctrl)

%小于低能量阀值

pbegin = 0;

pend = 0;

while (i < arrow && amp(i) < ELT)

ELT=0.5*ELT+0.5*amp(i);

i = i+1;

end

pbegin = i; %记录为开始的语音

%计算其前后20帧的超过平均过零率的个数

if(i < arrow - 10)

time = sum(zcr(i-10:i+10) > ZRCT);

end

%向后检查15帧如果幅度回落,不是说话声音

for j = i:i+20

if(j <= arrow)

%达到高门限一定是语音段

if (amp(j) > EHT)

break;

%不是语音段

else if (amp(j) < ELT)

pbegin = 0;

break;

end

end

else

ctrl = 0; %最后20帧看作没用的信号

break;

end

end

i=j;

%不小于ELT而且过零率超过限定值,即是讲话段

if (time > 15 && pbegin ~= 0)

%幅度下降到1.5ELT时为语音的结束

while(i <= arrow && amp(i) > 1.5*ELT)

i = i + 1;

end

pend = i;

while(i <= arrow && amp(i) > ELT && amp(i) < 1.5*ELT)

ELT=0.5*ELT+0.5*amp(i);

i = i+1;

end

%从pbegin到pend是语音段,假如时长太短认为是噪音

%比20帧要大则为语音段

if ((pend - pbegin) > 20)

for j=pbegin:pend

tmPitch(j) = 1;

end

end

end

i = i + 1;

if (i > arrow)

ctrl = 0;

break;

end

end

noisy=zeros(1,arrow);

a=0;

b=0;

for j=1:arrow

if(tmPitch(j)==1&&tmPitch(j+1)==0)

a=tmPitch(j+1);

elseif(tmPitch(j)==0&&tmPitch(j+1)==1)

b=tmpPitch(j);

end

break

noisy=FramArry(a,b);

end

subplot(411);

plot(t,x);

title('原信号波形图');

ylabel('幅度');

xlabel('时间');

axis([0 fix(max(t)) min(x) max(x)]);

%subplot(312);

%plot(t,fx,'Color','red');

%title('滤波后波形图');

%ylabel('幅度');

%xlabel('时间');

%axis([0 fix(max(t)) min(x) max(x)]);

subplot(412)

tz = ((0:arrow-1)*80 + 160)/fs;

plot(tz,zcr);

%plot(tmPitch);

title('短时过零率');

ylabel('过零次数');

xlabel('时间');

axis([0 fix(max(t)) min(zcr)-1 max(zcr)+1]);

subplot(413)

ta = ((0:arrow-1)*80 + 160)/fs;

plot(ta,amp);

%plot(tmPitch);

title('短时能量');

ylabel('能量');

xlabel('时间');

axis([0 fix(max(t)) min(amp)-1 max(amp)+1]);

subplot(414)

tm = ((0:length(tmPitch)-1)*80 + 160)/fs;

plot(tm,tmPitch);

%plot(tmPitch);

title('短时能量');

ylabel('能量');

xlabel('时间');

axis([0 fix(max(t)) 0 1.5]);

这个是全部的程序

matlab noisy or,Matlab 中??? Undefined function or variable 'noisy'.是什么问题相关推荐

  1. matlab sdm,运行matlab空间计量包中的sdm_d.m,出现?Undefined function or variable 'sdm_d'.

    运行matlab空间计量包中的sdm_d.m,出现??? Undefined function or variable 'sdm_d'. 程序如下,高手请解答,谢谢 % PURPOSE: An exa ...

  2. Matlab:成功解决Undefined function or variable B

    Matlab:成功解决Undefined function or variable "B" 目录 解决问题 解决方法 解决问题 Undefined function or vari ...

  3. 解决VS2019中”This function or variable may be unsafe.”警告

    原因分析: 这是vs为了防止内存泄漏的警告,大可不必理会(反正我们做题也影响不到 解决方法: 在最开头加一行#define _CRT_SECURE_NO_WARNINGS即可

  4. Undefined function or variable ‘fuzzypid‘.

    `在这里插入代码片>> fuzzypid=readfis('fuzzypid.fis') fuzzypid = name: 'fuzzypid'type: 'mamdani'andMeth ...

  5. matlab安装m_map,MATLAB中安装m_map后不能用,求解

    MATLAB中安装m_map后不能用,求解 因为画图,所以今天在MATLAB中安装了m_map,之后还写了几个m文件,后来MATLAB突然卡住,就关了,之后再打开,就显示如下: Warning: Di ...

  6. matlab hilb,MATLAB在科学计算中的应用:第2章 MATLAB 语言程序设计基础

    <MATLAB在科学计算中的应用:第2章 MATLAB 语言程序设计基础>由会员分享,可在线阅读,更多相关<MATLAB在科学计算中的应用:第2章 MATLAB 语言程序设计基础(7 ...

  7. matlab axb c,matlab调用C源代码(续)

    [例2]试用MEX文件求5阶完全图邻接矩阵的特征值及对应的特征向量. 下面是求该矩阵的MEX文件. #include "mex.h" void mexFunction(int nl ...

  8. 西农matlab基础知识,MATLAB基础知识复习

    1.MATLAB的基本知识 1-1.基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可.例如: >> (5*2+1 ...

  9. 打开matlab的规则,matlab的函数和运算规则

    在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可.例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 ...

最新文章

  1. PHP伪类型和伪变量
  2. 日本那个大户又要抛了?
  3. 原来文化设计可以这样玩!
  4. Linux下的tar压缩解压缩命令详解(转)
  5. Matplotlib 中文用户指南 6 自定义 matplotlib
  6. ubuntu没有指纹登录_Thinkpad在Ubuntu 20.04下使用指纹登陆
  7. sql limit 子句_SQL Join子句介绍和概述
  8. python连续质数计算_GitHub - xxqfft/AlgorithmsByPython: 算法/数据结构/Python/剑指offer/机器学习/leetcode...
  9. Delphi的StringReplace 字符串替换函数
  10. GBin1教程:使用jQuery插件jquery.validationEngine实现表单验证功能
  11. arduino 智能车组装步骤_Arduino 智能避障智能小车制作图文教程
  12. VB中.frm .frx .vbp .vbw .scc有什么作用
  13. 刨根究底字符编码之七——ANSI编码与代码页(Code Page)
  14. 2014.07.30 Hosts更新
  15. 自动化1121和1122班学生链接
  16. 华科计算机组成原理 存储系统实验 汉字字库Logsim实验
  17. unity不错的学习网站
  18. 九、Arduino 红外避障模块使用
  19. Python实现猫脸识别 | 喵主子福利
  20. Agisoft Metashape 照片高程改正 附python源码

热门文章

  1. 专利纠纷持续,小i机器人要求苹果公司停售iPhone
  2. windows防火墙设置_TinyWall下载 _TinyWall(网络防火墙)官方版下载安装3.0.9
  3. 万能码的码上付来袭(安全扫码专业委员会)
  4. 儿时便立志在清华读书,参与三国杀发明,被竞赛学子称为「楼教主」,在他身上还有怎样的传奇故事?
  5. html用表单制作个人简历
  6. 解决淘宝旺旺无法运行的问题。。
  7. C#语言实例源码系列-实现桌面右下角Pop弹窗
  8. 航班管家向怡宁:如何做APP界面设计
  9. cordova 安装及使用
  10. RT-Thread 回调函数触发流程