我目前正在keras创建一个网络,使用中值滤波技术(http://dafx10.iem.at/papers/DerryFitzGerald_DAFx10_P15.pdf)对音频频谱图执行谐波/冲击源分离。你知道吗
给定一个输入幅度谱图,将第i个时间帧表示为Si,将第h个频率片表示为Sh,通过对Si执行中值滤波,可以生成打击增强频谱图帧Pi:Pi=M{Si,l
一旦有了p和H,就可以看到每个频率单元SH,i是否属于谐波源或冲击源:如果HH,i>;pH,i,SH,i转到谐波频谱图,在冲击频谱图中取值0,反之亦然。你知道吗
在我的网络中,给定输入频谱图和特定时间帧,我需要水平计算每个频率h的中位数。这可以通过lambda层和tensorflow轻松完成:
layer_H = Lambda(lambda x:tf.contrib.distributions.percentile(x[0], 50, axis=0))(layer)
这里,谐波中值滤波器的长度l是输入频谱图的水平长度。输出是一个向量,其大小等于频率的数目(在我的例子中是88)。你知道吗
下一步是我现在遇到的问题:我需要垂直计算当前时间帧的中位数,给定冲击中值滤波器的长度,并且知道我希望得到的向量与输入的大小相同,所以在每一端都要小心输入的大小(过滤器的大小将介于lharm和lharm/2之间,具体取决于我们所处的位置)。因为没有更好的词,这看起来像是某种卷积。你知道吗
一旦我有了两个结果向量,我想比较它们,并将原始帧的每个值赋给冲击层(Lp)或谐波层(LH)。因此,我有三种不同的输入,HI,PI和SI,我想通过比较HI和PI得到LH,继续建立我的人际网络。如果Hi,j>;Pi,j,则LPi,j=0和LHi,j=Si,j。你知道吗
总而言之,我被困在两个不同的问题上:
如何计算水平中位数?
如何在网络中实现从Hi、pi和Si到Lp和LH的操作?
事先非常感谢!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐