我有一组歌曲,使用重叠频率为50%的汉明窗提取了幅度谱图。提取频谱图后,我使用主成分分析(PCA)进行了降维。将其降低到较低的维度后,我从较低的维度重构了频谱图。因此,现在,原始频谱图和重建频谱图之间将出现一些错误。我想将此频谱图转换回音频信号并进行播放,这样我就能知道从较低尺寸重建时的声音如何。

是否有任何可用的功能说Matlab。将量级频谱图转换为音频信号??

评论

您确实需要STFT和逆STFT。 “频谱图”只是STFT幅度的热图的名称,仅幅度就不足以重建信号。看看mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/…吗?

为了扩展@endolith的评论,从STFT转到频谱图时,您所缺少的是相位信息,这是信号频域表示的重要组成部分。

因此,这意味着如果我要重建原始音频信号,则需要STFT的幅度和相位?但通常是为了建立音频功能,| S |使用的是复数no的幅度,并且相位信息被丢弃。我对mel频谱图执行了PCA,我将其计算为$ X = log(M | S |)$ M,这是mel滤波器组乘法矩阵。那么如何在给定$ \ hat {X} $的情况下重建音频信号,即PCA之后得到的X的近似值?

@endolith:我尝试使用您给mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/的链接。...我使用了相位和幅度信息,即(将复杂的$ S $作为上述函数的输入)。使用这个,我尝试播放信号,听起来震撼。为什么会这样?然后,我计算了原始信号与如上所述通过逆STFT过程获得的信号之间的范数,它显示出3.46 * 10 ^ 3的巨大值。知道为什么会发生这种情况吗?

@ user76170:断断续续是因为STFT将信号切成帧,有时会重叠,因此您必须以与构造它们相同的方式来解构它们,否则每一个都会不连续。您是否从该链接使用了STFT和ISTFT函数?查看震荡信号的波形,以便了解问题所在。

#1 楼

如果将频谱图计算为来自重叠窗口的短时傅里叶变换的幅度,则频谱图将隐含一些相位信息。

以下迭代完成了该工作:

$$ x_ {n + 1} = \ text {istft}(S \ cdot \ exp(i \ cdot \ text { angle}(\ text {stft}(x_n))))$$

$ S $是频谱图,$ \ text {stft} $是前向短时傅立叶变换,$ \ text {isft} $是逆短时傅立叶变换。

评论


$ \ begingroup $
我想直接在@edouard上发表评论,但我的声誉不高。有人知道他的答案是$ \ text {i} $吗?另外,我将如何初始化$ x_0 $?只是随机的?是$ x_n $是迭代$ n $的完整重构信号,还是只是$ x $的$ n ^ {\ text {th}} $系数?谢谢。
$ \ endgroup $
–P.R.
2014年6月14日19:46

$ \ begingroup $
@ P.R。这是单位虚数$ \ sqrt {-1} $。
$ \ endgroup $
– Peter K.♦
17年9月13日在10:51

#2 楼

我很难理解@edouard的答案,这是正确的做法。与我用来实现重建的https://dsp.stackexchange.com/a/3410/9031相比。

请注意,$ i $是虚数,而$ x_n $是$ n ^ {\ text {th}} $迭代时的重构信号。从$ x_0 $开始,它是音频信号长度的随机向量。对我来说,进行几次迭代就足以得到听起来不错的结果。然而,原始信号的绝对误差仍然很高。从重构信号生成的生成的频谱图I虽然总体上显示出相同的结构,但幅度却大不相同。

#3 楼

您可以使用重构的频谱图与原始频谱图来设计一个滤波器,该滤波器的幅度响应会将一个频谱图转换为另一个频谱图。然后,您可以将此过滤器应用于原始时域数据,或应用于原始FFT以进行重叠添加/保存快速卷积过滤。

评论


$ \ begingroup $
@ hotpaw2:我不明白您的回答,我为什么要将一个频谱图转换成另一个频谱图?给定一个频谱图矩阵$ | S | $,我想重建音频信号。设计从一个频谱图转换为另一个频谱图并重叠添加/保存快速卷积滤波的滤波器有什么要求?我想从$ | S | $重构音频,以便了解PCA的效果。假设我可以播放两个剪辑,一个是原始音频信号,另一个是从较小尺寸$ | \ hat {S} | $重建的
$ \ endgroup $
–user76170
2013年7月10日15:44



$ \ begingroup $
频谱图矩阵是有损的,因此不能用于重建。但是,如果您可以对转换进行反向工程以生成所需的频谱图,则可以将其应用于原始的非损耗时域数据,或者可能应用于原始的复杂结果FFT。
$ \ endgroup $
– hotpaw2
13年7月10日在16:13



$ \ begingroup $
好的,您的意思是说我可以从复杂结果$ S $中重建音频信号,而不仅仅是使用它的幅度$ | S | $。我想,因为我已经使用$ | S | $进行进一步处理和降维,所以无法重建原始信号。
$ \ endgroup $
–user76170
13年7月13日在19:50



$ \ begingroup $
@ user76170总而言之,就是在重建信号之前需要使用复杂的STFT。如果仅具有STFT幅度,那还不够。此规则有例外,但通常,您需要复杂的STFT,而不仅仅是幅度。
$ \ endgroup $
– Tarin Ziyaee
2013年9月7日23:49

$ \ begingroup $
@ hotpaw2:是否可以这样做,我存储相位信息(复数FFT的虚部),然后取幅值谱$ | S | $,然后进行降维处理,然后从低维重建获得$ {| \ hat {S} |} $,添加相位信息并进行逆FFT以获得音频信号?
$ \ endgroup $
–user76170
13-10-10在23:07



#4 楼

如果您不担心计算复杂性,请使用Griffin-Lim算法将声谱图中的音频信号反转。

评论


$ \ begingroup $
能否请您扩展一下答案?也许在算法中添加代表性论文或链接,并简要说明它与该问题的关系(?)
$ \ endgroup $
– A_A
17年9月13日在9:26

$ \ begingroup $
如果我正确理解了您的问题,那么简而言之,您想从频谱图中重建音频信号而不使用原始相位信息。 Griffin-Lim算法需要一个频谱图矩阵作为输入并迭代地重建相位。您可以参考论文ieeexplore.ieee.org/document/1164317
$ \ endgroup $
–吉坦德拉·迪曼(Jitendra Dhiman)
17-10-23在5:12



$ \ begingroup $
谢谢你让我知道。只是为了澄清这一点。该回复以“低质量”出现在我的评论队列中。我在“审核”方面的选择包括为“改进”提供评论。为了使此答案与DSP.SE中常见的答案相符,必须对Griffin Lim算法进行一些说明,以显示它与OP的要求如何相关。以后进行任何修改,您都可以直接将其应用于答案。这样做的目的不是要特别满足“我”,而是要为问题提供有意义的启发性答案。
$ \ endgroup $
– A_A
17-10-23在8:58

$ \ begingroup $
如果您没有原始FFT信息,最好的答案是在此处(使用Griffin-Lim)。 timsainb.github.io/…
$ \ endgroup $
– Artemi Krymski
18-11-22在13:52