问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求c 或c++ 实现fft变换求频谱

发布网友 发布时间:2023-04-13 08:08

我来回答

1个回答

热心网友 时间:2023-10-31 06:53

#include<stdio.h>
#include<math.h>
#include<string.h>

void kkfft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il)
{
int it,m,is,i,j,nv,l0;
double p,q,s,vr,vi,poddr,poddi;

for (it=0; it<=n-1; it++)
{
m = it;
is = 0;
for(i=0; i<=k-1; i++)
{
j = m/2;
is = 2*is+(m-2*j);
m = j;
}
fr[it] = pr[is];
fi[it] = pi[is];
}
/*/----------------------------*/
pr[0] = 1.0;
pi[0] = 0.0;
p = 6.283185306/(1.0*n);
pr[1] = cos(p);
pi[1] = -sin(p);

if (l!=0)
pi[1]=-pi[1];

for (i=2; i<=n-1; i++)
{
p = pr[i-1]*pr[1];
q = pi[i-1]*pi[1];
s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
pr[i] = p-q;
pi[i] = s-p-q;
}

for (it=0; it<=n-2; it=it+2)
{
vr = fr[it];
vi = fi[it];
fr[it] = vr+fr[it+1];
fi[it] = vi+fi[it+1];
fr[it+1] = vr-fr[it+1];
fi[it+1] = vi-fi[it+1];
}
m = n/2;
nv = 2;

for (l0=k-2; l0>=0; l0--)
{
m = m/2;
nv = 2*nv;
for(it=0; it<=(m-1)*nv; it=it+nv)
for (j=0; j<=(nv/2)-1; j++)
{
p = pr[m*j]*fr[it+j+nv/2];
q = pi[m*j]*fi[it+j+nv/2];
s = pr[m*j]+pi[m*j];
s = s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
poddr = p-q;
poddi = s-p-q;
fr[it+j+nv/2] = fr[it+j]-poddr;
fi[it+j+nv/2] = fi[it+j]-poddi;
fr[it+j] = fr[it+j]+poddr;
fi[it+j] = fi[it+j]+poddi;
}
}

if(l!=0)
for(i=0; i<=n-1; i++)
{
fr[i] = fr[i]/(1.0*n);
fi[i] = fi[i]/(1.0*n);
}

if(il!=0)
for(i=0; i<=n-1; i++)
{
pr[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
if(fabs(fr[i])<0.000001*fabs(fi[i]))
{
if ((fi[i]*fr[i])>0)
pi[i] = 90.0;
else
pi[i] = -90.0;
}
else
pi[i] = atan(fi[i]/fr[i])*360.0/6.283185306;
}

return;
}

void main()
{
FILE *fp;
int ii;
if((fp=fopen("aaa.wav","rb"))==NULL)
{ printf("Cannot open the file\n");exit(0);}//如果文件打不开,则关闭所有文件,显示出错
//--------------------------
double td[256],tm[256]={0}; //原文件虚部为0
double ffr[256],ffi[256] ;
fread(td,8,256,fp); //试着从fp所指文件中读取256个double型数据,读取一次,寸入td数组中

kkfft(td,tm,256,8,ffr,ffi,0,1);
fclose(fp);
for(ii=0;ii<256;ii++)
printf("%f ",ffr[ii]);
getchar();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 奥拓贝贝一下灭火,怎么打都不着车,仪表盘灯都亮,过会又着了, 什么是学习型城市 _市的解释 _市的解释是什么 市学的解释 学市的网络解释学市的网络解释是什么 lgup850typec黑屏 lg显示器typec接man不显示 岩土工程师一年考几次 证书含金量高吗 考岩土工程师证需要什么条件 有没有专业为企业身定制网站的,昆明网站建设公司,因为我的企业所在的行业比较特殊 昆明哪家公司提供网站建设服务 如何查个人名下有几个操作 覆膜砂铸造小件是否合适 铸铝吃砂量 砂铁比的解释砂铁比的解释是什么 什么是一列装铁丝网 孩子生日忘了发视频怎么办 可以补发抖音作品吗 补发一个中午的视频怎么发 边朔的结构边朔的结构是什么 正弦序列FFT频谱分析程序问题!! k和n的关系 为什么利用fft画出的频谱和直接利用公式画出的频谱不一致? 如何找融资,求助! 小米电话手表未联网能打电话 山体水库冬季钓鲫鱼选择钓位 冬天水库涨水怎么选钓位 念珠菌要注意哪些饮食 皮肤念珠菌病的饮食 治疗念珠菌期间需要忌吃什么食物?需要更换所有的毛巾和内裤吗? 怎么对青少年进行恋爱心理辅导 如何疏导青少年的早恋情结 小孩出现肺热咳嗽有什么治疗方法呢? 下肢运动障碍的原因有哪些? 女人来月经肚子痛怎么办,来月经肚子疼正常吗 占位病变是什么意思? 占位性病变 卵巢占位性病变是什么意思 2011新款秋装韩版女装新品长款修身短袖针织衫开衫连帽薄外套要怎么搭 修身女衬衫 圆领雪纺衫 韩版短袖 潮流夏装 个性街头女装 送腰带