我用麦克风捕获了输入声音信号,并在OpenCV Mat中显示:
我读取了每20个样本(=“声音垫”的x方向上的每20个像素)并将其与hann-window函数相乘。 然后,我在此窗口序列的OpenCV(docs here)中执行dft(递减傅里叶变换)。 以下是这种20样本信号的dft的输出的示例:
但是如何获得频谱图?描述的尝试是对的吗?我如何处理这些dft输出以获得频谱图?
很抱歉没有发布图片;只有链接。由于我是stackoverflow的新手,我无法直接发布图片。
答案 0 :(得分:0)
20个样本通常太短,无法获得合理的频率范围和分辨率(取决于采样频率如44100 Hz)。
当您从t
开始制作FT并计算某个时间范围的幅度时,在X坐标t处构建垂直线段。该段上的Y坐标是频率 - 通常使用对数刻度。像素强度是频率f附近某些范围内的幅度值之和(您也可以使用强度的颜色编码)。
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。为每个部分执行此操作,以便获得每个部分的频率。输出可以放在一个谱图中。