主要内容

谐波冲击源分离的时频掩蔽

时频掩蔽是将权重应用于时频表示的存储箱以增强、减少或隔离音频部分的过程。

谐波打击源分离(HPSS)的目标是将音频信号分解为谐波和打击分量。HPSS的应用包括音频混音、提高色度特征的质量、速度估计和时间尺度修改[1.].HPSS的另一个用途是在创建后期融合深度学习系统时作为并行表示。因此,2017年和2018年的许多声学场景和事件检测和分类系统(DCASE)挑战都使用了HPSS。

本例介绍了中描述的算法[1.]将时频掩蔽应用于谐波冲击源分离任务。

有关使用深度学习导出时频掩码的示例,请参阅使用深度学习网络的鸡尾酒会源分离

创造和谐的冲击性混合

读在和声和打击音频文件。两者的采样率都是16khz。

[harmonicAudio,fs]=音频阅读(“小提琴.wav”);敲击式音频=音频读取(“鼓,wav”);

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

声音(harmonicAudio,fs)频谱图(harmonicAudio,10245121024,fs,“雅克西斯”)头衔(“谐波音频”)

图中包含一个轴对象。标题为调和音频的轴对象包含一个类型为图像的对象。

听敲击信号并绘制频谱图。注意垂直(频率)轴上有连续性。

声音(打击式音频,fs)频谱图(打击式音频,10245121024,fs,“雅克西斯”)头衔(“打击式音频”)

Figure包含axes对象。标题为打击式音频的axes对象包含image类型的对象。

混合谐波和打击信号。听谐波打击音频并绘制频谱图。

混音=口琴+打击乐器;声音(混音,fs)频谱图(混音,10245121024,fs,“雅克西斯”)头衔(“谐波打击音频”)

图中包含一个轴对象。标题为Harmonic Structive Audio的axes对象包含类型为image的对象。

由[1.]创建两个增强频谱图:谐波增强频谱图和冲击增强频谱图。谐波增强谱图是通过沿时间轴应用中值滤波创建的。通过沿频率轴应用中值滤波创建冲击增强频谱图。然后将增强的频谱图进行比较,以创建谐波和冲击时频掩模。在最简单的形式中,掩码是二进制的。

使用二元掩码的HPSS

将混合信号转换为半幅短时傅里叶变换(STFT)。

win=sqrt(hann(1024,“定期”));重叠长度=地板(numel(win)/2);FFT长度=2^nextpow2(numel(win)+1);y=stft(混合),...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“居中”,对);halfIdx=1:ceil(大小(y,1)/2);yhalf=y(halfIdx,:);ymag=abs(yhalf);

沿时间轴应用中值平滑,以增强谐波音频并减少打击音频。使用200 ms的滤波器长度,如[1.].绘制谐波增强音频的功率谱。

时间过滤器长度=0.2;timeFilterLengthInSamples=timeFilterLength/((numel(win)-重叠长度)/fs);ymagharm=移动中值(ymag,timeFilterLengthInSamples,2);冲浪(flipud(log10(ymagharm.^2)),“EdgeColor”,“没有”)头衔(“谐波增强音频”)视图([0,90])轴牢固的

Figure包含axes对象。标题为Harmonic Enhanced Audio的axes对象包含surface类型的对象。

沿频率轴应用中值平滑以增强打击式音频并减少谐波音频。使用500 Hz的滤波器长度,如[1.]。绘制打击增强音频的功率谱。

frequencyFilterLength=500;FrequencyFilterLengthinsSamples=frequencyFilterLength/(fs/fftleLength);ymagperc=Movingmian(ymag,FrequencyFilterLengthinsSamples,1);surf(flipud(日志10(ymagperc.^2)),“EdgeColor”,“没有”)头衔(“打击增强音频”)视图([0,90])轴牢固的

图中包含一个轴对象。标题为打击增强音频的Axis对象包含类型为surface的对象。

要创建一个二元掩模,首先对冲击和谐波增强光谱求和,以确定每个单元的总振幅。

总震级Perbin=ymagharm+ymagperc;

如果给定谐波增强或冲击增强单元中的幅值占该单元总幅值的一半以上,则将该单元指定给相应的遮罩。

harmonicMask=ymagharm>(总震级perbin*0.5);打击面具=ymagperc>(总震级perbin*0.5);

应用和声和打击式遮罩,然后将遮罩音频返回到时域。

yharm=口琴符号。*yhalf;yperc=冲击式面罩。*yhalf;

镜像半边光谱以创建双面共轭对称光谱。

yharm=cat(1,yharm,flipud(conj(yharm));yperc=cat(1,yperc,flipud(conj(yperc));

执行短时傅里叶反变换将信号返回到时域。

h=istft(yharm,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,真);p=istft(yperc,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,对);

听恢复的谐波音频并绘制频谱图。

声音(h,fs)频谱图(h,10245121024,fs,“雅克西斯”)头衔(“恢复谐波音频”)

Figure包含axes对象。标题为的axes对象包含image类型的对象。

聆听恢复的敲击音并绘制频谱图。

声音(p,fs)频谱图(p,10245121024,fs,“雅克西斯”)头衔(“恢复的打击式音频”)

图中包含一个轴对象。标题为“恢复打击式音频”的Axis对象包含类型为image的对象。

绘制恢复的谐波和冲击频谱图的组合。

声音(h+p,fs)频谱图(h+p,10245121024,fs,“雅克西斯”)头衔(“恢复的谐波+打击音频”)

Figure包含axes对象。标题为Recovered Harmonic+打击式音频的axes对象包含image类型的对象。

使用二元掩模和残差的HPSS

如[1.]他们建议增加一个阈值参数:如果频谱图的bin不是明显的谐波或冲击音,则将其归类为残余物

执行中所述的相同步骤使用二元掩码的HPSS创建谐波增强和冲击增强光谱图。

win=sqrt(hann(1024,“定期”));重叠长度=地板(numel(win)/2);FFT长度=2^nextpow2(numel(win)+1);y=stft(混合),...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“居中”,对);半正切=1:ceil(大小(y,1)/2);yhalf=y(半正切,:);ymag=abs(yhalf);timeFilterLength=0.2;TimeFilterLengthinsSamples=timeFilterLength/(numel(win)-重叠长度)/fs;ymagharm=MOVIMENT(ymag,TimeFilterLengthinsSamples,2);frequencyFilterLength=500;FrequencyFilterLengthinsSamples=frequencyFilterLength/(fs/FFTLlength)ymagperc=移动中值(ymag,频率滤波器长度样本,1);totalMagnitudePerBin=ymagharm+ymagperc;

使用阈值,创建三个二进制遮罩:谐波遮罩、打击式遮罩和剩余遮罩。将阈值设置为0.65。这意味着,如果谐波增强光谱图中某个料仓的大小为该料仓总大小的65%,则将该料仓分配给谐波部分。如果冲击增强光谱图中某个料仓的大小为该料仓总大小的65%,则将该料仓分配给冲击部分。否则,该料仓为S分配到剩余部分。最佳阈值参数取决于谐波冲击混合和您的应用。

门槛=0.65;harmonicMask=ymagharm>(总振幅/振幅*阈值);打击式面具=ymagperc>(总振幅/振幅*阈值);剩余任务=~(harmonicMask+打击式面具);

执行中所述的相同步骤使用二元掩码的HPSS将屏蔽信号返回到时域。

yharm=harmonicMask.*yhalf;yperc=TactiveMask.*yhalf;yharm=cat(1,yharm,flipud(conj,yharm));yperc=cat(1,yperc,flipud(conj,yperc));yresi=cat(1,yresi,flipud(conj,yresi));h=istft(yharm,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,真);p=istft(yperc,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,真);r=istft(yresi,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,对);

听恢复的谐波音频并绘制频谱图。

声音(h,fs)频谱图(h,10245121024,fs,“雅克西斯”)头衔(“恢复谐波音频”)

Figure包含axes对象。标题为的axes对象包含image类型的对象。

聆听恢复的敲击音并绘制频谱图。

声音(p,fs)频谱图(p,10245121024,fs,“雅克西斯”)头衔(“恢复的打击式音频”)

图中包含一个轴对象。标题为“恢复打击式音频”的Axis对象包含类型为image的对象。

收听恢复的剩余音频并绘制频谱图。

声音(r,fs)频谱图(r,10245121024,fs,“雅克西斯”)头衔(“恢复的剩余音频”)

图中包含一个轴对象。标题为“恢复剩余音频”的axes对象包含类型为image的对象。

听谐波、冲击波和残余信号的组合,并绘制频谱图。

声音(h+p+r,fs)频谱图(h+p+r,10245121024,fs,“雅克西斯”)头衔(“恢复的谐波+打击+剩余音频”)

图中包含一个轴对象。标题为“恢复谐波+敲击+剩余音频”的轴对象包含一个类型为图像的对象。

使用软掩模的HPSS

对于时频掩蔽,掩模通常是二进制的或软的。软掩蔽将混合箱的能量分离为谐波和撞击部分,这取决于它们增强谱图的相对权重。

执行中所述的相同步骤使用二元掩码的HPSS创建谐波增强和冲击增强光谱图。

win=sqrt(hann(1024,“定期”));重叠长度=地板(numel(win)/2);FFT长度=2^nextpow2(numel(win)+1);y=stft(混合),...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“居中”,对);halfIdx=1:ceil(大小(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);总震级Perbin=ymagharm+ymagperc;

创建软掩模,将bin能量分离到谐波和撞击部分,相对于其增强谱图的权重。

harmonicMask=ymagharm./totalMagnitudePerBin;冲击掩模=ymagperc./totalMagnitudePerBin;

执行中所述的相同步骤使用二元掩码的HPSS将屏蔽信号返回到时域。

yharm=harmonicMask.*yhalf;yperc=TactiveMask.*yhalf;yharm=cat(1,yharm,flipud(conj,yharm));yperc=cat(1,yperc,flipud(conj,yperc));h=istft(yharm,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,真);p=istft(yperc,...“窗口”...“重叠长度”,重叠长度,...“FFT长度”,fft长度,...“共轭对称”,对);

听恢复的谐波音频并绘制频谱图。

声音(h,fs)频谱图(h,10245121024,fs,“雅克西斯”)头衔(“恢复谐波音频”)

Figure包含axes对象。标题为的axes对象包含image类型的对象。

聆听恢复的敲击音并绘制频谱图。

声音(p,fs)频谱图(p,10245121024,fs,“雅克西斯”)头衔(“恢复的打击式音频”)

图中包含一个轴对象。标题为“恢复打击式音频”的Axis对象包含类型为image的对象。

例子函数

示例函数,助手,提供本示例中描述的谐波冲击源分离功能。您可以使用它快速探索参数如何影响算法性能。

帮助助手
[h,p]=HelperHPSS(x,fs)将输入信号x分离为谐波(h)和冲击波(p)部分。如果x作为多声道信号输入,则在处理前将其转换为单声道。[h,p]=HelperHPSS(…,'TimeFilterLength',TimeFilterLength)指定频谱图时间维度上的中值滤波器长度(以秒为单位)。如果未指定,则TIMEFILTERLENGTH默认为0.2秒。[h,p]=HelperHPSS(…,“FrequencyFilterLength”,FrequencyFilterLength)指定频谱图频率维度上的中值滤波器长度,单位为Hz。如果未指定,则FREQUENCYFILTERLENGTH默认为500 Hz。[h,p]=HelperHPSS(…,'MaskType',MaskType)将掩码类型指定为“binary”或“soft”。如果未指定,则MaskType默认为“binary”。[h,p]=HelperHPSS(…,'Threshold',Threshold)指定将元素声明为谐波、冲击或残差的总能量阈值。将阈值指定为[0 1]范围内的标量。此参数仅在MaskType设置为“binary”时有效。如果未指定,阈值默认为0.5。[h,p]=HelperHPSS(…,“Window”,Window)指定STFT中使用的分析窗口。如果未指定,窗口默认为sqrt(hann(1024,'periodic')。[h,p]=HelperHPSS(…,'FFTLength',FFTLength)指定每个分析窗口的DFT中的点数。如果未指定,FFTLength默认为窗口中的元素数。[h,p]=HelperHPSS(…,'OverlapsLength',OverlapsLength)指定分析窗口的重叠长度。如果未指定,OverlapsLength默认值为512。[h,p,r]=HelperHPSS(…)返回未分类为谐波或敲击的剩余信号。示例:%Load a sound file and Listence。[audio,fs]=audioread('Loughts-16-8-mono-4secs.wav');sound(音频,fs)%Call HelperHPSS将音频分为和声部分和打击式部分。分别收听这些部分。[h,p]=HelperHPSS(音频,fs);sound(h,fs)sound(p,fs)

使用迭代掩蔽的HPSS

[1.]观察到,在STFT计算中,较大的帧尺寸将能量移向谐波分量,而较小的帧尺寸将能量移向冲击分量[1.]建议使用迭代程序来利用这一观点。在迭代程序中:

  1. 使用较大的机架尺寸执行HPSS,以隔离谐波分量。

  2. 将剩余部分和冲击部分相加。

  3. 使用较小的框架尺寸执行HPSS,以隔离冲击部件。

阈值1=0.7;N1=4096;[h1,p1,r1]=HelperHPSS(混合,fs,“阈值”,阈值1,“窗口”,sqrt(hann(N1,“定期”)),“重叠长度”,圆形(N1/2));混合1=p1+r1;阈值2=0.6;N2=256;(h2, p2, r2) = HelperHPSS (mix1 fs,“阈值”,阈值2,“窗口”,sqrt(hann(N2,“定期”)),“重叠长度”,圆形(N2/2));h=h1;p=p2;r=h2+r2;

聆听恢复的敲击音并绘制频谱图。

声音(h,fs)频谱图(h,10245121024,fs,“雅克西斯”)头衔(“恢复谐波音频”)

Figure包含axes对象。标题为的axes对象包含image类型的对象。

聆听恢复的敲击音并绘制频谱图。

声音(p,fs)频谱图(p,10245121024,fs,“雅克西斯”)头衔(“恢复的打击式音频”)

图中包含一个轴对象。标题为“恢复打击式音频”的Axis对象包含类型为image的对象。

收听恢复的剩余音频并绘制频谱图。

声音(r,fs)频谱图(r,10245121024,fs,“雅克西斯”)头衔(“恢复的剩余音频”)

图中包含一个轴对象。标题为“恢复剩余音频”的axes对象包含类型为image的对象。

听谐波、冲击波和残余信号的组合,并绘制频谱图。

声音(h+p+r, fs)谱图(h+p+r,1024,512,1024,fs,)“雅克西斯”)头衔(“恢复的谐波+打击+剩余音频”)

图中包含一个轴对象。标题为“恢复谐波+敲击+剩余音频”的轴对象包含一个类型为图像的对象。

使用HPSS增强的时间尺度修改

[2.]提出时间尺度修正(TSM)可以通过首先将信号分离为谐波和冲击部分,然后应用对该部分优化的TSM算法来改进。在TSM之后,通过对拉伸音频求和来重构信号。

要在不使用HPSS的情况下收听拉伸音频,请使用默认设置应用时间刻度修改斯特拉乔迪奥函数。默认情况下,斯特拉乔迪奥使用相位声码器算法。

阿尔法=1.5;混合拉伸=拉伸(混合,alpha);声音(混合拉伸,fs)

使用以下方法将和声冲击音组合分为和声和冲击音部分助手. 如在[2.],使用默认声码器算法拉伸谐波部分,使用WSOLA算法拉伸冲击部分。对拉伸部分求和,然后听结果。

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

参考文献

[1] Driedger,J.,M.Muller和S.Disch。“扩展音频信号的谐波冲击分离。”国际音乐信息检索学会会议录.15卷,2014年。

[2] 使用谐波打击分离改进音乐信号的时间尺度修改IEEE信号处理信函第21卷第1期,第105-109页,2014年。