回答

收藏

计算尖顶余弦脉冲的谐波分量----使用编程的方法

射频/微波 射频/微波 890 人阅读 | 0 人回复 | 2018-10-25

我最近在做高频功率放大器的实验,在理解实验原理的时候,想计算出尖顶余弦脉冲的个次谐波分量的幅度。一开始我想通过手算,发现计算傅里叶变换比较困难,然后想到用matlab算,上网查查发现matlab语句理解着也挺麻烦,于是我就想既然matlab能计算,为什么我不能通过编程计算呢?然后我想到可以用微元法来计算积分,更加感觉可以通过编程解救这个问题。我把尖顶余弦脉冲信号的周期分成1000个时间段,根据周期信号的傅里叶变换公式计算出每个时间段的值,累加后就可以得出某次谐波分量的系数,多次计算就可以得出各次谐波分量的振幅。下面是用来计算的vc程序

#define PI 3.1415926

#include <stdio.h>
#include <math.h>
void main(void)
{
        float d, ft[1000];                //一个周期划分为1000个小时间段
        float dt_div_T;                        //dt/T
        float w_mul_t[1000];                //w*t
        int i, j, n;
        float v_start;                        //
        float Fn[100];                        //计算到99次谐波

        printf("输入尖顶余弦脉冲开始的弧度,假如尖顶余弦脉冲的弧度范围是正负Π/4,\r\n就输入0.25,请输入: ");
        scanf("%f", &d);
        printf("输入的弧度是 %fΠ\r\n", d);

        //        T/1000 = dt, dt/T = 1/1000
        dt_div_T = 1.0/1000;
       
        for(i=0; i<1000; i++)
        {
                w_mul_t[i] = (0 - d + (i*2.0/1000)) * PI;
        }

        for(i=0; i<1000; i++)
        {
                ft[i] = 0;
        }

        for(i=0; i<100; i++)
        {
                Fn[i] = 0;
        }

        v_start = sin(d * PI);
        printf("尖顶余弦脉冲的峰值是 %f\r\n", 1 - v_start);
        for(i=0; i<1000; i++)
        {
                ft[i] = sin((d + (i*2.0/1000)) * PI) - v_start;
                if(ft[i] < 0)
                        ft[i] = 0;
        }
       

        for(n=0; n<100; n++)
        {
                for(j=0; j<1000; j++)
                {
                        Fn[n] += ft[j] * cos(0 - n*w_mul_t[j]) * dt_div_T;
                }
        }
       
        printf("基波分量的振幅\t%f\r\n", Fn[0]);
        for(n=1; n<100; n++)
        {
                printf("%d次谐波分量的振幅\t%f\r\n", n, Fn[n]>0 ? Fn[n] : (0-Fn[n]));
        }
       
        getch();
}
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条