• 计算有效声压


    1. 计算有效声压
    2. clear all;
    3. %%----------------------------------------------读取文件------------------------------------------
    4. % 从wav文件读入语音数据,该语音采样率16k,故信号最高频率8k。
    5. [x,fs]=audioread('C2_3_y.wav');
    6. % 取x的一个通道
    7. x=x(:,1);
    8. % 将x从列向量转为行向量
    9. x=x';
    10. % max(x)
    11. % 得到向量x的长度
    12. Length=length(x);
    13. %%----------------------------------------------语音分帧------------------------------------------
    14. % 每帧大小为M,当语音长度不是帧长的整数倍时:
    15. % (1)若剩余长度大于等于帧长的二分之一,则补零至帧长
    16. % (2)若剩余长度小于帧长的二分之一,则舍弃
    17. % 用于计算声压级值的语音帧长分别为20ms、50ms、100ms、200ms以及500ms
    18. framlen = 100;
    19. % 每帧信号的离散点数
    20. M=fs*framlen/1000;
    21. % m为Length/M后得到的余数
    22. m = mod(Length,M);
    23. if m >= M/2 % 补零
    24. % 补零后的语音
    25. x = [x,zeros(1,M-m)];
    26. % 补零后的语音帧长
    27. Length = length(x);
    28. else % 即m < M/2,则将剩余的语音帧舍弃
    29. % l为Length/M后得到的商
    30. l = floor(Length/M);
    31. % 舍弃后的语音
    32. x = x(1,1:M*l);
    33. % 舍弃后的语音帧长
    34. Length = length(x);
    35. end
    36. % 最终的语音分帧总帧数
    37. N = Length/M;
    38. %%--------------------------------------------计算声压级-----------------------------------------
    39. s = zeros(1,M);
    40. % N帧信号的声压级值存储在spl向量里
    41. spl = zeros(1,N);
    42. for k = 1:N
    43. % 读取第k帧信号
    44. s = x((k-1)*M + 1:k*M);
    45. % 计算第k帧信号的声压级值
    46. spl(1,k) = SPLCal(s,fs,framlen);
    47. end
    48. %%------------------------------------------------画图--------------------------------------------
    49. t = 1:Length;
    50. SPL = zeros(1,Length);
    51. for r = 1:N
    52. SPL(1,(r-1)*M+1:r*M) = spl(r);
    53. end
    54. figure(1)
    55. subplot(211)
    56. plot(t/fs,x);
    57. grid on
    58. xlabel('时间(s)');
    59. title('输入语音波形');
    60. subplot(212)
    61. stairs(t/fs,SPL,'r');
    62. grid on
    63. xlabel('时间(s)');
    64. ylabel('声压级(dB)');
    65. title('语音信号的声压级(dB)');
    1. 读取语音文件

      使用 audioread 函数读取 WAV 格式的语音文件,并获取其采样率 fs
    2. 语音分帧

      将语音信号分成若干帧,每帧的长度由 framlen 决定。如果语音长度不是帧长的整数倍,则进行补零或舍弃操作。
    3. 计算声压级

      对每一帧的语音信号计算声压级值,并存储在 spl 向量中。
    4. 绘制图形

      绘制原始语音波形和对应的声压级图形。

  • 相关阅读:
    FreeRTOS 内存管理
    [附源码]计算机毕业设计基于Springboot学生社团信息管理系统
    YOLOv8检测obb标注hrsc数据集
    安全测试前置实践1-白盒&黑盒扫描
    回顾nacos的一次严重事故,节点意外全部离线
    java计算机毕业设计桂林恒保健康防护有限公司官网MyBatis+系统+LW文档+源码+调试部署
    ECC有关DER文件的解析(Java)
    安卓逆向 | 某H新闻类APP Secret
    SpringBoot-MQTT实现消息的发布订阅
    iOS-iOS在h5中判断手机是否装了app
  • 原文地址:https://blog.csdn.net/weixin_31268759/article/details/138531112