作者:桂。
时间:2018-05-20 12:04:24
前言
相比DFT,CZT是完成频谱细化的一种思路,本文主要记录CZT的C代码实现。
一、代码实现
原理主要参考MATLAB接口:
对应C代码实现:
Complex.c
/*=============================
Chirp-Z Transform
=============================*/#include#include#include#include"Complex.h"#include"FFT.h"
void CZT(comp* x, int N, comp A, comp W, comp *xCZT, intM);voidmain()
{inti;intN,M;doublePI;doubleA0,Theta0;doubleW0,Phi0;
comp*x;
comp*xCZT;
comp A,W;
PI= 3.1415926;
N= 5; //信号长度
M = 10; //chirp-z 变换输出长度
x = (comp *)calloc(N,sizeof(comp));
xCZT= (comp *)calloc(M,sizeof(comp));for (i = 0;i < N; i++)
{
x[i].re=(float)(i-3);
x[i].im= 0.0;
}
A0= 1.0; //起始抽样点z0的矢量半径长度
Theta0 = 0.0; //起始抽样点z0的相角
A.re = (float)(A0*cos(Theta0));
A.im= (float)(A0*sin(Theta0));
Phi0= 2.0*PI/M; //两相邻抽样点之间的角度差
W0 = 1.0; //螺线的伸展率
W.re = (float)(W0*cos(-Phi0));
W.im= (float)(W0*sin(-Phi0));
CZT(x,N,A,W,xCZT,M);
printf("The Original Signal:\n");for (i = 0; i
{
printf("%10.4f",x[i].re);
printf("%10.4f\n",x[i].im);
}
printf("The Chirp-Z Transfrom:\n");for (i = 0 ;i
{
printf("%10.4f",xCZT[i].re);
printf("%10.4f\n",xCZT[i].im);
}
}/*----------------函数说明----------------------
Name: CZT
Function: Chirp-Z Transform
Para: x[in][out]:待变换信号 N[in]:信号长度
A[in]: W[in]:
M[in]:Chirp-Z变换输出长度
------------------