⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpse.txt

📁 一些信号分析的C 语言程序
💻 TXT
字号:
#include"math.h"
#include"stdlib.h"
#include"fft.c"

void compse(x,y,n,m,mode,win,fs,lag,nfft,r,freq,sxy,sdb)
int m,n,sdb,lag,win,mode,nfft;
double fs,r[],x[],y[],freq[],sxy[];
{
int i,j,k,s;
int nrd,nrdy,nrdx,shft,mhlf1,nsect1;
int nrdx1,nlast,nhf1;
double xmnc,xmns,xic,xis,yic,yis;
double pi,xsum,ysum,xmean,ymean,nsect;
double *xa,*xc,*xs,*zc,*zs;
xa=malloc(nfft*sizeof(double));
xc=malloc(nfft*sizeof(double));
xs=malloc(nfft*sizeof(double));
zc=malloc(m*sizeof(double));
zx=malloc(m*sizeof(double));
pi=4.0*atan(1.0);
shft=m/2;
mhlf1=shft+1;
nsect=(n+shft-1.0)/shft;
if(mode>=2)
{
s=0;
nrd=shft;
xsum=0.0;
ysum=0.0;
for(k=0;k<nsect;k++)
{
if(k==(nsect-1))nrd=n-(nsect-1)*nrd;
for(i=0;i<nrd;i++)
{
xa[i]=x[s+i];
}
for(i=0;i<nrd;i++)
{
xsum+=xa[i];
}
if(mode!=2)
{
for(i=0;i<nrd;i++)
{xa[i]=y[s+i];)
for(i=0;i<nrd;i++)
{ysum=ysum+xa[i];
}
s=s+nrd;
}
xmean=xsum/n;
ymean=ysum/n;
if(mode==2) ymean=xmean;
xmnc=xmean;
xmns=ymean;
}
s=0;
nrdy=m;
nrdx=shft;
for(i=0;i<mhlf1;i++)
{
zc[i]=0.0;
zs[i]=0.0;
}
for(k=0;k<nsect;k++)
{
nsect1=nsect-2;
if(k>=nsect1)
{
nrdy=n-k*shft;
if(k==(nsect-1))nrdx=nrdy;
if(nrdy!=m)
{for(i=nrdy;i<m;i++)
{xc[i]=0.0;
xs[i]=0.0;
}
}
}
for(i=0;i<nrdy;i++)
{xa[i]=x[s+i];}
for(i=0;i<nrdy;i++)
{xc[i]=xa[i];
xs[i]=xa[i];
}
if((mode!=0)&&(mode!=2))
{
for(i=0;i<nrdy;i++)
{xa[i]=y[s+i];
for(i=0;i<nrdy;i++)
{xs[i]=xa[i];
}
if(mode>=2)
{
for(i=0;i<nrdy;i++)
{
xc[i]=xc[i]-xmnc;
xs[i]=xs[i]-xmns;
}
}
nrdx1=nrdx;
for(i=nrdx1;i<m;i++)
{xc[i]=0.0;
fft(xc,xs,m,1);
for(i=1;i<shft;i++)
(j=m-i;
xic=(xc[i]+xc[j])*0.5;
xis=(xs[i]-xs[j])*0.5;
yic=(xs[i]+xs[j])*0.5;
yis=(xc[j]-xc[i])*0.5;
zc[i]=zc[i]+xic*yic+xis*yis;
zs[i]=zs[i]+xic*yis-xis*yic;
}
zc[0]=zc[0]+xc[0]*xs[0];
zc[shft]=zc[shft]+xc[shft]*xs[shft];
s=s+shft;
}
for(i=1;i<shft;i++)
{j=m-i;
xc[i]=zc[i];
xs[i]=zs[i];
xc[j]=zc[i];
xs[j]=-zs[i];
}
xc[0]=zc[0];
xs[0]=zs[0];
xc[shft]=zc[shft];
xs[shft]=zs[shft];
fft(xc,xs,m,-1);
for(i=0;i<mhlf1;i++)
{xa[i]=xc[i]/n;}
for(i=0;i<mhlf1;i++)
{r[i]=xa[i];}
for(i=1;i<lag;i++)
{if(win!1=)
{xa[i]=xa[i]*(0.54+0.46*cos(i*pi/(lag-1)));}
if((mode!=1)&&(mode!=3))
{j=nfft-i;
xa[j]=xa[i];
}
}
nlast=nfft-lag;
if((mode==1)||(mode==3))nlast=nfft;
for(i=lag;i<nlast;i++)
{xa[i]=0.0;
for(i=0;i<nfft;i++)
{xc[i]=xa[i];
xs[i]=0.0;
}
fft(xc,xs,nfft,1);
nhf1=nfft/2+1;
for(i=0;i<nhf1;i++)
{freq[i]=i*fs/(double)nfft;
if(sdb==0)
{sxy[i]=sqrt(xc[i]+xs[i]*xs[i]);}
else
{sxy[i]=20.0*log10(sqrt(xc[i]*xc[i]+xs[i]*xs[i]));}
}
free(xa);
free(xc);
free(xs);
free(zc);
free(zs);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -