博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OLA音频变速算法的仿真与剖析
阅读量:6420 次
发布时间:2019-06-23

本文共 1624 字,大约阅读时间需要 5 分钟。

      前段时间,在尝试音乐节拍数的提取时,终于有了突破性的进展,效果基本上比市面上的许多商业软件还要好,在作节拍数检测时,高频信息作用不大,

通过重采样减小运算量。重采样让我想起了在学校里面做的变速变调算法,在这里顺便回顾一下。

      OLA(Overlap-and-Add, OLA)重叠叠加算法是音频变速算法中最简单的时域方法,它是后续时域算法(SOLA, SOLA-FS, TD-PSOLA, WSOLA)的基础。

      OLA分为分解与合成两个部分,公式看起来很复杂,所以不贴出了,基本思路从图中更能清晰的表现出来。

      

     

      分解阶段:语音首先分帧,帧长为N,假设帧移为Sa。

      合成阶段:分解出来的语音帧,以帧移为Ss的间隔重新合成起来,得到变速之后的音频。

      Rate = Ss/ Sa,如果Sa=Ss,则原速;Ss<Sa时,加速;Ss>Sa时,减速。

      功能性代码:

     

function [ RSound ] = OLA(Speech, Fs, Rate)%OLA Summary of this function goes here%   Detailed explanation goes here    frame_ms = 25;    frame_len = frame_ms * Fs /1000;    window = hanning(frame_len);    Sa = 1/2 * frame_len;    AnalysisSplice = enframe(Speech, window, Sa);    AnalysisSplice = AnalysisSplice';%each column corresponding to each frame data    Ss = Rate*Sa;    RSound = Synthesis(AnalysisSplice, Ss);endfunction  RSound = Synthesis(AnalysisSplice, Ss)    [frame_len, nframes] = size(AnalysisSplice);    N = Ss*(nframes - 1) + frame_len;    RSound = zeros(1, N);    for q = 1:nframes       RSound(1 + (q-1)* Ss : frame_len + (q-1)*Ss) = RSound(1 + (q-1)* Ss   :  frame_len + (q-1)*Ss) +  AnalysisSplice(:,q)';    endend

Script执行代码:

clc;clear;close all;Path = 'D:\Experiment\OLA\';file = [Path, 'test.wav'];faster = [Path, 'faster.wav'];[Speech, Fs] = wavread(file);Rate = 0.7;%wavread wavwrite enframe function comes from voicebox toolsRSound = OLA(Speech,Fs,Rate);wavwrite(RSound,Fs,faster);figure;subplot(2,1,1);plot(Speech);title('original');axis([1 length(Speech) -0.5 0.5]);subplot(2,1,2);plot(RSound);title('0.7 faster');axis([1 length(Speech) -0.5 0.5]);

变速前后的时域波形对比图

      OLA算法在重叠部分会造成基频断裂,甚至语音失真。所以后期许多算法基于此缺点进行了相关的改进。

测试文件:

来自:

          

 

 

转载地址:http://eclra.baihongyu.com/

你可能感兴趣的文章
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
代理模式
查看>>
javaweb学习总结(二十四)——jsp传统标签开发
查看>>
让script的type属性等于text/html
查看>>
HA 高可用软件系统保养指南
查看>>
linux 文件系统sysvinit 流程分析
查看>>
体素科技:2018年,算法驱动下的医学影像分析进展
查看>>
Vue 折腾记 - (8) 写一个挺靠谱的多地区选择组件
查看>>
VS Code折腾记 - (3) 多图解VSCode基础功能
查看>>
『翻译』Node.js 调试
查看>>
我的iOS开发之路总结(更新啦~)
查看>>
Java NIO之拥抱Path和Files
查看>>
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
查看>>
微信小程序教学第三章(含视频):小程序中级实战教程:列表篇-页面逻辑处理...
查看>>
页面间通信与数据共享解决方案简析
查看>>
Swift 中 Substrings 与 String
查看>>
作为一个开源软件的作者是一种什么样的感受?
查看>>
移动端适配知识你到底知多少
查看>>
TiDB 在 G7 的实践和未来
查看>>