matlab 清浊音判断+源代码

简介: matlab 清浊音判断+源代码
%对语音信号采样分帧
clear
clc
X= audioread('mei.wav');
%对信号进行预加重
x=X;
x4=filter([1,-0.9375],1,x);
figure(1)
subplot(2,1,1),plot(x)
title('原始语音信号');
xlabel('样本序列n');
ylabel('幅值');
subplot(2,1,2),plot(x4)
title('原始语音信号的预加重');
xlabel('样本序列n');
ylabel('幅值');
% 幅度归一化到[-1,1]
x=double(x);
x=x/max(abs(x));
% 常数设置
FrameLen=240; % 帧长取30ms,8kHz的采样率
FrameInc=80; % 帧移取10ms,1/3
amp1=3;
amp2=2;
zcr1=10;
zcr2=5;
maxsilence=3; % 3*10ms=30ms
minlen=15; % 15*10ms=150ms
status=0;
count=0;
silence=0;
% 短时过零率(矢量法)
tmp1=enframe(x(1:length(x)-1),FrameLen,FrameInc);
tmp2=enframe(x(2:length(x)),FrameLen,FrameInc);
signs=(tmp1.*tmp2)< 0;
diffs=(tmp1-tmp2)> 0.02;
zcr=sum(signs.*diffs,2);
figure(2)
subplot(2,1,1)
plot(zcr);
title('短时过零率');
ylabel('zcr')
%计算短时能量
amp=sum(abs(enframe(filter([1-0.9375],1,x),FrameLen,FrameInc)),2);
inz=find(amp>1);
amm=amp(inz);
ll=min(amm);
figure(2)
subplot(2,1,2)
plot(amp);
title('短时能量');
ylabel('amp')
%调整能量门限
amp1=ll+(max(amp)-ll)/8;
amp2=ll+(max(amp)-ll)/16;
%开始端点检测
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, % 3=语音结束
break;
end
end
count=count-silence;
x2=x1+count-1;
figure(3)
subplot(2,1,1)
plot(x)
title('语音信号的端点检测');
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');
%n1=(x1*FrameInc-x2*FrameInc)+1;
yy=x(x1*FrameInc:x2*FrameInc);%x1*FrameInc=3760,x2=8320,
%yy的长度是4560
figure(3)
subplot(2,1,2)
plot(yy)
axis([1 length(yy) -1 1]) %将此处的横坐标改值就可以取不同的语音段现在是整个语音段,
title('原始语音信号进行端点检测后得到的有用的语音信号段')
fs=11.025;%设定采样频率
y=fft(yy);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
figure(4);
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('信号波幅频谱图');
grid;
z=0.1*rand(1,length(yy));
figure(5);
plot(z)
fs=11.025;%设定采样频率
Z=fft(z);%进行fft变换
mag=abs(Z);%求幅值
f=(0:length(Z)-1)'*fs/length(Z);%进行对应的频率转换
figure(6);
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('噪声波幅频谱图')
grid;
m=yy'+z;
figure(7);
subplot(2,1,1);
plot(m)
fs=11.025;%设定采样频率
M=fft(m);%进行fft变换
mag=abs(M);%求幅值
f=(0:length(M)-1)'*fs/length(M);%进行对应的频率转换
figure(8);
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('混合信号波幅频谱图')
grid;

创建脚本:

function f=enframe(x,win,inc)
nx=length(x);
nwin=length(win);
if (nwin == 1)
len = win;
else
len = nwin;
end
if (nargin < 3)
inc = len;
end
nf = fix((nx-len+inc)/inc);
f=zeros(nf,len);
完整代码加:2835809579
end

结果:

image.png

1.png

image.png

image.png

相关文章
|
8月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
机器学习/深度学习 数据可视化 数据库
【MATLAB第5期】源码分享#基于小波时间散射网络(WTSN)和长短期记忆网络 (LSTM) 的ECG信号分类模型,含源代码+中文注释,保姆级教学
【MATLAB第5期】源码分享#基于小波时间散射网络(WTSN)和长短期记忆网络 (LSTM) 的ECG信号分类模型,含源代码+中文注释,保姆级教学
|
数据挖掘 数据安全/隐私保护 开发者
MATLAB P文件解密工具让你轻松破解p文件,解析源代码!
这篇文章将为你推荐一个MATLAB P文件解密工具,可以将p文件解密成m文件,反编译p代码为m代码,并还原p文件或m文件的源代码。
1864 0
|
机器学习/深度学习 数据采集 算法
【MATLAB第4期】源码分享#基于贝叶斯Bayes算法优化LSTM长短期记忆网络的时间序列预测模型,含源代码+中文注释,保姆级教学
【MATLAB第4期】源码分享#基于贝叶斯Bayes算法优化LSTM长短期记忆网络的时间序列预测模型,含源代码+中文注释,保姆级教学
|
机器学习/深度学习 算法 计算机视觉
【信号去噪】基于柯西近端分裂 (CPS) 算法实现信号去噪附MATLAB源代码
【信号去噪】基于柯西近端分裂 (CPS) 算法实现信号去噪附MATLAB源代码
|
机器学习/深度学习 算法 计算机视觉
【图像去噪】基于柯西近端分裂 (CPS) 算法实现图像去噪附MATLAB源代码
【图像去噪】基于柯西近端分裂 (CPS) 算法实现图像去噪附MATLAB源代码
matlab 短时能量计算+源代码
matlab 短时能量计算+源代码
317 0
matlab 短时能量计算+源代码
matlab短时过零率计算+源代码
matlab短时过零率计算+源代码
451 0
matlab短时过零率计算+源代码
|
人工智能 算法
Ostu算法的Matlab源代码以及程序解析
Ostu算法的Matlab源代码以及程序解析
|
5月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
247 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码