当前课程知识点:计算机音乐 > 第二章 时域音频处理 > 2.3 分窗处理2:音量计算 > 分窗处理2 音量计算
让我们来继续看一下
分窗处理在音量计算上的应用
尽管时域的音频信号中的振幅本身
就是具有一定的音量的信息的
但是像我们前面讨论的一样
只有这些点在逐点振动的时间上面
进行累积
才能够体现出能量的信息
因而才能够感受到音频信号的音量
因此实际上音量也是一种局部的概念
我们也可以通过时窗分析的方法
来逐个窗口的进行音量的计算
也就是说窗口是音量计算的一个前提
我们只有在决定好窗口的范围
例如从序号M开始
走过一个宽度为N的窗口
也就是说我们要去计算
从XM到XM加N减1这么多的数据
才能够去计算出窗口的音量
音量有很多种度量的方法
比如最简单的就是去
获取窗口中振幅最大的点
比如说它的峰值来作为度量
但这种方法通常会受到
个别的异常的采样点的影响
从而过大的估计音量
更为常用的一种方法是统计窗口的平均能量
平均能量可以用窗口内的数据的
平方平均来定义
当然了
因为能量跟振幅的量纲上是不一致的
所以为了能够更方便地做数值上的比较
我们更常用的一种方法是
使用平均能量的开方
也就是被我们称之为均方根
Root Mean Square RMS
来衡量一个窗口内的音量
在这个图中我们可以很好的来看到
在一个窗口之内
峰值以及RMS的一个关系
那么一般来说
RMS是一定会比峰值要小的
因为它是窗口内的数据的某种平均值
具体来说对一个正弦波来说
RMS大约是峰值的根号2分之1
接下来我们可以做一个具体的计算
那么根据RMS的定义
假设我们输入的信号是正弦波
XN等于一个这样的一个正弦波的形式
RMS根据定义
它是平方和的开方
也就是平方和
那么平方和我们刚才说
是对一个窗口之内去计算平方和
之后再开方
那么当然如果我们的窗口里面的数据
足够密集
我们也可以把它当做一个连续的信号来看
因此求和其实是可以用积分来代替
比如说我们把求和就写成积分的形式
积分的范围也是在一个窗口的范围
那么如果这数据足够密集
并且这个窗口选择比较合适的话
我们也可以把这个范围就
规定在一个周期之内
去计算XN的平方
这应该是TDT然后最后再开方
这时候我们把三角函数给进行一个代入
那么它将会得到
cos平方ωTDT
前面还有一个系数是A平方
那么是从零到T进行积分
那么接下来我们就可以使用
我们在高中时候学过的一个
叫做倍角公式对平方向进行展开
那么我们可以把这一段
写成2分之1 1加cos 2ωT的形式
那么显然cosωT
在一个周期之内的积分
它一定是会变成零
那么也就是说
这个积分只保留2分之1这样的一个常数项
因此它最终的计算结果
就是根号2分之a
在上一章中我们使用了
分贝作为振幅的度量
设定参考声强是a0
我们可以用20倍的log a除a0
作为振幅a的度量
那么单位是分贝
因此RMS与振幅其实是同一个量纲
所以我们可以用分贝作为单位来衡量音量
接下来我们就来演示一下
如何在计算机程序中
使用分窗处理的方法来计算音量RMS
并且将不同时刻的RMS显示在时间轴上
从而绘制RMS的曲线
接下来我们就使用python来完成
RMS的计算的过程
那么在刚才的分窗函数的基础之上
我们同样是需要设定一下窗口的大小
比如说我们用512个采样点
那么这次的窗口间隔
我们设置成一个采样点
也就是说每个采样点
我们都要去计算一下
它的窗口大小是512的RMS的值
那么在读完这个信号之后
这次我们需要做一件事情
就是它的一个初始化
那么我们对着X除以max X
或者我们再加上ABS这个绝对值X
做这样一个处理之后
我们就一定能够保证X是在-1到1之间
这样话我们就可以做接下来的处理了
比如说我们令RMS
是一个是对它进行初始化
用frame我们进行一个初始化
当然这个事情是需要做完分窗之后的
我们要做完france
frameNUM
用这个写好的分窗函数进行分窗
好 做完分窗之后初始化一下RMS
然后我们就可以去每个窗口的计算RMS的
那么for I in range
farmer NUM
去计算一下每个窗口的RMS的值
那么RMS每个窗口的值
就是这个窗口里面的平方平均在开方
所以我们首先要做一个平方
自己乘自己就是平方了
做完平方之后
我们需要做一个平均值
然后最后再做一个开方
所以我们注意一定要使用
numpy下面的这些数学运算
比如说取平均或者去开方
因为numpy下面的这些函数
是可以处理列表类型的
好 这样做完之后
我们就可以对RMS进行一个输出了
进行一个显示了
我们通过 下面的plt点plot
先把X给显示出来
再把RMS给显示出来
然后去进行show
最后我们运行一下
可以看到RMS的整个曲线
大致地描述了一段
音频信号它的强度的大小
那么现在我们如果放大一下
会看到这段RMS曲线还是比较曲折的
因为我们取得窗口的长度并不是很大
所以它会有一个
沿着音频信号的曲线变化进行
一个细节的变化的一个特点
如果我们在取参数的时候
选择窗口大小
如果选大一点
比如1024个采样点的这样一个窗口
我们再去运行一下
你会看到现在的RMS包曲线
比刚才就要更加的平滑一点
如果进一步加大到加大到2048
这么多个采样点
那么你就会看到RMS曲线
就会变得非常的光滑
当然在变得非常光滑同时
会看到它的起伏会比原来更加的提早
那么原因是因为我们在这个点的时候
我们就要计算这个点后面的2048个点的
这些点所形成的RMS的取值
那么这样是会有一些提早的
那么如果想去掉这个事情
我们就需要在选择窗口的时候
以每个点作为中心点去选择这个窗口
而不是以它为起始点去选择这个窗口
那么这件事情就交给同学们课下进行练习
那么这就是有关用分窗的处理
进行音量计算的方法
-欢迎辞
-1.1 计算机音乐导言
--计算机音乐导言
-1.2 计算机音乐课程主要内容
-1.3计算机音乐课程资源
-1.4 音乐的基本表达
--音乐的基本表达
-第一章作业
-2.1时域音频处理概述
--时域音频处理概述
-2.2 分窗处理1:OLA叠放
-2.3 分窗处理2:音量计算
-2.4 端点检测
--端点检测
-2.5 振幅包络
--振幅包络
-2.6 音频信号相乘
--音频信号相乘
-2.7 环形调制
--环形调制
-2.8 频率调制
--频率调制
-2.9 频率调制在音乐上的应用
-第二章作业
-3.1 频谱概述
--频谱概述
-3.2 傅里叶变换
--傅里叶变换
-3.3 短时傅里叶变换
--短时傅里叶变换
-3.4 加法合成
--加法合成
-3.5 线性滤波器
--线性滤波器
-3.6 京剧锣鼓经分析
--京剧锣鼓经分析
-第三章作业
-4.1 音色合成概述
--音色合成概述
-4.2 质点弹簧阻尼模型
--质点弹簧阻尼模型
-4.3 双线性滤波器
--双线性滤波器
-4.4 Modal合成
--Modal合成
-第四章测试
-5.1 一维振动模型概述
--一维振动模型概述
-5.2 弦振动模型
--弦振动模型
-5.3 达朗贝尔的行波解
--达朗贝尔的行波解
-5.4 梳状滤波器
--梳状滤波器
-5.5 Karplus Strong算法
-5.6 管状气鸣乐器模型
--管状气鸣乐器模型
-第五章作业
-6.1 音高跟踪概述
--音高跟踪
-6.2 时域音高跟踪
--时域音高跟踪
-6.3 频域音高跟踪
--频域音高跟踪
-6.4 K歌评分
--K歌评分
-第六章作业
-7.1 音频同步概述
--音频同步概述
-7.2 音乐特征提取 CQT
-7.3 音乐特征提取 Chroma
-7.4 动态时间规划概述
--动态时间规划概述
-7.5 动态时间规划实现
--动态时间规划实现
-第七章作业