我是化学工程师,而不是电子工程师,所以这有点困难。

我试图弄清楚如何获取幅度与时间的数据并将其转换为频率与时间的关系。我的本能是将数据切成块,对每个块执行FFT,然后绘制。不幸的是,由于每个切片的持续时间接近零,因此不再有足够的信息来获取准确的频率信息(低频需要的时间超过非常小的时间片)。所以...我该怎么做?我确定这是一个已经解决的著名问题。

这是我正在寻找的一种转换,以声波为例(钢琴音符G)。如您所见,此图为三个轴,第三个轴由颜色表示。

谢谢!



#1 楼

时间与频率分辨率是一个众所周知的问题,确实有解决方法。对于音频信号,一些常用的技术包括:参数化方法;自适应分辨率(使用各种时间/频率配置进行分析,并将结果修补在一起-Wen X.和M. Sandler,“使用多重傅立叶变换的复合频谱图”);基于过度完备基的小波/分解;并使用相位信息来提取频率峰值(IFgram)的精确位置。

但是,看来您所显示的图形没有使用其中的某些技术;所以我怀疑这不是您想要的。在水平轴上似乎有一些“污点”(例如,在t = 1.2s处),这肯定表明分析是在块之间高度重叠的情况下完成的。

,实际上,如果允许帧重叠,则块持续时间和每秒的分析帧数不必相互链接。因此,如果要使用40ms长的分析框架,则网格不必是:

框架1:t = 0..t = 40ms;框架2:t = 40ms..t = 80ms

很可能是:

框架1:t = 0..t = 40ms;帧2:t = 10ms..t = 50ms

这种重叠可以给人一种更高的时间分辨率的错觉,而不会减小FFT窗口的大小。请注意,这只能帮助您在时间轴上准确定位事件-不能帮助解决两个时间上接近的事件...就像增加FFT大小可能有助于识别频率峰值的位置一样,但不能帮助确定频率峰值的位置两个相邻频率峰值的分辨率。

评论


$ \ begingroup $
你会怎么走(从频谱图转换为音频信号)
$ \ endgroup $
–皮特
15年4月28日在17:56

#2 楼

是的,很多人都在进行时频分析。

“将我的数据切成块,对每个块执行FFT”的方法是一个好主意。
应用“窗口”函数”,就在执行FFT之前,
有助于避免许多伪像。
允许块重叠也有帮助。

您已经指出,正如Wikipedia文章所指出的那样,所有短时傅立叶变换技术都需要权衡: br />

将时间序列切成很短的片段时,您会获得有关音调开始和停止的确切时间的高精度信息,但是频率信息非常模糊。 >将时间序列切成很长的片段时,会获得有关音调确切频率的高精度频率信息,但开始和停止的确切时间却很模糊。是一个著名的问题,但可惜,不仅没有解决它,而且还证明了两者之间的不确定性是不可避免的-Gabor极限,Heisenberg-Gabor极限,不确定性原理等。

如果我是您,我将从众多现成的库中的一个开始计算Gabor变换,
并尝试将时间序列切成不同的长度。
很幸运,您会很幸运,并且最终会得到一定的长度,可以提供足够的时间定位和足够的频率歧视。

如果这不适用于此应用程序,那么我会继续使用其他方法进行时频表示和时频分析-
小波变换,chirplet变换,分数阶傅里叶变换(FRFT)等。

编辑:
一些源代码可从音频数据生成频谱图/瀑布图:



SoX-Sound eXchange包括频谱图源代码


Audacity包括频谱图源代码



glfer包括瀑布频谱显示频谱源代码
使用fftw计算音频流频谱图的源代码
更多使用OpenAL和fftw来计算音频流频谱图的源代码

Jeff Morton撰写的“ C#中带有频谱图的声激活记录器”

Topographica似乎包含光谱图源代码

iTunes的SpectroGraph

图像到光谱图的方向与上述实用程序相反。

评论


$ \ begingroup $
Gabor变换仅适用于高斯窗口。如果您使用其他窗口,则只是STFT。 (真正的高斯窗口并不存在于数字中,因为它们逐渐缩小到无穷大。)
$ \ endgroup $
– Endolith
2012年6月15日18:45



$ \ begingroup $
@endolith:你是对的。 Gabor变换使用的“高斯窗函数”被截短为有限的长度-与理想的高斯函数非常接近,但在数学上并不相同。
$ \ endgroup $
– David Cary
2012年6月17日下午4:53

$ \ begingroup $
我认为Gabor变换是使用积分的连续变换,因此它可以将非截断的高斯作为窗口吗?
$ \ endgroup $
– Endolith
2012年6月17日在17:04

$ \ begingroup $
@endolith:是的,原则上,一个人可以使用非截断的高斯作为窗口。实际上,由于实际上高斯的所有能量都在中心驼峰的几个sigma之内,因此使用截断的窗口实际上总是在输出图表中没有明显的不同。由于生成频谱图瀑布图的软件会反复应用高斯窗口,然后对图表的每一列进行FFT,因此“不截断”会使该软件运行缓慢。
$ \ endgroup $
– David Cary
2012年6月21日4:41