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. 微软代号为“Volta”的编程工具集预览
  2. linux c 常用函数
  3. udhcp源码详解(四) 之租赁IP的管理
  4. Android 11 修改libcore Cipher AS测试
  5. class com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text
  6. 图形学教程Lecture 14: RayTracing1(Acceleration Radiometry)知识点总结
  7. 如何将 ipynb 发布到 blog 中(html, markdown格式)
  8. python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
  9. 性能测试脚本之SQLServer执行语句
  10. angularjs获取上一个元素的id_DOM(1)-DOM概念和获取元素
  11. ambari安装中常见的问题
  12. [bzoj2190][SDOI2008]仪仗队
  13. 华中科技大学历年计算机专业分数线,【华中科技大学】历年在各省份各专业的录取分数线...
  14. win10家庭中文版切换语言
  15. Delta RPMs disabled because /usr/bin/applydeltarpm not installed解决办法
  16. [转]前端开发必备神级资源(转载请删除括号里的内容)
  17. 如何关闭WPS烦人的广告推送
  18. discuz调用php,PHP调用discuz登陆框实现外部登录
  19. [附源码]java毕业设计SSM归途中流浪动物收容与领养管理系统
  20. 生成模型(四):扩散模型(Diffusion Models)

热门文章

  1. Linux 命令(165)—— whoami 命令
  2. 清明节主题教育课件PPT模板
  3. [Blender 基础教程]Cartoon Smart Blender Basics -- 纳米盘
  4. Less基础语法学习
  5. python爬虫有什么实际作用-Python爬虫的作用与地位(附爬虫技术路线图)
  6. html怎么连接mysql_html怎么连接数据库
  7. CC00073.bigdatajava——|JavaMySQL索引/存储过程/触发器.V14|——|MySQL.v14|数据库备份_SQL_Yog方式|
  8. 微信聊天记录异常怎么修复?经验分享!微信聊天记录如何进行修复?
  9. 很好用的php在线调试工具
  10. Ubuntu 下CodeLite 的安装