jiuhe157 发表于 2020-6-18 21:48

破国产工业软件的困局,从代码开源开始

​破国产工业软件的困局,还是要从代码开源做起,因此,本账号以后会不定期发布信号处理相关的开源代码。在这里诚恳希望大家把文章转给在校的学生和软件爱好者们。谢谢!
先看下面这段代码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;
int segLength=n/size;
m+=log((float)segLength)/log(2.0f); x=new float;
y=new float;
memset(x,0,n*4);
memset(y,0,n*4);
for(j=0;j<size;j++)
x=data]; 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-s*y;
    ti=c*y+s*x;
    x=x-tr;
    y=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个单词。

mxlzhenzhu 发表于 2024-6-4 20:29

不错,如果用matlab做,24行
页: [1]
查看完整版本: 破国产工业软件的困局,从代码开源开始