OpenCV使用傅立叶变换得到频谱图

时间:2016-03-05 23:13:54

标签: opencv fft frequency dft audio-processing

我用麦克风捕获了输入声音信号,并在OpenCV Mat中显示:

Mat of the input sound

我读取了每20个样本(=“声音垫”的x方向上的每20个像素)并将其与hann-window函数相乘。 然后,我在此窗口序列的OpenCV(docs here)中执行dft(递减傅里叶变换)。 以下是这种20样本信号的dft的输出的示例:

dft output of a 20-sample-sequence

但是如何获得频谱图?描述的尝试是对的吗?我如何处理这些dft输出以获得频谱图?

很抱歉没有发布图片;只有链接。由于我是stackoverflow的新手,我无法直接发布图片。

2 个答案:

答案 0 :(得分:0)

20个样本通常太短,无法获得合理的频率范围和分辨率(取决于采样频率如44100 Hz)。

当您从t开始制作FT并计算某个时间范围的幅度时,在X坐标t处构建垂直线段。该段上的Y坐标是频率 - 通常使用对数刻度。像素强度是频率f附近某些范围内的幅度值之和(您也可以使用强度的颜色编码)。

第l级数组的输入对应于频率

f=2*Pi*F/N

其中F - 离散化(样本)频率(如44100 Hz),N - 傅立叶变换大小(如1024)

伪代码
PixelValue[x = a * t, y = b * log2(i)] = c * Sum(l=i/2..i) FTAmplitude[l]

a,b,c是比例系数。

答案 1 :(得分:0)

这不适用于此类图像。 您必须使用一维矢量(OpenCV中的1D Mat不存在),其大小与音频信号的长度相同。

比你必须在声音的窗口(例如hann-window)部分做dft / fft。为每个部分执行此操作,以便获得每个部分的频率。输出可以放在一个谱图中。