OLA音频变速算法的仿真与剖析
前段时间,在尝试音乐节拍数的提取时,终于有了突破性的进展,效果基本上比市面上的许多商业软件还要好,在作节拍数检测时,高频信息作用不大,
通过重采样减小运算量。重采样让我想起了在学校里面做的变速变调算法,在这里顺便回顾一下。
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音频变速算法的仿真与剖析相关推荐
- 音频变速变调原理及 soundtouch 代码分析
音频变速变调原理及 soundtouch 代码分析 作者:floer rivor 2021 年 4 月 30 日 本文字数:5066 字 阅读完需:约 17 分钟 概述 音频变速变调在不同的场景可以分 ...
- 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----音频检测算法设计
(2条消息) [开发日志]2022.09.02 ZENO----Audio----Beat detection algorithm----Combine Wav&Mp3_minimp3 和 f ...
- 音视频开发之旅(66) - 音频变速不变调的原理
目录 声音的基本知识 时域压扩(TSM)的原理 波形相似叠加(WSOLA) 资料 收获 音频的原始pcm数据是由 采样率.采样通道数以及位宽而定.常见的音频采样率是44100HZ,即一秒内采样4410 ...
- 基于MATLAB的变速故障信号仿真代码
基于MATLAB的变速故障信号仿真代码 前言 一.仿真的方程 二.仿真效果图 三.完整代码下载 更多学习内容: 前言 轴承通常在时变转速条件下工作.对信号进行时频域处理,提取瞬时故障特征频率(IFCF ...
- Matlab音频变速不变调、变调不变速(Phase Vocoder)
其他文章有讲过一些方法,有OLA.WSOLA算法.LSEE-MSTFTM.Phase Vocoder(相位声码器)等等,但都是讲了个大概,没一个能说清楚的,代码就更没有了.找了一个国外的Phase V ...
- sonic音频变速不变调的原理分析
1.问题背景 音频的原始pcm(Pulse Code Modulation)数据是由采样频率.通道数以及采样精度(位宽)而决定.人耳能听到的频率范围是[20H~20kHz],所以常见的音频采样率是44 ...
- 基于傅里叶变换的音频重采样算法 (附完整c代码)
前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...
- 在matlab下实现TDOA定位算法性能仿真
一.题目 TDOA定位算法性能仿真 二.仿真要求 要求一:编写两个函数TDOA_CHAN和TDOA_Taylor得到位置的估计. 要求二:用RMSE实现两种算法的性能比较, 得到两种算法的RMSE曲线 ...
- TOA定位算法性能仿真
一.题目 TOA定位算法性能仿真 二.仿真要求 要求一:编写两个函数TOA_LLOP和TOA_CHAN得到位置的估计. 要求二:用RMSE实现两种算法的性能比较, 得到两种算法的RMSE曲线对比图,横 ...
最新文章
- linux dhcp 论文,毕业论文—基于linux的dhcp服务器配置.doc
- 科大星云诗社动态20210831
- 怎样利用好单片机上的存储器资源来实现OD的存储与访问
- 以当天日期时间,打包目录
- ebnf范式_使用Scala基于词法单元的解析器定制EBNF范式文法解析
- linux端口解析,linux中查看和开放端口详解
- 字符串hash(类似于进制的hash)
- 素MM 详解(C++)
- java学习笔记 --- 面向对象3
- 软件配合实现的“一键开关机电路
- cornell movie-dialogs corpus 康奈尔大学电影对话语料介绍及下载 可用于dialog,chatbot
- 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程监督与控制篇
- html怎么消除上下间距,html上下间距怎么调-电脑自学网
- Linux操作系统与Shell编程
- [论文解读]微信看一看实时Look-alike推荐算法
- 静态库与动态库(共享库)的联系与区别
- (python)改进的k-shell算法来识别关键节点 The improved k-shell algorithm(IKS)
- 软件公司如何才能接到项目
- 如何关闭Mysql后台运行
- 【随手记】共振峰的特性、与音高pitch
热门文章
- 在Unity中实现小地图(Minimap)
- CodeLite IDE for windows (一)安装及HelloWorld
- 我总是那么傻,爱的那么真,最后伤了自己:情感日志
- 设计水花飞溅柠檬汽水饮料广告的PS教程
- doom渲染_DOOM今天改变了比赛25年
- 太空上新 | 张肇达 张凯惠:嫦娥奔月有了现实版
- Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers
- 你的电脑遇到问题,需要重新启动的解决思路
- PHP获取微信用户手机号
- HX711 24位A/D模块计算公式