延星

时间拉伸音频

描述

例子

音频输出= stretchAudio (AUDIOINα由TSM因子对输入音频适用时间标修改(TSM)α

例子

音频输出= stretchAudio (AUDIOINα名称,价值使用一个或多个指定选项名称,价值对论点。

例子

全部收缩

读入音频信号。听音频信号,随着时间的推移把它画出来。

[AudioIn,FS] = audioread(“计数-16-44p1单 -  15secs.wav”);t =(0:大小(audioIn, 1) 1) / fs;情节(t, audioIn)包含('时间(s)')ylabel('振幅') 标题('原始信号')轴紧的网格

声音(audioIn fs)

延星申请1.5加速因子。听修改后的音频信号,并随着时间的推移绘制它。采样率保持不变,但信号的持续时间降低。

AudioOut = LigressAudio(AudioIn,1.5);T =(0:尺寸(AUDIOOUT,1)-1)/ FS;情节(t, audioOut)包含('时间(s)')ylabel('振幅') 标题(“修改的信号,加速比= 1.5”)轴紧的网格

声音(频道,FS)

将原始音频信号降低0.75倍。听修改后的音频信号,并随着时间的推移绘制它。采样率与原始音频保持一致,但信号持续时间有所增加。

AUDIOOUT = stretchAudio(AUDIOIN,0.75);T =(0:尺寸(AUDIOOUT,1)-1)/ FS;情节(t, audioOut)包含('时间(s)')ylabel('振幅') 标题('修正信号,加速因子= 0.75')轴紧的网格

声音(频道,FS)

延星万博1manbetx使用默认的声码器方法时支持TSM上频域音频。TSM应用到频域音频让你重用你的STFT计算多个TSM因素。

读入音频信号。听音频信号,随着时间的推移把它画出来。

[AudioIn,FS] = audioread(“FemaleSpeech-16-8-mono-3secs.wav”);sound(audioIn,fs) t = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含('时间(s)')ylabel('振幅') 标题('原始信号')轴紧的网格

将音频信号转换到频域。

赢得=√损害(256“周期”));ovrlp = 192;S = stft (audioIn'窗户',赢,“OverlapLength”ovrlp,“中心”,错误的);

将音频信号加速1.4倍。指定用于创建频域表示的窗口和重叠长度。

阿尔法= 1.4;AUDIOOUT = stretchAudio(S,α,'窗户',赢,“OverlapLength”, ovrlp);sound(audioOut,fs) t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含('时间(s)')ylabel('振幅') 标题('修正信号,TSM因子= 1.4')轴紧的网格

将音频信号减慢0.8倍。指定用于创建频域表示的窗口和重叠长度。

阿尔法= 0.8;AUDIOOUT = stretchAudio(S,α,'窗户',赢,“OverlapLength”, ovrlp);sound(audioOut,fs) t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含('时间(s)')ylabel('振幅') 标题('修正信号,TSM因子= 0.8')轴紧的网格

默认的TSM方法(声码器),可以申请额外相位锁定,以增加忠实于原始音频。

读入音频信号。听音频信号,随着时间的推移把它画出来。

[AudioIn,FS] = audioread(“SpeechDFT-16-8-单5secs.wav”);sound(audioIn,fs) t = (0:size(audioIn,1)-1)/fs;情节(t, audioIn)包含('时间(s)')ylabel('振幅') 标题('原始信号')轴紧的网格

锁相为TSM增加了一个重要的计算负载,而且并不总是必需的。缺省情况下,禁止锁相。对输入音频信号应用1.8的加速因子。听音频信号,随着时间的推移把它画出来。

α= 1.8;tic audioOut = stretchAudio(audioIn,alpha);processingTimeWithoutPhaseLocking = toc
processingTimeWithoutPhaseLocking = 0.0798
sound(audioOut,fs) t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含('时间(s)')ylabel('振幅') 标题('Modified Signal, alpha = 1.8, LockPhase = false')轴紧的网格

应用相同的1.8加速因子对输入音频信号,此时使相位锁定。听音频信号,随着时间的推移把它画出来。

tic audioOut = stretchAudio(audioIn,alpha,“LockPhase”,真正的);processingTimeWithPhaseLocking = toc
ProcessingTimewithPhaseLocking = 0.1154.
sound(audioOut,fs) t = (0:size(audioOut,1)-1)/fs;情节(t, audioOut)包含('时间(s)')ylabel('振幅') 标题('修改的信号,α-= 1.8,LockPhase =真')轴紧的网格

波形相似度重叠 - 添加(WSOLA)TSM方法使您可以指定用于搜索最佳信号对齐的最大样本数。默认情况下,WSOLA Delta是分析窗口中的样本数减去相邻分析窗口之间重叠的样本数量。增加WSOLA Delta增加了计算负荷,但也可能增加保真度。

读入音频信号。听听音频信号的前10秒。

[AudioIn,FS] = audioread('Rockguitar-16-96-Stereo-72secs.flac');声音(audioIn (1:10 * fs,:), fs)

使用WSOLA方法对输入音频信号应用0.75的TSM因子。听产生的音频信号的前10秒。

alpha = 0.75;tic audioOut = stretchAudio(audioIn,alpha,“方法”“WSOLA”);processingTimeWithDefaultWSOLADelta = TOC
processingTimeWithDefaultWSOLADelta = 19.4403
声音(audioOut (1:10 * fs,:), fs)

对输入音频信号应用0.75的TSM因子,这次将WSOLA增量增加到1024。听产生的音频信号的前10秒。

tic audioOut = stretchAudio(audioIn,alpha,“方法”“WSOLA”“WSOLADelta”, 1024);processingTimeWithIncreasedWSOLADelta = toc
processingTimeWithIncreasedWSOLADelta = 25.5306
声音(audioOut (1:10 * fs,:), fs)

输入参数

全部收缩

输入信号,指定为列向量,矩阵,或3-d阵列。如何解释功能AUDIOIN取决于复杂性AUDIOIN和值方法

  • 如果AUDIOIN是真实的,AUDIOIN被解释为时域信号。在这种情况下,AUDIOIN必须是列向量或矩阵。列被解释为单独的通道。

    此语法适用于当方法被设定为声码器的或者'WSOLA'

  • 如果AUDIOIN是复杂的,AUDIOIN被解释为频域信号。在这种情况下,AUDIOIN必须是l-经过--经过-N数组,l是fft长度,是个人频谱的数量,和N为通道的数量。

    此语法仅适用于以下情况方法被设定为声码器的

数据类型:|双倍的
复数的支持:万博1manbetx是的

TSM因素,指定为正标量。

数据类型:|双倍的

名称值对参数

指定可选的逗号分隔的对名称,价值论点。的名字参数名和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:'窗口',kbdwin(512)

方法用于时间尺度音频,指定为逗号分隔的一对组成的“方法”声码器的或者'WSOLA'.放“方法”声码器的使用相位声码器的方法。放“方法”'WSOLA'使用WSOLA方法。

如果“方法”被设定为声码器的AUDIOIN可以是实的,也可以是复杂的。如果“方法”被设定为'WSOLA'AUDIOIN必须是真实的。

数据类型:|双倍的

在时域中应用的窗口,指定为逗号分隔对组成'窗户'一个实向量。向量中的元素个数必须在范围[1,大小(AUDIOIN,1)]。元件的载体中的数量也必须大于OverlapLength

请注意

如果使用延星对于频域输入,您必须指定窗口作为同一个窗口用于转化AUDIOIN到频域。

数据类型:|双倍的

在相邻窗口之间重叠的样本数,指定为包括的逗号分隔对“OverlapLength”和一个范围为[0,元素个数(窗口))。

请注意

如果使用延星对于频域输入,您必须指定OverlapLength作为相同的重叠长度用于转化AUDIOIN到时频表示。

数据类型:|双倍的

应用身份锁相,指定为包括的逗号分隔对'LockPhase'错误的或者真的

依赖关系

为了使这个名字 - 值对参数,设置方法声码器的

数据类型:逻辑

用于搜索最佳信号对准样本的最大数目,指定为逗号分隔的一对组成的'WSOLADelta'和一个非负标量。

依赖关系

为了使这个名字 - 值对参数,设置方法'WSOLA'

数据类型:|双倍的

输出参数

全部收缩

时标修正的音频,返回作为独立信道的一个列向量或矩阵。

算法

全部收缩

相位声码器

相位声码器的算法是一个频域的方法来TSM[1][2].相位声码器算法的基本步骤是:

  1. 算法Windows间隔η时的时域信号η= numel(窗口) -OverlapLength.然后窗口被转换到频域。

  2. 为了保持水平(跨时间)相一致,该算法将每个箱作为一个独立的正弦曲线,其相位通过累积其瞬时频率的估算值计算出来。

  3. 为了保持垂直(横跨单个谱)相一致,该算法锁定仓到的局部峰值的相位超前的基团的相位超前。此步骤只适用于锁链被设定为真的

  4. 该算法将修改后的谱图返回到时域,窗口间隔为δ,其中δ≈η/α。α是由的指定的加速因子α输入参数。

WSOLA

该WSOLA算法是一个时域的方法来TSM[1][2].WSOLA是重叠相加(OLA)算法的扩展。在OLA算法,一个时域信号在间隔η,其中加窗η= numel(窗口) -OverlapLength.构造时间尺度修改的输出音频时,窗口被在间隔δ,其中δ≈η/α隔开。α是由指定的TSM因子α输入参数。

OLA算法在重建幅值谱方面做得很好,但会在窗口之间引入相位跳变。WSOLA算法通过搜索来平滑相位跳变WSOLADelta周围最小化相位跳变的窗口的间隔η样品。最佳窗口算法搜索迭代,以便每一个连续的窗口相对于先前选择的窗口中选择。

如果WSOLADelta被设定为0,则算法简化为OLA。

参考

[1] Driedger,乔纳森,和Meinard穆勒。“回顾音乐信号的时标修改的。”应用科学.卷。6,第2期,2016。

[2] Driedger, Johnathan。“音乐音频信号的时间尺度修正算法”,硕士论文,萨尔兰德大学,Saarbrücken,德国,2011。

扩展功能

C / C ++代码生成
生成使用MATLAB®编码器™C和C ++代码。

介绍了R2019b