当前位置: 首页 > news >正文

【ESP32-LLM项目】计算音频信号RMS值的函数

下面这个函数是什么作用
float calculateRMS(uint8_t *buffer, int bufferSize)
{float sum = 0;int16_t sample;for (int i = 0; i < bufferSize; i += 2){sample = (buffer[i + 1] << 8) | buffer[i];sum += sample * sample;}sum /= (bufferSize / 2);return sqrt(sum);
}
 

这个函数用于计算音频信号的RMS(Root Mean Square,均方根)值,这是一种衡量信号幅度的方法。

函数功能详解:

1. 参数说明

  • buffer: 指向音频数据缓冲区的指针

  • bufferSize: 缓冲区总大小(字节数)

2. 数据处理流程

步骤1:提取16位音频样本

sample = (buffer[i + 1] << 8) | buffer[i];
  • 将每2个字节组合成一个16位有符号整数

  • 假设是小端字节序(低位在前,高位在后)

  • buffer[i] 是低字节,buffer[i + 1] 是高字节

步骤2:计算平方和

sum += sample * sample;
  • 对每个样本值求平方并累加

步骤3:计算平均值

sum /= (bufferSize / 2);
  • 除以样本数量(bufferSize/2 因为每2字节一个样本)

  • 得到均方值(Mean Square)

步骤4:开方得到RMS

return sqrt(sum);
  • 对均方值开方,得到RMS值

3. 应用场景

  • 音频电平测量:RMS能准确反映音频信号的平均功率

  • 音量检测:比峰值检测更能代表人耳感知的音量

  • 信号强度分析:在音频处理、语音识别中常用

4. 示例

如果输入是16位PCM音频数据,这个函数会返回一个表示音频信号"平均音量"的浮点数值,数值越大表示音量越大

 
 
 
 

对应的数学公式

这个函数对应的数学公式是:

RMS(均方根)计算公式:

RMS=1N∑i=0N−1xi2

其中:

公式分解:

1. 平方和(对应代码中的循环):

∑i=0N−1xi2=x02+x12+⋯+xN−12

2. 求平均值(对应 sum /= (bufferSize / 2)):

Mean Square=1N∑i=0N−1xi2

3. 开平方根(对应 sqrt(sum)):

RMS=1N∑i=0N−1xi2

具体到代码中的变量:

  • N=bufferSize2 (样本数量)

  • xi = sample (第i个16位音频样本)

  • ∑xi2 = sum (平方累加和)

完整计算过程:

RMS=∑i=0(bufferSize/2)−1samplei2bufferSize/2

这个公式衡量的是信号的有效值,对于音频信号来说,RMS值反映了信号的平均功率水平。

http://www.hskmm.com/?act=detail&tid=36206

相关文章:

  • Linux消息队列如何查看与排查问题?
  • CF2007B Index and Maximum Value
  • 2022 ICPC Jinan DG and 2022 ICPC Nanjing
  • 图像分割 sam1 - MKT
  • SDL-1
  • CF1206B Make Product Equal One
  • 软件工程第三次作业----结对项目
  • 关于莫比乌斯函数的应用1
  • 用deepseek写的一个求原根的程序
  • 操作备忘:在AE中让视频中间部分变慢
  • 记一次精简系统Windows11英文版离线安装中文语言包的过程
  • 阿里巴巴数据库开发手册
  • AI元人文:赋能公共治理、司法与监管的价值权衡新范式
  • 基础的sql练习,全都理解你就是高手了!
  • nginx快速实现平滑版本升级
  • Luogu P11159 【MX-X6-T5】 再生 题解 [ 蓝 ] [ 前缀和 ] [ 组合计数 ]
  • 王浩宇 102500416
  • 程序员修炼之路:从小工到专家 读书笔记 2
  • 程序员修炼之路:从小工到专家 读书笔记 3
  • 中级问题
  • 2025.10.21
  • 解答在同步以太坊事件数据时,如何保证后端服务在 API/RPC 不稳定情况下的可用性
  • 程序员修炼之道:从小工到专家 读书笔记 1
  • 好想好想你
  • 10.21日学习笔记
  • 数据库概述
  • 第1天(简单题 基础语法 数据类型、条件判断 、循环 循环嵌套、位运算, ASCII 码)
  • 24信计2班 17曾向嵩 pytorch读书报告
  • 关于第一次作业的时长统计
  • Go 语言问题解释