Java 平差FFT图(处理)

Java 平差FFT图(处理),java,processing,fft,visualization,Java,Processing,Fft,Visualization,我试图在处理过程中制作一个音乐可视化工具,并不是说这一部分非常重要,我使用的是通过极小值的快速傅里叶变换。它工作得很好(读取数据),但在左(低音)端有一个很大的尖峰。“平衡”这个问题的最佳方法是什么? 我的源代码是,如果你想看看的话 提前感谢, -tlf您展示的频谱看起来相当典型,是一种复杂的音乐声音,在低频段有一个复杂的部分,但低频段也有一些清晰的谐波。事实上,这些谐波非常明显。。。一般来说,音乐是复杂的。例如,有时,如果一支笛子演奏的是一个清晰的音符,一个人会得到一个或两个美妙的峰值,但更

我试图在处理过程中制作一个音乐可视化工具,并不是说这一部分非常重要,我使用的是通过极小值的快速傅里叶变换。它工作得很好(读取数据),但在左(低音)端有一个很大的尖峰。“平衡”这个问题的最佳方法是什么?
我的源代码是,如果你想看看的话

提前感谢,

-tlf

您展示的频谱看起来相当典型,是一种复杂的音乐声音,在低频段有一个复杂的部分,但低频段也有一些清晰的谐波。事实上,这些谐波非常明显。。。一般来说,音乐是复杂的。例如,有时,如果一支笛子演奏的是一个清晰的音符,一个人会得到一个或两个美妙的峰值,但更常见的是,瞬变和敲击声会导致非常复杂的频谱,尤其是在低频率下

与视频直接比较,我觉得视频有点奇怪。我的猜测是,他们显示的频谱要么是远离零的频谱的一小部分的放大,要么只是基于音乐的图形算法,但与实际频谱不符。也就是说,如果你真的想让某个东西看起来与这段视频非常相似,你需要的不仅仅是光谱,尽管光谱可能是一个很好的起点。这里有几点需要注意:
1) 有一个突出的峰值,偶尔出现在单词anchor的“N”上方。音频中的单个主峰应清晰,近似纯音。
2) 偶尔会有另一个峰值随该峰值的时间变化,这通常是第二个峰值是谐波的标志,但很多时候第二个峰值不在那里。

3) 奇怪行为的一个好例子是2:26。这一次只是在一点激光声音效果之后,然后基本上有一个相当嘶嘶的声音。嘶嘶声应该是没有峰值的广谱声音,通常加权到较低的频率。但是,在2:26,在“N”上方只有一个大的峰值,没有其他任何东西。

结果是,我要做的是将数据乘以
Math.log(i+2)/3
其中,
i
是被引用数据的索引,从左侧开始索引为零(bass)。
您可以在上下文中看到这一点

这可能是由于您的信号中存在直流偏移。尝试在时域中减去信号的平均值(即,在进行fft之前,取波形的原始部分,将所有值相加,除以N,然后从波形中的每个点减去该值…然后进行fft)。嗯。什么?对不起,我不知道那是什么意思。XD如果有帮助的话,我还编辑了我的问题以包含我的代码。仔细查看您的数据,如果大峰值仅在最末端(即,零频率),只需忽略它(例如,将其设置为零)。这一点对应于数据的平均值,这可能不是您在绘图中所追求的。这是FFT的数学定义的结果,但很少有人真正关心它。基本上,我有一些看起来像的东西,我试图让它看起来像。我可以忽略第一件事吗?不。我以为这只是第一点。稍后我会尝试写一个更详细的答案,但现在不得不放弃。同时,我在你的问题中加入了你的情节(因为我想你不能用低重复率),但它的信息非常丰富,所以请围绕它写一些解释性的文字。有趣的。。。好吧,谢谢你。我也觉得有点不对劲,但我不太清楚这些东西到底是如何工作的,所以不能确定。把这个标记为说它实际上不是光谱的答案。弄清楚他们在这里到底做了什么将是一个有趣的问题。我想到的另一个选择是:1)翻转频谱,使较低的频率位于右侧,更有趣的是,2)缩放振幅,使较高的频率获得更大的权重(例如,将FFT振幅乘以
f
,或者可能是在较大的f处变平的某个东西,如调整后的
log(f)
或sigmoidal)我试着做一个日志,但没能让它工作。我可能会再试一次,因为它看起来真的应该。我找到了日志!(无论如何,足够接近了):D