- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 JTransforms 库来计算 FS 为 44100 Hz 的一秒信号的 DFT。代码非常简单:
DoubleFFT_1D fft = new DoubleFFT_1D(SIZE);
fft.complexForward(signal); // signal: 44100 length array with audio bytes.
有关 JTransform 的 DoubleFFT_1D
类的文档,请参阅此页面。 http://incanter.org/docs/parallelcolt/api/edu/emory/mathcs/jtransforms/fft/DoubleFFT_1D.html
问题是:SIZE
应该是多少?我知道这可能是窗口大小,但似乎无法让它与我遇到的最常见的值一起使用,例如 1024 和 2048。
目前我正在通过生成 1kHz 正弦信号来测试此功能。但是,当我使用上面的代码并将结果与 MATLAB 的 fft
函数进行比较时,它们似乎完全不同。例如。 MATLAB 给出的结果如 0.0004 - 0.0922i
,而上述代码的结果如 -1.7785E-11 + 6.8533E-11i
,SIZE 设置为 2048。然而,信号数组的内容是相等的。
SIZE
的哪个值会给出与 MATLAB 的内置 fft
类似的 FFT 函数?
最佳答案
根据文档,SIZE
看起来应该是 signal
中的样本数。如果它确实是 44.1 kHz 的 1 秒信号,那么您应该使用 SIZE = 44100
。由于您使用的是复杂数据,因此 signal
应该是这个大小的两倍的数组(按顺序排列实数/虚数)。
如果您不使用 SIZE = 44100
,您的结果将与 Matlab 给您的结果不匹配。这是因为 Matlab(可能还有 JTransforms)根据输入的长度缩放 fft
和 ifft
函数的方式——不用担心振幅不会匹配。默认情况下,Matlab 使用完整信号计算 FFT。您可以为 fft
(在 Matlab 中)提供第二个参数来计算 N 点 FFT,它应该与您的 JTransforms 结果相匹配。
从您的评论来看,您似乎正在尝试创建一个 spectrogram .为此,您必须在以下各项之间权衡取舍:光谱分辨率、时间分辨率和计算时间。这是我的 1 秒频谱图的 (Matlab) 代码,针对 1 秒信号的每个 512 个样本 block 进行计算。
fs = 44100; % Hz
w = 1; % s
t = linspace(0, w, w*fs);
k = linspace(-fs/2, fs/2, w*fs);
% simulate the signal - time-dependent frequency
f = 10000*t; % Hz
x = cos(2*pi*f.*t);
m = 512; % SIZE
S = zeros(m, floor(w*fs/m));
for i = 0:(w*fs/m)-1
s = x((i*m+1):((i+1)*m));
S(:,i+1) = fftshift(fft(s));
end
对于此图像,我们沿频率轴(y 轴)有 512 个样本,范围从 [-22050 Hz 到 22050 Hz]。沿时间轴(x 轴)有 86 个样本,覆盖约 1 秒。
对于这张图片,我们现在沿着频率轴(y 轴)有 4096 个样本,范围从 [-22050 Hz 到 22050 Hz]。时间轴(x 轴)再次覆盖约 1 秒,但这次只有 10 个 block 。
具有快速时间分辨率(512 个样本 block )还是高光谱分辨率(4096 个样本 block )更重要取决于您使用的信号类型。您必须决定您在时间/光谱分辨率方面想要什么,以及您可以在合理的计算时间内实现什么。例如,如果您使用 SIZE = 4096
,您将能够计算出约 10x/s 的频谱(基于您的采样率),但 FFT 的速度可能跟不上。如果您使用 SIZE = 512
,您的频谱分辨率会较差,但 FFT 计算速度会快得多,您可以计算 ~86x/s 的频谱。如果 FFT 仍然不够快,您可以开始跳过 block (例如,使用 SIZE=512
但只计算每隔一个 block ,每 1s 信号给出约 43 个频谱)。希望这是有道理的。
关于java - 与 MATLAB 相比,JTransforms FFT 中的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368129/
当我使用 jTransform 时。 https://sites.google.com/site/piotrwendykier/software/jtransforms 用我的应用程序对我的 pcm
我正在为 Google Glass 开发一个应用程序,该应用程序自录制音频以来实时显示峰值电流峰值频率。我当前的问题是频率报告变化非常快,因此很难确定频率我也不确定我的 NumberFormat 输出
我有一张图像,我想使用 FFT 将其转换为频域,Java 似乎缺少这方面的库,但我找到了两个。一个是 JTransforms,另一个不太知名,没有名字。 对于不太知名的 2D 只能具有二次幂的长度值,
我正在使用 Jtransforms java 库对给定的数据集执行分析。 数据示例如下: 980,988,1160,1080,928,1068,1156,1152,1176,1264 我在 jTran
鉴于我只想选择频率,我正在尝试计算逆 FFT。以下是我进行 FFT 的方法: final double[] points = reader.readPoints(); final DoubleFFT_
我一直在寻找快速和完整的 DSP java 库来与 android 音频操作一起使用。我对 FFT 的高度计算有疑问。然后我找到了 JTransforms。我无法在任何地方找到有关如何使用它的文档。具
我正在尝试使用 jTransforms 库对 WAV 文件进行频谱分析:Official Site 但是我在如何使用 jTransforms 将 WAV 文件转换为 FFT 可接受的输入以及如何在 F
我一直在阅读 SO 中有关 FTT 和使用 JTransform 的所有帖子。我有一个真实数据,它的大小为 N。我想将它传递给 FFT,以便我可以计算每个频率的幅度。 我已经使用 FFT 函数在 ma
我正在使用 JTransforms realForwardFull 和 RealInverse 来测试它们的工作原理。我的理解是,在您将音频信号传递给 realForwardFull 然后应用 Rea
我想展示一些PCM数据的可视化效果。目标是显示如下内容: 我搜索并发现 JTransform 是正确的库。但是,我找不到如何使用这个库的好指南。如何将我的 PCM 数据转换为可用于绘制条形的频带/频率
我正在尝试将 JTransforms-3.0-javadoc.jar 文件包含到我在 android studio 中的项目中,并在这里查看了类似的问题,但我似乎没有任何运气。这里有人知道让它工作所需
我想做的是用 Java 计算图像的 2D DCT,然后将结果保存回文件。 读取文件: coverImage = readImg(coverPath); private BufferedImage re
我正在尝试使用 JTransform 获取 bufferedImage 的 DCT。当我可视化转换时,它当前看起来像这样 http://tinypic.com/r/2vcxhzo/8 为了使用 Jtr
我正在尝试使用以下代码计算时间序列中样本窗口的自相关。我正在对该窗口应用 FFT,然后计算实部和虚部的大小并将虚部设置为零,最后对其进行逆变换以获得自相关: DoubleFFT_1D fft = ne
我正在使用 Java 中的 JTransforms 中的 DoubleFFT_1D.realForward() 来处理示例。 有谁知道这个方法输入的double[] a的长度是否必须是2的幂?在 JT
我尝试对长度为4000的输入信号进行FFT。我的java代码如下: Vector signal = readFile("signal.txt"); double[] input = n
我目前正在使用 JTransforms 库来计算 FS 为 44100 Hz 的一秒信号的 DFT。代码非常简单: DoubleFFT_1D fft = new DoubleFFT_1D(SIZE);
我有时域数据样本,这些样本不断更新名为“rollHistory”的 LinkedList,然后显示在图中,如下所示: if (rollHistory.size() > HISTORY_SIZE) {
我对任意长度的数组执行 FFT。API可以引用如下: realForward public void realForward(double[] a) Computes 1D forward DFT o
我正在尝试为 JTransforms 安装库。我从这里下载了 .jar 文件:https://sites.google.com/site/piotrwendykier/software/jtransf
我是一名优秀的程序员,十分优秀!