主要内容

时频掩蔽Harmonic-Percussive源分离

时频掩蔽的过程是将权重应用于提高时频表示的垃圾箱,减少或孤立的部分音频。

harmonic-percussive源分离(hps)的目标是将音频信号分解成谐波和敲击的组件。hps的应用程序包括音频重新合成,提高浓度的质量特性,速度估计,和时标修改(1]。hps的另一个用途是并行表示当创建一个后期融合深度学习系统。许多顶尖的执行系统声学检测和分类的场景和事件(DCASE) 2017年和2018年挑战hps用于这个原因。

这个例子中走过中描述的算法(1]运用时频掩蔽harmonic-percussive源分离的任务。

的例子推导时频面具使用深度学习,明白了鸡尾酒会使用深度学习网络的源分离

创建Harmonic-Percussive混合物

阅读在谐波和敲击的音频文件。都有16 kHz的采样率。

[harmonicAudio, fs] = audioread (“violin.wav”);percussiveAudio = audioread (“drums.wav”);

听谐波信号和绘制光谱图。请注意,有连续性沿水平轴(时间)。

声音(harmonicAudio fs)谱图(fs harmonicAudio, 1024、512、1024年,“桠溪”)标题(“谐波音频”)

图包含一个坐标轴对象。坐标轴对象与标题谐波音频包含一个类型的对象的形象。

听冲击信号和绘制光谱图。请注意,有连续性沿垂直轴(频率)。

声音(percussiveAudio fs)谱图(fs percussiveAudio, 1024、512、1024年,“桠溪”)标题(“敲击的声音”)

图包含一个坐标轴对象。坐标轴对象与标题敲击的声音包含一个类型的对象的形象。

将谐波和冲击信号。听harmonic-percussive音频和绘制光谱图。

混合= harmonicAudio + percussiveAudio;声音(混合,fs)谱图(fs混合,1024、512、1024年,“桠溪”)标题(“Harmonic-Percussive音频”)

图包含一个坐标轴对象。坐标轴对象与标题Harmonic-Percussive音频包含一个类型的对象的形象。

提出的hps [1创建两个增强色:harmonic-enhanced谱图和percussive-enhanced声谱图。创建harmonic-enhanced谱图沿着时间轴采用中值滤波。创建percussive-enhanced谱图沿频率轴采用中值滤波。增强的谱图相比,然后创建谐波和冲击时频面具。在最简单的形式,面具是二进制。

hps使用二进制掩模

将混合信号转换成half-sided级短时傅里叶变换(STFT)。

赢得=√损害(1024“周期”));overlapLength =地板(元素个数(赢得)/ 2);fftLength = 2 ^ nextpow2(元素个数(赢得)+ 1);y = stft(混合,“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“中心”,真正的);halfIdx = 1:装天花板(大小(y, 1) / 2);yhalf = y (halfIdx:);ymag = abs (yhalf);

应用中值平滑沿着时间轴提高谐波音频和减少敲击的声音。使用一个过滤器200 ms的长度,所显示(1]。情节的功率谱harmonic-enhanced音频。

timeFilterLength = 0.2;timeFilterLengthInSamples = timeFilterLength /((元素个数(赢得)- overlapLength) / fs);ymagharm = movmedian (ymag timeFilterLengthInSamples 2);冲浪(flipud (log10 (ymagharm ^ 2)),“EdgeColor”,“没有”)标题(“谐波增强音频”,90年)视图([0])轴

图包含一个坐标轴对象。坐标轴对象与标题谐波增强音频包含一个类型的对象的表面。

运用中值平滑沿频率轴提高冲击音频和减少谐波的音频。使用一个过滤器500 Hz的长度,所显示(1]。情节的功率谱percussive-enhanced音频。

frequencyFilterLength = 500;frequencyFilterLengthInSamples = frequencyFilterLength / (fs / fftLength);ymagperc = movmedian (ymag frequencyFilterLengthInSamples 1);冲浪(flipud (log10 (ymagperc ^ 2)),“EdgeColor”,“没有”)标题(“冲击增强音频”,90年)视图([0])轴

图包含一个坐标轴对象。坐标轴对象与标题冲击增强音频包含一个类型的对象的表面。

创建一个二进制掩模,首先和冲击,harmonic-enhanced光谱来确定每本的总大小。

totalMagnitudePerBin = ymagharm + ymagperc;

如果在一个给定的harmonic-enhanced级或percussive-enhanced本占超过一半的总大小,本,然后,本分配给相应的面具。

harmonicMask = ymagharm > (totalMagnitudePerBin * 0.5);percussiveMask = ymagperc > (totalMagnitudePerBin * 0.5);

应用谐波和敲击的面具,然后返回蒙面的时域音频。

yharm = harmonicMask。* yhalf;yperc = percussiveMask。* yhalf;

镜子half-sided频谱来创建一个双边共轭对称谱。

yharm =猫(1 yharm flipud(连词(yharm)));yperc =猫(1 yperc flipud(连词(yperc)));

进行短时傅里叶反变换回时域的信号。

h = istft (yharm,“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);p = istft (yperc“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);

听了谐波音频和绘制光谱图。

声音(h, fs)谱图(fs, h, 1024、512、1024年,“桠溪”)标题(“恢复谐波音频”)

图包含一个坐标轴对象。坐标轴对象与标题谐波恢复音频包含一个类型的对象的形象。

听了敲击的音频和绘制光谱图。

声音(p, fs)谱图(fs, p, 1024、512、1024年,“桠溪”)标题(“恢复敲击的声音”)

图包含一个坐标轴对象。坐标轴对象与标题恢复敲击的声音包含一个类型的对象的形象。

情节的结合谐波恢复和敲击的声音。

声音(h + p, fs)谱图(h + p, 1024, 512, 1024, fs,“桠溪”)标题(“恢复谐波+敲击的声音”)

图包含一个坐标轴对象。坐标轴对象与标题恢复谐波+冲击音频包含一个类型的对象的形象。

hps使用二进制掩模和残留

书中建议的那样(1),把一个信号分解成谐波和敲击的声音往往是不可能的。他们建议添加一个阈值参数:如果本谱图没有明确谐波或冲击,对其进行分类剩余

执行相同的步骤中描述hps使用二进制掩模创建harmonic-enhanced和percussive-enhanced声谱图。

赢得=√损害(1024“周期”));overlapLength =地板(元素个数(赢得)/ 2);fftLength = 2 ^ nextpow2(元素个数(赢得)+ 1);y = stft(混合,“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“中心”,真正的);halfIdx = 1:装天花板(大小(y, 1) / 2);yhalf = y (halfIdx:);ymag = abs (yhalf);timeFilterLength = 0.2;timeFilterLengthInSamples = timeFilterLength /((元素个数(赢得)- overlapLength) / fs);ymagharm = movmedian (ymag timeFilterLengthInSamples 2);frequencyFilterLength = 500;frequencyFilterLengthInSamples = frequencyFilterLength / (fs / fftLength);ymagperc = movmedian (ymag frequencyFilterLengthInSamples 1); totalMagnitudePerBin = ymagharm + ymagperc;

使用一个阈值,创建三个二进制面具:谐波,冲击和残留。设置阈值0.65。这意味着,如果一个垃圾箱的大小harmonic-enhanced谱图的总规模的65%,本,你分配,本谐波部分。如果一个垃圾箱的大小percussive-enhanced谱图是本总规模的65%,你分配,本冲击部分。否则,本是分配给剩余部分。最优阈值参数取决于harmonic-percussive混合和您的应用程序。

阈值=0.65;harmonicMask = ymagharm > (totalMagnitudePerBin *阈值);percussiveMask = ymagperc > (totalMagnitudePerBin *阈值);residualMask = ~ (harmonicMask + percussiveMask);

执行相同的步骤中描述hps使用二进制掩模返回蒙面信号时域。

yharm = harmonicMask。* yhalf;yperc = percussiveMask。* yhalf;yresi = residualMask。* yhalf;yharm =猫(1 yharm flipud(连词(yharm)));yperc =猫(1 yperc flipud(连词(yperc)));yresi =猫(1 yresi flipud(连词(yresi)));h = istft (yharm,“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);p = istft (yperc“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);r = istft (yresi“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);

听了谐波音频和绘制光谱图。

声音(h, fs)谱图(fs, h, 1024、512、1024年,“桠溪”)标题(“恢复谐波音频”)

图包含一个坐标轴对象。坐标轴对象与标题谐波恢复音频包含一个类型的对象的形象。

听了敲击的音频和绘制光谱图。

声音(p, fs)谱图(fs, p, 1024、512、1024年,“桠溪”)标题(“恢复敲击的声音”)

图包含一个坐标轴对象。坐标轴对象与标题恢复敲击的声音包含一个类型的对象的形象。

听了残余音频和绘制光谱图。

声音(r, fs)谱图(r, 1024、512、1024、fs、“桠溪”)标题(“恢复残留音频”)

图包含一个坐标轴对象。坐标轴对象与标题恢复残留音频包含一个类型的对象的形象。

听的结合谐波,冲击,残余信号和绘制光谱图。

声音(h + p + r, fs)谱图(h + p + r, 1024、512、1024年,fs,“桠溪”)标题(“恢复谐波+冲击+剩余音频”)

图包含一个坐标轴对象。坐标轴对象与标题恢复谐波+冲击+残余音频包含一个类型的对象的形象。

hps使用柔软的面具

对于时频掩蔽,面具一般二进制或柔软。软掩蔽分离混合箱为谐波的能量和冲击部分取决于增强声音的相对权重。

执行相同的步骤中描述hps使用二进制掩模创建harmonic-enhanced和percussive-enhanced声谱图。

赢得=√损害(1024“周期”));overlapLength =地板(元素个数(赢得)/ 2);fftLength = 2 ^ nextpow2(元素个数(赢得)+ 1);y = stft(混合,“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“中心”,真正的);halfIdx = 1:装天花板(大小(y, 1) / 2);yhalf = y (halfIdx:);ymag = abs (yhalf);timeFilterLength = 0.2;timeFilterLengthInSamples = timeFilterLength /((元素个数(赢得)-overlapLength) / fs);ymagharm = movmedian (ymag timeFilterLengthInSamples 2);frequencyFilterLength = 500;frequencyFilterLengthInSamples = frequencyFilterLength / (fs / fftLength);ymagperc = movmedian (ymag frequencyFilterLengthInSamples 1); totalMagnitudePerBin = ymagharm + ymagperc;

创建单独的箱子软面具能量谐波和冲击部分相对的权重提高谱图。

harmonicMask = ymagharm。/ totalMagnitudePerBin;percussiveMask = ymagperc。/ totalMagnitudePerBin;

执行相同的步骤中描述hps使用二进制掩模返回蒙面信号时域。

yharm = harmonicMask。* yhalf;yperc = percussiveMask。* yhalf;yharm =猫(1 yharm flipud(连词(yharm)));yperc =猫(1 yperc flipud(连词(yperc)));h = istft (yharm,“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);p = istft (yperc“窗口”,赢了,“OverlapLength”overlapLength,“FFTLength”fftLength,“ConjugateSymmetric”,真正的);

听了谐波音频和绘制光谱图。

声音(h, fs)谱图(fs, h, 1024、512、1024年,“桠溪”)标题(“恢复谐波音频”)

图包含一个坐标轴对象。坐标轴对象与标题谐波恢复音频包含一个类型的对象的形象。

听了敲击的音频和绘制光谱图。

声音(p, fs)谱图(fs, p, 1024、512、1024年,“桠溪”)标题(“恢复敲击的声音”)

图包含一个坐标轴对象。坐标轴对象与标题恢复敲击的声音包含一个类型的对象的形象。

例子函数

函数的例子中,HelperHPSS提供了harmonic-percussive源分离功能描述在这个例子。您可以使用它来快速探索算法性能参数的影响。

帮助HelperHPSS
(h p) = HelperHPSS (x, fs)将输入信号,x,谐波(h)和冲击(p)部分。如果x是输入多路信号,它在处理之前转化为mono。(h p) = HelperHPSS (…, TimeFilterLength, TimeFilterLength)指定了中值滤波器长度声谱图的时间维度,在几秒钟内。如果未指定,TIMEFILTERLENGTH默认为0.2秒。(h p) = HelperHPSS (…, FrequencyFilterLength, FrequencyFilterLength)指定了中值滤波器长度沿频率维谱图,赫兹。如果未指定,FREQUENCYFILTERLENGTH默认为500 Hz。(h p) = HelperHPSS (…, MaskType, MaskType)将面具类型指定为“二进制”或“软”。如果未指定,MASKTYPE默认为“二元”。(h p) = HelperHPSS(…,阈值,阈值)指定的阈值声明一个元素的总能量作为谐波,冲击或残留。指定阈值作为一个标量范围(0 - 1)。 This parameter is only valid if MaskType is set to 'binary'. If unspecified, THRESHOLD defaults to 0.5. [h,p] = HelperHPSS(...,'Window',WINDOW) specifies the analysis window used in the STFT. If unspecified, WINDOW defaults to sqrt(hann(1024,'periodic')). [h,p] = HelperHPSS(...,'FFTLength',FFTLENGTH) specifies the number of points in the DFT for each analysis window. If unspecified, FFTLENGTH defaults to the number of elements in the WINDOW. [h,p] = HelperHPSS(...,'OverlapLength',OVERLAPLENGTH) specifies the overlap length of the analysis windows. If unspecified, OVERLAPLENGTH defaults to 512. [h,p,r] = HelperHPSS(...) returns the residual signal not classified as harmonic or percussive. Example: % Load a sound file and listen to it. [audio,fs] = audioread('Laughter-16-8-mono-4secs.wav'); sound(audio,fs) % Call HelperHPSS to separate the audio into harmonic and percussive % portions. Listen to the portions separately. [h,p] = HelperHPSS(audio,fs); sound(h,fs) sound(p,fs)

hps使用迭代屏蔽

(1)观察到一个大型STFT计算当前帧大小对谐波分量的能量移动,而小帧大小的能量流向敲击的组件。(1]提议使用一个迭代过程利用这一观点。在迭代过程中:

  1. 使用大型帧尺寸执行hps隔离谐波分量。

  2. 和剩余和冲击。

  3. 使用小帧尺寸隔离执行hps敲击的组件。

threshold1 =0.7;N1 =4096年;(h1, p1, r1) = HelperHPSS(混合、fs、“阈值”threshold1,“窗口”√损害(N1,“周期”)),“OverlapLength”轮(n));mix1 = p1 + r1;threshold2 =0.6;N2 =256年;(h2, p2, r2) = HelperHPSS (mix1 fs,“阈值”threshold2,“窗口”√损害(N2,“周期”)),“OverlapLength”轮(N2/2));h = h1;p = p2;r = h2 + r2;

听了敲击的音频和绘制光谱图。

声音(h, fs)谱图(fs, h, 1024、512、1024年,“桠溪”)标题(“恢复谐波音频”)

图包含一个坐标轴对象。坐标轴对象与标题谐波恢复音频包含一个类型的对象的形象。

听了敲击的音频和绘制光谱图。

声音(p, fs)谱图(fs, p, 1024、512、1024年,“桠溪”)标题(“恢复敲击的声音”)

图包含一个坐标轴对象。坐标轴对象与标题恢复敲击的声音包含一个类型的对象的形象。

听了残余音频和绘制光谱图。

声音(r, fs)谱图(r, 1024、512、1024、fs、“桠溪”)标题(“恢复残留音频”)

图包含一个坐标轴对象。坐标轴对象与标题恢复残留音频包含一个类型的对象的形象。

听的结合谐波,冲击,残余信号和绘制光谱图。

声音(h + p + r, fs)谱图(h + p + r, 1024、512、1024年,fs,“桠溪”)标题(“恢复谐波+冲击+剩余音频”)

图包含一个坐标轴对象。坐标轴对象与标题恢复谐波+冲击+残余音频包含一个类型的对象的形象。

增强使用hps修改时间尺度

(2建议修改时间尺度(TSM)可以提高首先分离信号谐波和冲击部分,然后应用TSM算法优化的部分。在TSM之后,加法拉伸音频信号重建。

听了音频没有hps,应用时序表修改使用默认stretchAudio函数。默认情况下,stretchAudio使用阶段声码器算法。

α=1.5;mixStretched = stretchAudio(混合、α);声音(mixStretched fs)

分离harmonic-percussive混合成谐波和冲击部分使用HelperHPSS。提出了(2),使用默认的声码器算法的谐波部分和拉伸冲击WSOLA算法部分。和拉伸部分,听结果。

(h p) = HelperHPSS(混合,fs);hStretched = stretchAudio (h,α);pStretched = stretchAudio (pα“方法”,“wsola”);mixStretched = hStretched + pStretched;声音(mixStretched, fs);

引用

[1]Driedger, J。,M. Muller, and S. Disch. "Extending harmonic-percussive separation of audio signals."《国际社会对音乐信息检索会议。15卷,2014年。

[2]Driedger, J。,M. Muller, and S. Ewert. "Improving Time-Scale Modification of Music Signals Using Harmonic-Percussive Separation."IEEE信号处理信件。21卷。。问题1。105 - 109年,2014页。