【短时平均过零率】语音信号短时幅值和短时过零率【含Matlab源码 4942期】

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【短时平均过零率】基于matlab语音信号短时幅值和短时过零率【含Matlab源码 4942期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab语音处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab语音处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab语音处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、部分源代码

% 语音信号时域波形、短时幅值和短时过零率%%%%%%%%%%%%%%%%
%%语音信号变量y_sound; 短时幅值m1_y;短时能量m2_y;过零率zero_y%%%%

clear;
clc;
close all;
% [y_sound,Fs]=audioread( ‘C:\Users\lenovo\Desktop\大三春季学期课程与项目\语音信号处理-黄青华\实验\实验一\my_voice\t.wav’);%打开声音信号
[FileName,PathName]=uigetfile('.wav’); % uigetfile动态选择文件
dir=[PathName,FileName]; % 实质就是文件的名字
[y_sound,Fs]=audioread(dir); % 读取特定路径下的语音文件
y_sound=y_sound(:,1); % 选择语音的单通道进行画图,如果不是那么画的是双通道的
y_length=length(y_sound); % 语音信号数字化之后的长度
T=0:(1/Fs):(y_length-1)/Fs; % 声音信号的时长
Ny=10
Fs/1000; %短时帧长,10ms
if Ny/2>fix(Ny/2) % 将Ny变成偶数
Ny=Ny-1;
else
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if y_length>Ny
frame_all=floor((y_length-(Ny/2))/(Ny/2)); %frame_moving equal to a half of frame_length, get number of all frame,to use “enframe” too.
y2_sound=y_sound(1:(frame_all+1)*(Ny/2));
y3=reshape(y2_sound,(Ny/2),[]);
y4=[y3(:,1:frame_all);y3(:,2:(frame_all+1))];
else
frame_all=1;
y4=y_sound;
end
%%%%%%%加方窗
for i=1:(frame_all)
m1_y(i)=sum(abs(y4(:,i))); %计算短时幅值
m2_y(i)=sum(y4(:,i).*y4(:,i)); %计算短时能量

zero_y(i)=sum(abs(sign(y4(2:Ny,i))-sign(y4(1:(Ny-1),i))))/2;   %计算短时过零率

end
%%%%%%%加哈明窗
win_h=hamming(Ny); %win_y=y_sound.*win_h;
for i=1:(frame_all)
mh1_y(i)=sum(abs(y4(:,i).*win_h)); %计算短时幅值

mh2_y(i)=sum((y4(:,i).win_h).(y4(:,i).*win_h)); %计算短时能量
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]宋云飞,姜占才,魏中华.基于MATLAB GUI的语音处理界面设计[J].科技信息. 2013,(02)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于短时傅里叶变换的线性调频信号脉冲周提取的MATLAB示例代码: ```matlab % 定义信号参数 fs = 1000; % 采样率 T = 1/fs; % 采样间隔 t = 0:T:1-T; % 时间向量 f0 = 100; % 起始频率 f1 = 300; % 终止频率 T_pulse = 0.2; % 脉冲周 % 生成线性调频信号 s = chirp(t,f0,1,f1,'linear'); % 计算短时傅里叶变换 window = hamming(round(T_pulse/T)); % 窗函数 noverlap = round(length(window)/2); % 重叠采样点数 nfft = max(256,2^nextpow2(length(window))); % FFT点数 [S,F,T_Pulse] = spectrogram(s,window,noverlap,nfft,fs); % 提取脉冲周 [~,idx] = max(abs(S),[],1); % 找到每列中最大值的下标 pulse_period = T_Pulse(idx); % 对应的时间向量 % 绘图显示结果 figure; subplot(211); plot(t,s); title('线性调频信号'); xlabel('时间(秒)'); ylabel('幅值'); subplot(212); plot(T_Pulse,pulse_period,'o-'); title('提取的脉冲周'); xlabel('时间(秒)'); ylabel('周(秒)'); ``` 在上面的代码中,首先定义了一个线性调频信号,并且设定了其脉冲周。然后使用MATLAB中的`spectrogram`函数计算短时傅里叶变换,得到了一张时频图。最后,根据时频图中每列的最大值所对应的时间,即可得到线性调频信号的脉冲周。通过绘图展示了提取的脉冲周结果。需要注意的是,窗函数、重叠采样点数、FFT点数等参数的选择会影响到结果的准确性和分辨率。因此,需要根据具体应用场景进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab领域

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

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

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

打赏作者

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

抵扣说明:

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

余额充值