马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
​破国产工业软件的困局,还是要从代码开源做起,因此,本账号以后会不定期发布信号处理相关的开源代码。 在这里诚恳希望大家把文章转给在校的学生和软件爱好者们。谢谢!
先看下面这段代码 void fft(float *res,float *data,int n,int size,int sign)
{
int m=log((float)nPts)/log(2.0f)+0.2;
float *x,*y;
int i,j,k,l,n1,n2;
float c,c1,e,s,s1,t,tr,ti; int *fft_table=fft_array[m-7];
int segLength=n/size;
m+=log((float)segLength)/log(2.0f); x=new float[n];
y=new float[n];
memset(x,0,n*4);
memset(y,0,n*4);
for(j=0;j<size;j++)
x[j*segLength]=data[fft_table[j]]; n1=1;
for(l=1;l<=m;l++)
{
n1=2*n1;
n2=n1/2;
e=3.14159265359/n2;
c=1.0;
s=0.0;
c1=cos(e);
s1=-sign*sin(e); for(j=0;j<n2;j++)
{
for(i=j;i<n;i+=n1)
{
k=i+n2;
tr=c*x[k]-s*y[k];
ti=c*y[k]+s*x[k];
x[k]=x-tr;
y[k]=y-ti;
x=x+tr;
y=y+ti;
}
t=c;
c=c*c1-s*s1;
s=t*s1+s*c1;
}
}
if(sign==-1) //ifft
{
for(i=0;i<n/2;i++)
{
x/=n;
y/=n;
}
} float adjust1=2; //Hannin window amplitude factor
float adjust=adjust1*2.0f/size*sqrt(1.0f*size/n);
if(m_propData.m_nAmplitude)
adjust*=sqrt(2.0f);
for(i=0;i<n/2;i++)
res=sqrt(x*x+y*y)*adjust; delete x;
delete y;
x=NULL;
y=NULL;
return;
} 总共69行,85个单词 功能就是实现时域到频域的快速傅里叶变换。 OMG,NVH工程师们天天在扯的频率问题,用C语言其实仅仅需要85个单词。 |