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

时间:2018-04-15 19:48:25

标签: audio fft wave satellite noaa

我需要创建一个可以捕获声音的软件(来自NOAA Satellite with RTL-SDR)。问题不是捕获声音,问题是我如何将音频或波形转换为图像。我读了很多东西,傅立叶快速变换,希尔伯特变换等......但我不知道如何。

如果你能给我一个想法那就太棒了。谢谢!

1 个答案:

答案 0 :(得分:0)

在过去的一年里,我一直在编写进行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 https://electronics.stackexchange.com/questions/12407/what-is-the-relation-between-fft-length-and-frequency-resolution的音频样本数量之间权衡的一个很好的解释

帮自己一个忙,结帐https://www.sonicvisualiser.org/这是许多可以执行我上面描述的音频工作站之一。只需点击菜单文件 - >打开 - >选择本地WAV文件 - >层 - >添加频谱图...它将呈现输入音频文件的傅里叶变换的直观表示

enter image description here