#include<stdio.h>
#include<math.h>
#include<malloc.h>
#define fm 35
#define dt 0.001
#define NP 60
//设置的是频率采样间隔
#define f 1
#define fmax 100
#define PI 3.1415926
int main(void)
{
FILE *fp;
double wt[NP+1] = {0};
double t,an,bn,cn,bain;
//周期等于频率倒数
double T1 = 1/f;
int i,n;
int Nf = fmax/f;
//打开一个文件
fp = fopen("雷克子波频谱.xls","w");
for(n=0;n<=fmax;n++)
{
an = 0;
bn = 0;
//雷克子波一个周期(的和)
for(i = -NP/2;i<=NP/2;i++)
{
t = i*dt;
//计算雷克子波数值
wt[i+NP/2] = (1.0-2.0*pow(PI*fm*t,2.0))*exp(-pow(PI*fm*t,2.0));
//余弦分量
an += wt[i+NP/2]*cos(n*2*PI*f*t);
//正弦分量
bn += wt[i+NP/2]*sin(n*2*PI*f*t);
}
//振幅谱
cn = sqrt(an*an+bn*bn)*dt;
//相位谱
bain = atan(-bn/an);
//数据写入文件
fprintf(fp,"%d\t%10.4f\t%d\t%10.4f\n",n*f,cn,n*f,bain);
}
fclose (fp);
return 0;
}
C语言实现雷克子波频谱
最新推荐文章于 2023-01-14 20:13:09 发布