OpenCV使用傅里叶变换获得频谱图

OpenCV使用傅里叶变换获得频谱图,opencv,fft,frequency,dft,audio-processing,Opencv,Fft,Frequency,Dft,Audio Processing,我用麦克风捕获了一个输入声音信号,并将其显示在OpenCV垫子中: 我读取每20个样本(=在“声音垫”的x方向上的每20个像素),并用hann窗口函数将其相乘。 然后,我在这个加窗序列的OpenCV()中执行dft(decrete fourier transform)。 这里是这样一个20采样信号的dft的多幅输出示例: 但是我怎样才能得到频谱图呢?所描述的尝试是否正确?为了得到光谱图,我需要如何处理这些dft输出 对不起,没有张贴图片;只有链接。由于我是stackoverflow新手,我无

我用麦克风捕获了一个输入声音信号,并将其显示在OpenCV垫子中:

我读取每20个样本(=在“声音垫”的x方向上的每20个像素),并用hann窗口函数将其相乘。 然后,我在这个加窗序列的OpenCV()中执行dft(decrete fourier transform)。 这里是这样一个20采样信号的dft的多幅输出示例:

但是我怎样才能得到频谱图呢?所描述的尝试是否正确?为了得到光谱图,我需要如何处理这些dft输出


对不起,没有张贴图片;只有链接。由于我是stackoverflow新手,我无法直接发布图片。

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

当您进行FT并计算从
t
开始的某个时间范围的幅值时,在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)fta振幅[l]


a、 b,c是比例系数。

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

当您进行FT并计算从
t
开始的某个时间范围的幅值时,在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)fta振幅[l]


a、 b,c是比例系数。

这不适用于这样的图像。 您必须使用1D向量(OpenCV中不存在1D Mat),该向量的大小与音频信号的长度相同


然后,您必须对声音的加窗(例如hann window)部分进行dft/fft。对每个部分都这样做,这样就可以得到每个这样的部分的频率。输出可以组合成光谱图。

这不适用于这样的图像。 您必须使用1D向量(OpenCV中不存在1D Mat),该向量的大小与音频信号的长度相同


然后,您必须对声音的加窗(例如hann window)部分进行dft/fft。对每个部分都这样做,这样就可以得到每个这样的部分的频率。输出可以组合成光谱图。

谢谢您的回答!我不明白震级图像中的频率和强度在哪里。首先,将音频信号转换成这样的图像(有问题的第一幅图像)并在感兴趣的区域上进行傅立叶变换(FT)的方法正确吗?该区域具有声音图像的Y大小和我想要分析为X大小的样本数?对我来说,震级图像应该代表分析音频序列中每个频率的强度。频谱图:音频信号的第一幅图像。FT应在音频数据阵列上执行,而不是在图片上执行。关于添加到帖子中的频率的信息。谢谢您的回答!我不明白震级图像中的频率和强度在哪里。首先,将音频信号转换成这样的图像(有问题的第一幅图像)并在感兴趣的区域上进行傅立叶变换(FT)的方法正确吗?该区域具有声音图像的Y大小和我想要分析为X大小的样本数?对我来说,震级图像应该代表分析音频序列中每个频率的强度。频谱图:音频信号的第一幅图像。FT应在音频数据阵列上执行,而不是在图片上执行。有关添加到帖子的频率的信息。