当前位置:网站首页 > Java教程 > 正文

java频谱图教程



幸运的是,你似乎比错误更具有优势。

导致额外红线的首要问题是由于在中如何解码数据。由于样本跨越4个字节,所以您必须按4的倍数进行索引(例如,对于样本0,字节0,1,2,3,对于样本1,字节4,5,6,7),否则您将读取重叠的4个字节块(例如,样本0的字节0,1,2,3,样本1的字节1,2,3,4)。此转换的另一件事是,在将无符号字节分配给和(它们的类型为)之前,必须将结果明确地转换为带符号的类型,以便从无符号字节获得带符号的16位结果。这应该给您一个转换循环,看起来像:

到这个阶段,您应该开始获得一个具有强烈线条的图形,代表着您的20Hz-20kHz啁啾声:

fixed decoding

但您应该注意到实际上会得到两条线。这是因为对于实数信号,频率谱具有共轭对称性。频谱在奈奎斯特频率(一半采样率,本例中为44100Hz/2)以上的幅度是谱以下奈奎斯特频率的冗余反映。只绘制奈奎斯特频率以下的非冗余部分可以通过将中的 的定义更改为以下内容来实现:

并会给你:

只有非冗余频谱

这几乎是我们要找的,但随着频率的增加进行扫描会生成一条逐渐下降的线。这是因为你的索引使得0Hz频率在索引0处,也就是图像的顶部,而22050Hz频率在索引处,也就是图像的底部。为了将图像翻转并获得更常见的0Hz在底部,22050Hz在顶部,你可以改变索引使用:

现在你应该有一个看起来像你预期的图形(尽管使用了不同的颜色映射):

底部为0Hz

最后提醒一点:虽然我理解您避免在转换为分贝时取对数0的意图,但在这种情况下将输出设置为线性幅度可能会产生意外的结果。相反,我建议选择一个保护的截止阈值幅度:

版权声明


相关文章:

  • cmpp java 视频教程2025-03-10 22:26:01
  • 少儿java教程书籍2025-03-10 22:26:01
  • java985教程2025-03-10 22:26:01
  • java 入门的教程2025-03-10 22:26:01
  • java综合设计教程2025-03-10 22:26:01
  • java基础免费教程视频教程2025-03-10 22:26:01
  • java聊天机器人教程2025-03-10 22:26:01
  • java 坦克大战教程2025-03-10 22:26:01
  • java飞机教程2025-03-10 22:26:01
  • java c s教程2025-03-10 22:26:01