我正在尝试实现类似 here 的内容和 here ,具体来说,我希望能够执行以下操作,如下图所示:
也就是说,给定 N 个具有恒定时间间隔的离散点,我想创建一个收敛到这些点的函数,如图所示......
到目前为止我所做的是:
- 导入 jtransform
用过
private double[] doDFT(double[] data, int start, int end) { DoubleFFT_1D doubleFFT_1D = new DoubleFFT_1D(end-start); double[] array = new double[(end-start)*2]; for (int i=0;i<end-start;i++) { array[i] = data[i+start]; array[i+1] = data[i+start+1]; } doubleFFT_1D.complexForward(array); return array; }
现在我陷入困境,如何使用输出数组来生成收敛到原始数据数组中的点的函数?
只是为了明确我想要的内容:例如,在图像中,输入到 doDFT 的数据数组是蓝线图,我想要的是生成一个函数 f ,其图像是红线图。
最佳答案
您可能希望将复数输入的虚部设置为零,而不是下一个点。
您想要的函数是正弦曲线。每个正弦波的频率为 FFT 结果箱索引 * Fs/N。每个正弦曲线的幅度和相位将由与其 FFT 结果箱对应的复数值给出。
您可以从 1 开始对越来越多的正弦曲线求和,以获得收敛波形。
关于java - 如何使用DFT来逼近函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442744/