“语音信号数字处理”的版本间的差异
(→逐帧计算音高) |
(→ACF音高追踪案例) |
||
(未显示同一用户的8个中间版本) | |||
第19行: | 第19行: | ||
由一个音框计算出音高的方法很多,可以分为时域和频域两大类: | 由一个音框计算出音高的方法很多,可以分为时域和频域两大类: | ||
− | # 时域(Time Domain) | + | # 时域 (Time Domain) |
− | + | #* ACF (Autocorrelation function),自相关函数 | |
− | + | #* AMDF (Average magnitude difference function),平均强度差分函数 | |
− | + | #* SIFT (Simple inverse filter tracking) | |
− | # 频域(Frequency Domain) | + | # 频域 (Frequency Domain) |
− | + | #* Harmonic product spectrum method | |
− | + | #* Cepstrum method | |
+ | |||
+ | =====ACF音高追踪案例===== | ||
+ | [[文件:ACFfunction.jpg]] | ||
====筛值==== | ====筛值==== |
2022年11月15日 (二) 06:43的最新版本
百科首页 | 3D虚拟世界 | 音乐与人工智能 | 人工智能机器人 | 关于我们 | 网站首页
音高追踪
基本流程
分帧
将整段音讯讯号切成音框(Frames),相邻音框之间可以重叠。
在切音框的过程中,我们允许左右音框的重叠,因此,我们定义「音框率」(Frame Rate)是每秒钟所出现的音框个数,如果取样频率是11025,音框长度是256 点,重叠点数是84,那么音框率就是11025/(256-84) = 64,换句话说,我们的电脑要能够每秒钟处理64个音框,才能达到实时处理的要求。我们让音框重叠的目的,只是希望相邻音框之间的变化不会太大,使输出的音高曲线更具有连续性。但是在实际应用时,音框的重叠也不能太大,否则会造成计算量的过大。
一般有以下考虑:
· 音框长度至少必须包含2 个基本周期以上,才能显示语音的特性。已知人声的音高范围大约在50 Hz 至1000 Hz 之间,因此对于一个的取样频率,我们就可以计算出音框长度的最小值。例如,若取样频率fs = 8000 Hz,那么当音高f = 50 Hz(例如男低音的歌声)时,每个基本周期的点数是fs/f = 8000/50 = 160,因此音框必须至少是320 点;若音高是1000 Hz(例如女高音的歌声)时,每个基本周期的点数是8000/1000 = 8,因此音框必须至少是16 点。 · 音框长度也不能太大,太长的音框无法抓到音讯的特性随时间而变化的细微现象,同时计算量也会变大。 · 音框之间的重叠完全是看计算机的运算能力来决定,若重叠多,音框率就会变大,计算量就跟着变大。若重叠少(甚至可以不重叠或跳点),音框率就会变小,计算量也跟着变小。
逐帧计算音高
算出每个音框所对应的音高。
由一个音框计算出音高的方法很多,可以分为时域和频域两大类:
- 时域 (Time Domain)
- ACF (Autocorrelation function),自相关函数
- AMDF (Average magnitude difference function),平均强度差分函数
- SIFT (Simple inverse filter tracking)
- 频域 (Frequency Domain)
- Harmonic product spectrum method
- Cepstrum method
ACF音高追踪案例
筛值
排除不稳定的音高值。(可由音量来筛选,或由音高值的范围来过滤。)
平滑
对整段音高进行平滑化,通常是使用「中位数滤波器」(Median Filters)。