社区
数据结构与算法
帖子详情
求fft代码;
lanren_me
2002-12-26 12:27:29
手头有部分代码:但是不知是干吗的。所以可以的话来点注释;
...全文
208
7
打赏
收藏
求fft代码;
手头有部分代码:但是不知是干吗的。所以可以的话来点注释;
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lanren_me
2002-12-29
打赏
举报
回复
大大:
问题是:比如:采样N个点,每个点的值为float值;
那么这个float值是实数还是虚数???怎么转化为复数啊???
strafer
2002-12-28
打赏
举报
回复
wa, 楼上大哥的程序风格像是大公司的, 变量都选那么长的!!!
eastsun
2002-12-28
打赏
举报
回复
void HPFAST_OneDimension_FFT_Trans(
_complex_digital_array the_src_sign_array,
_complex_digital_array& result_sign_array )
{
_complex_digital_array src_sign_array;
src_sign_array = the_src_sign_array;
int nInputSignAmount = src_sign_array.GetSize( );
result_sign_array.RemoveAll( );
if( ! Is2MiNumber( nInputSignAmount ) )
return;
int nInputSignLog2Mi = GetLog2( nInputSignAmount );
if( nInputSignLog2Mi <= 0 )
{
result_sign_array = src_sign_array;
return;
}
result_sign_array.InitBySize( nInputSignAmount );
////////////////////////////////////////////////////////////
int nMiIndex = 0;
////////////////////////////////////////////////////////////
int nDotIndex = 0;
for( nDotIndex = 0; nDotIndex < nInputSignAmount; nDotIndex ++ )
{
int m = nDotIndex;
int is = 0;
for( nMiIndex = 0; nMiIndex < nInputSignLog2Mi; nMiIndex ++ )
{
int j = m / 2;
is = 2 * is + ( m - 2 * j );
m = j;
}
_complex_digital temp_des_digital;
_complex_digital temp_src_digital;
temp_src_digital = src_sign_array.GetAt( is );
temp_des_digital = temp_src_digital;
result_sign_array.SetAt( nDotIndex, temp_des_digital );
}//这个循环完成置换。
double dGuiyiCoefficient = 2.0 * PI / nInputSignAmount;
_complex_digital temp_digital0;
temp_digital0.HP_SetRealAndVirtualValue( 1.0, 0.0 );
_complex_digital temp_digital1;
temp_digital1.HP_SetRealAndVirtualValue( cos( dGuiyiCoefficient ), - sin( dGuiyiCoefficient ) );
{
src_sign_array.SetAt( 0, temp_digital0 );
src_sign_array.SetAt( 1, temp_digital1 );
}
_complex_digital base_trans_digital = temp_digital1;
for( nDotIndex = 2; nDotIndex < nInputSignAmount; nDotIndex ++ )
{
_complex_digital the_pre_digital = src_sign_array.GetAt( nDotIndex - 1 );
_complex_digital current_digital;
current_digital = the_pre_digital * base_trans_digital;
src_sign_array.SetAt( nDotIndex, current_digital );
}//这个循环完成基本的单点变换。
for( nDotIndex = 0; nDotIndex < nInputSignAmount - 1; nDotIndex += 2 )
{
_complex_digital current_digital = result_sign_array.GetAt( nDotIndex );
_complex_digital next_digital = result_sign_array.GetAt( nDotIndex + 1 );
_complex_digital origen_current_digital = current_digital;
current_digital += next_digital;
next_digital = origen_current_digital - next_digital;
result_sign_array.SetAt( nDotIndex, current_digital );
result_sign_array.SetAt( nDotIndex + 1, next_digital );
}
int m = nInputSignAmount / 2;
int nv = 2;
for( nMiIndex = nInputSignLog2Mi - 2; nMiIndex >= 0; nMiIndex -- )
{
m = m / 2;
nv = 2 * nv;
for( nDotIndex = 0; nDotIndex <= ( m - 1 ) * nv; nDotIndex += nv )
{
int jjs = 0;
for( jjs = 0; jjs < ( nv / 2 ); jjs ++ )
{
int nOffset = nDotIndex + jjs + nv / 2;
_complex_digital temp_src_mj_digital = src_sign_array.GetAt( m * jjs );
_complex_digital temp_result_offset_digital = result_sign_array.GetAt( nOffset );
_complex_digital the_product_digital = temp_src_mj_digital * temp_result_offset_digital;
_complex_digital the_result_index_add_jjs_digital = result_sign_array.GetAt( nDotIndex + jjs );
temp_result_offset_digital = the_result_index_add_jjs_digital - the_product_digital;
the_result_index_add_jjs_digital += the_product_digital;
result_sign_array.SetAt( nOffset, temp_result_offset_digital );
result_sign_array.SetAt( nDotIndex + jjs, the_result_index_add_jjs_digital );
}
}
}
result_sign_array /= ( 1.0 * nInputSignAmount );
}
lanren_me
2002-12-27
打赏
举报
回复
能否解释一下:实数表,虚数表
dcyu
2002-12-27
打赏
举报
回复
在频域方面会有复频率出现,因此就需要建立n个复数的抽样点,
实数表,虚数表是这n个点各自的实部和虚部。
比如四个采样点为:1+j2 , 2+j3 , 4+j5 , 67+j12
它们的实数表,虚数表是两个一维数组:
{1,2,4,67},{2,3,5,12}
dcyu
2002-12-26
打赏
举报
回复
72. 函数名:_FFT
功能:FFT变换
用法:void _FFT(double *fr, double *fi, int n, int flag)
参数:fr:采样点的实数表,fi:采样点的虚数表,n:采样点个数,flag:flag=0表示求Fourier变换,flag=1表示求逆Fourier变换
返回:无
void _FFT(double *fr, double *fi, int n, int flag)
{
int mp,arg,q,cntr,p1,p2;
int i,j,a,b,k,m;
double sign,pr,pi,harm,x,y,t;
double *ca,*sa;
ca=(double *)calloc(n,sizeof(double));
sa=(double *)calloc(n,sizeof(double));
if(ca==NULL||sa==NULL) Error("calloc error in _FFT!");
j=0;
if(flag!=0)
{
sign=1.0;
for(i=0;i<=n-1;i++)
{
fr[i]=fr[i]/n;
fi[i]=fi[i]/n;
}
}
else
sign=-1.0;
for(i=0;i<=n-2;i++)
{
if(i<j)
{
t=fr[i];
fr[i]=fr[j];
fr[j]=t;
t=fi[i];
fi[i]=fi[j];
fi[j]=t;
}
k=n/2;
while(k<=j)
{
j-=k;
k/=2;
}
j+=k;
}
mp=0;
i=n;
while(i!=1)
{
mp+=1;
i/=2;
}
harm=2*M_PI/n;
for(i=0;i<=n-1;i++)
{
sa[i]=sign*sin(harm*i);
ca[i]=cos(harm*i);
}
a=2;
b=1;
for(cntr=1;cntr<=mp;cntr++)
{
p1=n/a;
p2=0;
for(k=0;k<=b-1;k++)
{
i=k;
while(i<n)
{
arg=i+b;
if(k==0)
{
pr=fr[arg];
pi=fi[arg];
}
else
{
pr=fr[arg]*ca[p2]-fi[arg]*sa[p2];
pi=fr[arg]*sa[p2]+fi[arg]*ca[p2];
}
fr[arg]=fr[i]-pr;
fi[arg]=fi[i]-pi;
fr[i]+=pr;
fi[i]+=pi;
i+=a;
}
p2+=p1;
}
a*=2;
b*=2;
}
free(ca);
free(sa);
}
dcyu
2002-12-26
打赏
举报
回复
Fast Fourier Transform 是信号处理常用的简化计算的算法
fft
matlab
代码
,
求
zoom
fft
的Matlab
代码
disp(' zoom
FFT
- version 1.1, April 20, 2005 ');disp(' by Tom Irvine ');disp(' Email: tomirvine@aol.com ');%disp(' ');disp(' This program calculates the non-destructive zoom ');disp(' Fast Fourier tra...
洛谷P4721 分治
FFT
(多项式
求
逆模板+生成函数)
https://www.luogu.org/problem/P4721 这道题不算是一道裸的多项式
求
逆模板。 首先这道题题目说的是分治
FFT
,我反正弄了几天,开始学
FFT
就看到这道题了,没有弄出来,到处瞎想,太弱了。 随着知识的深入后来发现这是一道模板题。 其实这道题和生成函数应该不是很大,即使你不知道,我想可能乱搞也会出来。。。。。 我们来开始推导一下。 首先有这个式子: 然后...
向大神们
求
助!!!
求
16点基2时间抽取法实现
FFT
算法的完整verilog
代码
求
助!!
求
16点基2时间抽取法实现
FFT
算法的完整verilog
代码
当真不会写这个,如果有哪位大神有这个完整
代码
的话,可以发我邮箱591196851@qq.com 感谢!!! ...
[学习笔记]
FFT
之多项式
求
逆与一类组合计数 DP 问题
一、引入 有时候,我们会遇到这种形式的问题: 给定一个定义域为 [0,n)[0,n)[0,n) 且自变量为整数的函数(数组) fff ,有一个未知函数 ggg , 给定 fff 与 ggg 的卷积 hhh ,
求
g=hfg=hfg=\frac hf 。 这时候要用到一个技巧——多项式
求
逆。 二、概念 一个 nnn 项 n−1n−1n-1 次多项式 AAA 的逆元,定义为一个多项式 ...
[Luogu4239] 【模板】多项式
求
逆(加强版) [多项式
求
逆][MTT][三模数NTT]
#include<cstdio> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<cctype> using names...
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章