语音信号处理-语音信号短时时域分析实验

实验三 语音信号短时时域分析实验

一、实验目的

  1. 了解语音信号短时时域分析的原理;
  2. 掌握短时时域分析的一些参数计算方法;
  3. 根据原理能编程实现短时时域分析的参数计算。

二、实验要求

  1. 实现短时能量、短时平均幅度和短时过零率的计算
  2. 实现短时自相关和短时平均幅度差

三、实验程序

相关函数:
%短时能量计算函数
function para=STEn(x,win,inc)
    X=enframe(x,win,inc)';     % 分帧
    fn=size(X,2);              % 求出帧数
    for i=1 : fn
        u=X(:,i);              % 取出一帧
        u2=u.*u;               % 求出能量
        para(i)=sum(u2);         % 对一帧累加求和
    end
 end
%短时平均幅度计算函数
function para=STMn(x,win,inc)
    X=enframe(x,win,inc)';     % 分帧
    fn=size(X,2);              % 求出帧数
    for i=1 : fn
        u=X(:,i);              % 取出一帧
        para(i)=sum(abs(u))/200;         % 对一帧累加求和
    end
 end
%短时过零率计算函数
function para=STZcr(x,win,inc)
    X=enframe(x,win,inc)';        % 分帧
    fn=size(X,2);                       % 求出帧数
    wlen=length(win);               % 求出帧长
    para=zeros(1,fn);                 % 初始化
    for i=1:fn
        z=X(:,i);                           % 取得一帧数据
        for j=1: (wlen- 1) ;            % 在一帧内寻找过零点
             if z(j)* z(j+1)< 0         % 判断是否为过零点
                 para(i)=para(i)+1;   % 是过零点,记录1次
             end
        end
    end
 end
%短时自相关函数
function para=STAc(X)
    para=zeros(size(X));
    fn=size(X,2);                            % 求出帧数
    wlen=size(X,1);                         %求帧长
    for i=1 : fn
        u=X(:,i);                               % 取出一帧
        R=xcorr(u);                         %短时自相关计算
        para(:,i)=R(wlen,end);          %只取k为正值的自相关函数
    end
 end
%短时平均幅度差函数
function para=STAmdf(X)
    para=zeros(size(X));
    fn=size(X,2);              % 求出帧数
    wlen=size(X,1);
    for i=1 : fn
        u=X(:,i);              % 取出一帧
        for k=1:wlen
            para(:,k)=sum(abs(u(k:end)-u(1:end-k+1)));      %求每个样本点的幅度差
        end
    end
 end
整体代码:
%实验要求:短时时域分析参数计算并显示
clear all; clc; close all;

[x,Fs]=audioread('block.wav');       % 读入数据文件

wlen=200; inc=100;          % 给出帧长和帧移
win=hanning(wlen);          % 给出海宁窗
N=length(x);                    % 信号长度
time=(0:N-1)/Fs;                % 计算出信号的时间刻度
En=STEn(x,win,inc);             %短时能量
Mn=STMn(x,win,inc);             %短时平均幅度
Zcr=STZcr(x,win,inc);              %短时过零率
%此处和上述3个参数不同,返回的不是向量而是矩阵,因为一帧信号得到的不是一个数值
X=enframe(x,win,inc)';     % 分帧
xn=X(:);
Ac=STAc(X);                         %计算短时自相关
Ac=Ac(:);
Amdf=STAmdf(X);             %计算短时幅度差
Amdf=Amdf(:);

fn=length(En);             % 求出帧数

figure(1)
subplot 311; plot(time,x,'b'); axis tight% 画出时间波形 
title('(a)语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 ]); 
frameTime=FrameTimeC(fn,wlen,inc,Fs);   % 求出每帧对应的时间
subplot 312; plot(frameTime,Mn,'b')     % 画出短时幅度图
title('(b)短时幅度');
ylabel('幅值'); xlabel(['时间/s' 10 ]);  
subplot 313; plot(frameTime,En,'b')     % 画出短时能量图
title('(c)短时能量');
ylabel('幅值'); xlabel(['时间/s' 10 '(b)']);

 figure(2)
subplot 211; plot(time,x,'b'); axis tight% 画出时间波形 
title('(a)语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 ]); 
subplot 212; plot(frameTime,Zcr,'b')     % 画出短时过零率图
title('(b)短时过零率');
ylabel('幅值'); xlabel(['时间/s' 10 ]);  


figure(3)
subplot 211; plot(xn,'b'); % 画出时间波形 
title('(a)语音波形');
ylabel('幅值'); xlabel(['点数' 10 ]); 
subplot 212; plot(Ac,'b')                    % 画出短时自相关图
title('(b)短时自相关');
ylabel('幅值'); xlabel(['点数' 10 ]);  


figure(4)
subplot 211; plot(xn,'b'); % 画出时间波形 
title('(a)语音波形');
ylabel('幅值'); xlabel(['点数' 10 ]); 
subplot 212; plot(Amdf,'b')                     % 画出短时幅度差
title('(b)短时幅度差');
ylabel('幅值'); xlabel(['点数' 10 ]);  


四、实验结果

  1. 实现短时能量、短时平均幅度和短时过零率的计算
    在这里插入图片描述
    在这里插入图片描述
  2. 实现短时自相关和短时平均幅度差
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 基于MATLAB语音信号时域特征分析实验是通过对语音信号进行数字化处理,提取其中的时域特征,以分析语音信号的特点及其应用。 首先,我们需要将声音信号采集并进行数字化处理,通过调用MATLAB中的音频处理工具箱来完成。主要包括读取声音文件、设定采样频率以及对声音数据进行滤波等操作。 接下来,我们可以对语音信号进行分帧处理,将语音信号切割成短时帧,一般是20ms到30ms的长度。这样做的目的是为了分析语音信号在不同时间段的特征。 然后,我们可以利用MATLAB中的时域分析工具,例如自相关函数、线性预测分析等方法,提取语音信号的时域特征。其中,自相关函数可以用于估计语音信号的周期性,线性预测分析则可以提取语音信号的共振峰频率等信息。 另外,我们还可以计算语音信号短时能量和短时过零率等时域特征。短时能量代表了语音信号在每个帧中的能量大小,短时过零率则表示语音信号在每个帧中穿过零点的次数。这两个特征可以反映语音信号的清晰度和噪声特性。 最后,我们可以利用提取到的时域特征,结合机器学习或模式识别算法,对语音信号进行分类、语音识别或语音合成等应用。这些应用涉及到语音信号的特征提取、特征选择和模型的建立与训练等步骤,可以帮助我们更好地理解和利用语音信号。 总之,基于MATLAB语音信号时域特征分析实验可以帮助我们深入研究语音信号的特征,并在语音信号处理语音识别等领域中得到应用。 ### 回答2: 基于Matlab语音信号时域特征分析实验可以通过以下步骤进行。 首先,将语音信号导入Matlab环境。可以使用`audioread()`函数读取语音文件,并将其存储为一个向量表示的时域信号。 接下来,可以进行预处理步骤,如去除噪声、进行语音分帧等。可以使用Matlab中的滤波器函数来实现噪声去除,如`highpass()`和`lowpass()`函数。对语音信号进行分帧时,可以使用`buffer()`函数将长时域信号分割为若干个短帧。 然后,计算每个语音帧的时域能量。时域能量可以通过计算每个帧内所有样本的平方和来获得。可以使用向量化操作和`sum()`函数来实现。 接着,可以计算每个语音帧的过零率。过零率是语音信号在时域上波形变化频繁与否的度量。可以通过计算帧内相邻样本之间符号变化的次数来获得过零率。可以使用向量运算和符号函数`sign()`来实现。 最后,可以对计算得到的时域能量和过零率进行可视化,以便于进一步分析和解释。可以使用Matlab中的绘图函数,如`plot()`和`stem()`,来绘制时域能量和过零率曲线。 通过以上步骤,可以实现基于Matlab语音信号时域特征分析实验。这些时域特征可以用于语音信号的识别、分类和语音合成等应用。 ### 回答3: 基于MATLAB语音信号时域特征分析实验可以通过以下几个步骤来完成。 第一步是语音信号的读取与预处理。首先,将语音信号的音频文件导入MATLAB环境中,可以使用MATLAB中的`audioread`函数来实现。读取后的语音信号可以进行预处理,如去除噪音、归一化等。 第二步是语音信号的时域特征提取。在MATLAB中,可以使用短时傅里叶变换(Short-Time Fourier Transform, STFT)来将语音信号转换为时频图。STFT可以通过MATLAB中的`spectrogram`函数实现,可以设置窗长、窗移以及窗函数等参数。得到时频图后,可以提取一些常用的时域特征,比如能量、过零率、平均功率等。 第三步是时域特征的可视化与分析。可以使用MATLAB中的绘图函数,如`plot`、`bar`等来展示时域特征。通过绘制波形图、能量谱图、过零率曲线等,可以直观地观察到语音信号的时域特征。分析这些特征的变化和趋势,可以帮助理解语音信号的性质和特点。 最后一步是实验结果的总结与讨论。根据分析得到的时域特征结果,可以总结语音信号的时域特点,如语音信号的频率分布、能量集中区域等。进一步讨论语音信号时域特征与语音识别或其他相关应用的关系,可以提出改进或优化的建议。 总而言之,基于MATLAB语音信号时域特征分析实验主要涉及语音信号的读取与预处理、时域特征提取、可视化与分析以及实验结果的总结与讨论。通过这些步骤,可以深入了解语音信号的时域特征,为语音处理和相关应用提供有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值