C语言实现雷克子波频谱

#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;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值