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

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

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 hereframe_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 dataSs = 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:nframesRSound(1 + (q-1)* Ss : frame_len + (q-1)*Ss) = RSound(1 + (q-1)* Ss   :  frame_len + (q-1)*Ss) +  AnalysisSplice(:,q)';end
end

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 tools
RSound = 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://pan.baidu.com/s/1hq4540G

来自:http://www.cnblogs.com/welen

http://blog.csdn.net/weiqiwu1986

转载于:https://www.cnblogs.com/welen/p/3889576.html

OLA音频变速算法的仿真与剖析相关推荐

  1. 音频变速变调原理及 soundtouch 代码分析

    音频变速变调原理及 soundtouch 代码分析 作者:floer rivor 2021 年 4 月 30 日 本文字数:5066 字 阅读完需:约 17 分钟 概述 音频变速变调在不同的场景可以分 ...

  2. 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----音频检测算法设计

    (2条消息) [开发日志]2022.09.02 ZENO----Audio----Beat detection algorithm----Combine Wav&Mp3_minimp3 和 f ...

  3. 音视频开发之旅(66) - 音频变速不变调的原理

    目录 声音的基本知识 时域压扩(TSM)的原理 波形相似叠加(WSOLA) 资料 收获 音频的原始pcm数据是由 采样率.采样通道数以及位宽而定.常见的音频采样率是44100HZ,即一秒内采样4410 ...

  4. 基于MATLAB的变速故障信号仿真代码

    基于MATLAB的变速故障信号仿真代码 前言 一.仿真的方程 二.仿真效果图 三.完整代码下载 更多学习内容: 前言 轴承通常在时变转速条件下工作.对信号进行时频域处理,提取瞬时故障特征频率(IFCF ...

  5. Matlab音频变速不变调、变调不变速(Phase Vocoder)

    其他文章有讲过一些方法,有OLA.WSOLA算法.LSEE-MSTFTM.Phase Vocoder(相位声码器)等等,但都是讲了个大概,没一个能说清楚的,代码就更没有了.找了一个国外的Phase V ...

  6. sonic音频变速不变调的原理分析

    1.问题背景 音频的原始pcm(Pulse Code Modulation)数据是由采样频率.通道数以及采样精度(位宽)而决定.人耳能听到的频率范围是[20H~20kHz],所以常见的音频采样率是44 ...

  7. 基于傅里叶变换的音频重采样算法 (附完整c代码)

    前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...

  8. 在matlab下实现TDOA定位算法性能仿真

    一.题目 TDOA定位算法性能仿真 二.仿真要求 要求一:编写两个函数TDOA_CHAN和TDOA_Taylor得到位置的估计. 要求二:用RMSE实现两种算法的性能比较, 得到两种算法的RMSE曲线 ...

  9. TOA定位算法性能仿真

    一.题目 TOA定位算法性能仿真 二.仿真要求 要求一:编写两个函数TOA_LLOP和TOA_CHAN得到位置的估计. 要求二:用RMSE实现两种算法的性能比较, 得到两种算法的RMSE曲线对比图,横 ...

最新文章

  1. linux dhcp 论文,毕业论文—基于linux的dhcp服务器配置.doc
  2. 科大星云诗社动态20210831
  3. 怎样利用好单片机上的存储器资源来实现OD的存储与访问
  4. 以当天日期时间,打包目录
  5. ebnf范式_使用Scala基于词法单元的解析器定制EBNF范式文法解析
  6. linux端口解析,linux中查看和开放端口详解
  7. 字符串hash(类似于进制的hash)
  8. 素MM 详解(C++)
  9. java学习笔记 --- 面向对象3
  10. 软件配合实现的“一键开关机电路
  11. cornell movie-dialogs corpus 康奈尔大学电影对话语料介绍及下载 可用于dialog,chatbot
  12. 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程监督与控制篇
  13. html怎么消除上下间距,html上下间距怎么调-电脑自学网
  14. Linux操作系统与Shell编程
  15. [论文解读]微信看一看实时Look-alike推荐算法
  16. 静态库与动态库(共享库)的联系与区别
  17. (python)改进的k-shell算法来识别关键节点 The improved k-shell algorithm(IKS)
  18. 软件公司如何才能接到项目
  19. 如何关闭Mysql后台运行
  20. 【随手记】共振峰的特性、与音高pitch

热门文章

  1. 在Unity中实现小地图(Minimap)
  2. CodeLite IDE for windows (一)安装及HelloWorld
  3. 我总是那么傻,爱的那么真,最后伤了自己:情感日志
  4. 设计水花飞溅柠檬汽水饮料广告的PS教程
  5. doom渲染_DOOM今天改变了比赛25年
  6. 太空上新 | 张肇达 张凯惠:嫦娥奔月有了现实版
  7. Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers
  8. 你的电脑遇到问题,需要重新启动的解决思路
  9. PHP获取微信用户手机号
  10. HX711 24位A/D模块计算公式