各位大侠,我现在用vc要实现一个fft2功能,可是为什么结果总是不对呢?我将此功能单独拿出来和matlab中的fft2函数算的结果比较,总是不一样,而且有的差很多,这是为什么呢?难道我的vc程序有问题吗?
我具体的实现方法是:
二维离散傅里叶变换可以由两步一维离散傅里叶变换来实现:1.出每一行的一维的FFT,并存储在一个中间距阵中;2.将中间矩阵转置;3.求出转置中间距阵中每一行的一维FFT,再将之转置即可。代码:for(j=0;j<h;j++)//在垂直方向上进行快速傅里叶变换
{
for(i=0;i<wl;i++)
te[i]=t[wl*j+i];
FourierTransform(te,fe,0,1);
for(i=0;i<wl;i++)
{
f[wl*j+i]=fe[i];
}
}
for(j=0;j<h;j++)//转换变换结果
{
for(i=0;i<wl;i++)
{
t[j+h*i]=f[i+wl*j];
}
} for(j=0;j<wl;j++)//水平方向进行快速傅里叶变换
{
for(i=0;i<h;i++)
te[i]=t[h*j+i]; FourierTransform(te,fe,0,1); for(i=0;i<h;i++)
f[h*j+i]=fe[i];
}请高人指点一下。。十万火急。。如果有误,请高人给个正确的实现代码。
我具体的实现方法是:
二维离散傅里叶变换可以由两步一维离散傅里叶变换来实现:1.出每一行的一维的FFT,并存储在一个中间距阵中;2.将中间矩阵转置;3.求出转置中间距阵中每一行的一维FFT,再将之转置即可。代码:for(j=0;j<h;j++)//在垂直方向上进行快速傅里叶变换
{
for(i=0;i<wl;i++)
te[i]=t[wl*j+i];
FourierTransform(te,fe,0,1);
for(i=0;i<wl;i++)
{
f[wl*j+i]=fe[i];
}
}
for(j=0;j<h;j++)//转换变换结果
{
for(i=0;i<wl;i++)
{
t[j+h*i]=f[i+wl*j];
}
} for(j=0;j<wl;j++)//水平方向进行快速傅里叶变换
{
for(i=0;i<h;i++)
te[i]=t[h*j+i]; FourierTransform(te,fe,0,1); for(i=0;i<h;i++)
f[h*j+i]=fe[i];
}请高人指点一下。。十万火急。。如果有误,请高人给个正确的实现代码。
解决方案 »
- 求解释!
- 5条裤衩丢失,淫荡的灵魂支撑着无耻的身躯,绽放出一刻闪亮红星,散分咯
- shockwave flash 控件与电脑安装的flash activeX版本的冲突
- 用MFC做框架的問題
- 对话框窗口产生后弹出光驱应在哪个函数中?
- 在WIN2000下怎么VC不识别PROCESSENTRY32结构啊
- 100分,求解! 我在对话框上放置了一个IE浏览器控件,有时候关闭程序的时候,虽然窗口已经没有了,但是这个进程并没有死去,而是要过8秒
- 怎样实现MDI拆分窗口?(CSplitter)
- socket编程中的缓冲区问题。
- 关于文档类的几个地方不是很理解
- 关于控件获得输入光标的问题!
- MFC的一个DC小问题
不过我觉得如果要实用,可以使用fftw这样的软件包,在www.fftw.org有得下。