Audio 如何将音频(.wav)转换为卫星图像

Audio 如何将音频(.wav)转换为卫星图像,audio,fft,wave,satellite,noaa,Audio,Fft,Wave,Satellite,Noaa,我需要创建一个软件,可以捕捉声音(从NOAA卫星与RTL-SDR)。问题不在于捕捉声音,而在于如何将音频或波转换成图像。我读了很多东西,傅里叶快速变换,希尔伯特变换,等等。。。但我不知道怎么做 如果你能给我一个主意,那就太棒了。谢谢大家! 在过去的一年里,我一直在编写代码,进行FFT调用,并积累了15页的笔记,因此主题非常广泛,但我可以将其归结为 打开你的WAV文件。。。解析44字节的头并注意给定的位深度和endianness属性。。。然后读取整个有效载荷,即标题之后的所有内容。。。理解钻头深度

我需要创建一个软件,可以捕捉声音(从NOAA卫星与RTL-SDR)。问题不在于捕捉声音,而在于如何将音频或波转换成图像。我读了很多东西,傅里叶快速变换,希尔伯特变换,等等。。。但我不知道怎么做


如果你能给我一个主意,那就太棒了。谢谢大家!

在过去的一年里,我一直在编写代码,进行FFT调用,并积累了15页的笔记,因此主题非常广泛,但我可以将其归结为

打开你的WAV文件。。。解析44字节的头并注意给定的位深度和endianness属性。。。然后读取整个有效载荷,即标题之后的所有内容。。。理解钻头深度和端度的概念。。。通常,WAV文件的位深度为16位,因此音频曲线上的每个点将跨两个字节存储。。。通常WAV文件是小端而不是大端。。。知道这意味着什么,你取下两个字节,然后将一个字节移到左边(如果是小端),然后将一个字节或那对字节转换成一个整数,然后将通常在0到(2^16-1)之间变化的整数转换成它的浮点等价值,这样你的音频曲线点现在在-1到+1之间变化。。。对与有效负载缓冲区的每个样本相对应的每组字节进行转换

一旦您有了WAV音频曲线作为浮点缓冲区,称为原始音频或PCM音频,然后执行FFT api调用。。。所有语言都有这样的库。。。FFT调用的输出将是一组复数。。。注意奈奎斯特极限的概念。。。这将影响您如何利用FFT调用的输出

现在你有了一组复数。。。该集合从0到N的索引对应于频率箱。。。PCM缓冲区的大小将决定频率存储单元的粒度。。。查找这个等式。。。通常,您发送到FFT api调用的PCM缓冲区中的更多样本将使输出频率箱中的粒度更细。。。从本质上说,这意味着当您遍历这个复数集合时,每个索引将增加分配给该索引的频率

为了可视化,只需将其输入2D图,其中X轴为频率,Y轴为幅值。。。使用以下公式计算每个复数的大小:

curr_mag = 2.0 * math.Sqrt(curr_real*curr_real+curr_imag*curr_imag) / number_of_samples
为了简单起见,我们将在您的复数缓冲区中扫描您可用的相移信息

这仅仅触及了你需要掌握的东西的表面,以便正确地将WAV文件渲染成其频域表示的2D图。。。有一些库可以部分或全部执行这些操作,但是现在,当橡胶碰到路面时,您可以欣赏其中的一些魔力

这是一个很好的解释,说明了频率分辨率和输入到FFT api调用中的音频样本数量之间的权衡

帮自己一个忙,检查一下,这是许多音频工作站中的一个,可以执行我上面描述的操作。只需点击菜单文件->打开->选择一个本地WAV文件->图层->添加光谱图。。。它将呈现输入音频文件的傅里叶变换的可视表示