ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【语音响度】基于matlab语音声强与响度【含Matlab源码 541期】

2021-06-27 19:31:53  阅读:220  来源: 互联网

标签:响度 声强 Length fs spl 声压级 语音 补零


一、简介

基于matlab语音声强与响度

二、源代码

clear all;
%%----------------------------------------------读取文件------------------------------------------
% 从wav文件读入语音数据,该语音采样率16k,故信号最高频率8k。
[x,fs]=wavread('C2_3_y.wav');
% 取x的一个通道
x=x(:,1);
% 将x从列向量转为行向量
x=x';
% max(x)
% 得到向量x的长度
Length=length(x);
%%----------------------------------------------语音分帧------------------------------------------
% 每帧大小为M,当语音长度不是帧长的整数倍时:
% (1)若剩余长度大于等于帧长的二分之一,则补零至帧长
% (2)若剩余长度小于帧长的二分之一,则舍弃

% 用于计算声压级值的语音帧长分别为20ms、50ms、100ms、200ms以及500ms
framlen = 100;
% 每帧信号的离散点数
M=fs*framlen/1000;
% m为Length/M后得到的余数
m = mod(Length,M);
if m >= M/2 % 补零
    % 补零后的语音
    x = [x,zeros(1,M-m)];
    % 补零后的语音帧长
    Length = length(x);
else   % 即m < M/2,则将剩余的语音帧舍弃
    % l为Length/M后得到的商
    l = floor(Length/M);
    % 舍弃后的语音
    x = x(1,1:M*l);
    % 舍弃后的语音帧长
    Length = length(x);
end
% 最终的语音分帧总帧数
N = Length/M;
%%--------------------------------------------计算声压级-----------------------------------------
s = zeros(1,1:M);
% N帧信号的声压级值存储在spl向量里
spl = zeros(1,N);
for k = 1:N
    % 读取第k帧信号
    s = x((k-1)*M + 1:k*M);
    % 计算第k帧信号的声压级值
    spl(1,k) = SPLCal(s,fs,framlen);
end
%%------------------------------------------------画图--------------------------------------------
t = 1:Length;
SPL = zeros(1,Length);
for r = 1:N
    SPL(1,(r-1)*M+1:r*M) = spl(r);
end
figure(1)
subplot(211)
plot(t/fs,x);
grid on
xlabel('时间(s)');
title('输入语音波形');
subplot(212)
stairs(t/fs,SPL,'r');
grid on
[spl,freq]=iso226(phon);                    %计算声压级

figure(1)
semilogx(freq,spl,':','color','k')
axis([20,20000,-10,130])
title('Phon=50')
xlabel('频率(Hz)')
ylabel('声压级别(dB)')

三、运行结果

在这里插入图片描述

在这里插入图片描述

四、备注

版本:2014a
完整代码或代写加1564658423

标签:响度,声强,Length,fs,spl,声压级,语音,补零
来源: https://www.cnblogs.com/homeofmatlab/p/14941823.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有