我知道,如果我们有一些代表某种波的数据,例如图像线值,我们可以使用傅里叶变换来获取该波的频率函数。但是我们在点x=0...N-1处有N个值,而且我们只在输出处得到了N个频率。因此,我想在范围[0,N-1]中的任何位置分析该波,例如在u = 1.5点。我该怎么做?
我知道,如果我们有一些代表某种波的数据,例如图像线值,我们可以使用傅里叶变换来获取该波的频率函数。但是我们在点x=0...N-1处有N个值,而且我们只在输出处得到了N个频率。因此,我想在范围[0,N-1]中的任何位置分析该波,例如在u = 1.5点。我该怎么做?
从一组样本中计算任何频率的傅里叶变换值其实非常容易:
F(w)= sum[over all sample indices k] ( f(t_k) e^(i w t_k) )
从代码层面来说,你可以这样做:
float Fourier(float omega) {
Complex a(0.0); // think "a is for accumulator"
for(int k=0; k<value.size(); ++k) {
float time= t_start + k*dt;
float theta= omega * time; // this is (w t_k) from above
a+= value[k] * Complex(cos(theta), sin(theta));
}
return a;
} // note, I have explicitly written out e^(i theta) = cos(theta) + i sin(theta)
你需要插值这些中间点的数据。
距离我上次做这些已经超过10年了,但我想Matlab有一些傅里叶变换的方法可以让你做你想要的事情。至少在我们的线性信号和DSP课程中就是这样使用的。