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

📄 test.cpp

📁 用于雷达成像的多普勒质心估计
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*================================================================================
                                                                               
Module Name: test.cpp

General Description: the functions defined in this file is Doppler centroid estimation

/*============================================================================

                       SDSP Lab Confidential Proprietary
                 EE Department of Shanghai Jiaotong University
               (c) Copyright SDSP Lab 200{7}, All Rights Reserved  

 Revision History:
     Author         Modification   Tracking
    (EMail)             Date        Number        Description of Changes
 -----------------  ------------  ----------  --------------------------------
    zhenlin Wang      10/13/2008   LIBDSPFFT       Create of the module


Portability: This module is recommanded to be compiled by Intel C/C++ under platform
             of Windows or Linux/Unix. 
             This module employs OpenMP for parallel computation. 

==================================================================================*/
/*================================================================================
                                 INCLUDE FILES
================================================================================*/


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.141592


/*================================================================================
  This is a test for Doppler centroid estimation 
================================================================================*/


int LOG2(unsigned long num)
{
    int c=-1;
    do
    {
        num>>=1;
        c++;
    }
    while(num!=0);
    return c;
}
 
 void kkfft(double *pr, double *pi,  long n, int k, double *fr, double *fi, char l)
{ 
    int it,m,is,i,j,nv,l0;
    double p,q,s,vr,vi,poddr,poddi;

    for(it=0; it<=n-1; it++)
    {
		m=it;
		is=0;
        for(i=0; i<=k-1; i++)
        {
			j  = m/2;
			is = 2*is+(m-2*j);
			m  = j;
		}
        fr[it]=pr[is];
		fi[it]=pi[is];
    }

    pr[0]=1.0; pi[0]=0.0;
    p=6.283185306/(1.0*n);
    pr[1]=cos(p); pi[1]=-sin(p);

    if (l!=0)
		pi[1]=-pi[1];

    for(i=2; i<=n-1; i++)
    {
		p=pr[i-1]*pr[1]; q=pi[i-1]*pi[1];
        s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
        pr[i]=p-q; pi[i]=s-p-q;
    }

    for(it=0; it<=n-2; it=it+2)
    {
		vr=fr[it]; vi=fi[it];
        fr[it]=vr+fr[it+1]; fi[it]=vi+fi[it+1];
        fr[it+1]=vr-fr[it+1]; fi[it+1]=vi-fi[it+1];
    }

    m=n/2; nv=2;

    for (l0=k-2; l0>=0; l0--)
    {
		m=m/2; nv=2*nv;

        for(it=0; it<=(m-1)*nv; it=it+nv)
		{
            for(j=0; j<=(nv/2)-1; j++)
            {
				p=pr[m*j]*fr[it+j+nv/2];
                q=pi[m*j]*fi[it+j+nv/2];
                s=pr[m*j]+pi[m*j];
                s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
                poddr=p-q; poddi=s-p-q;
                fr[it+j+nv/2]=fr[it+j]-poddr;
                fi[it+j+nv/2]=fi[it+j]-poddi;
                fr[it+j]=fr[it+j]+poddr;
                fi[it+j]=fi[it+j]+poddi;
            }
		}
	}

    if (l!=0)
	{
        for (i=0; i<=n-1; i++)
        {
			fr[i]=fr[i]/(1.0*n);
            fi[i]=fi[i]/(1.0*n);
        }
	}

   
    return;
}           



void estimation()
{
	double c=3.0e8;
    double lamd=0.03122;

    double B= 15.55e6;
    double fs=18.97e6;
    double T_tao=37.12e-6;

    double k=B/T_tao;
    double PRF=1674.0;
    double  f_beat=0;
    double doppler_ambiguity=0;

    unsigned long range_samples=1024;
    unsigned long azimuth_samples=512;
    double  aver_center=0.0;

    double band_look=B*2.0/3.0;
    unsigned long band_cut=(((fs-band_look)/(fs/range_samples))+1);
	band_cut=band_cut/2;
    double trans_r=0,trans_i=0;
    double max_mlbf=0;
    unsigned long start_echo=0;
    
    double *tao;
    
    double total_in_echo_r=0;
    double total_in_echo_i=0;
    
    unsigned long i=0,ia=0,ir=0,iw=0;


    double *in_echo_r,*in_echo_i;
    double *fft_in_echo_r,*fft_in_echo_i;
    double *tlook1_r,*tlook1_i,*tlook2_r,*tlook2_i,*fft_look1_r,*fft_look1_i,*fft_look2_r,*fft_look2_i;
    double **mlbf_r,**mlbf_i;
    double *tmlbf_r,*tmlbf_i,*fft_mlbf_r,*fft_mlbf_i;
    double **test_data_r;
    double **test_data_i;
    double **look1_r,**look1_i,**look2_r,**look2_i;
    double *range_filter_r,*range_filter_i,*range_f;

    FILE *fp;

	double* data_tmp = (double*)calloc(2*range_samples*azimuth_samples, sizeof(double));

    in_echo_r= (double *)calloc( (range_samples),sizeof(double ) );   
    in_echo_i= (double *)calloc(  (range_samples),sizeof(double ) );

    fft_in_echo_r=(double *)calloc( (range_samples),sizeof(double ) );
    fft_in_echo_i=(double *)calloc( (range_samples),sizeof(double ) );
    
    tlook1_r=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    tlook1_i=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    tlook2_r=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    tlook2_i=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    fft_look1_r=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    fft_look1_i=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    fft_look2_r=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    fft_look2_i=(double*)calloc((range_samples/2-band_cut),sizeof(double));

    
    tmlbf_r=(double *)calloc( (azimuth_samples),sizeof(double ) );
    tmlbf_i=(double *)calloc( (azimuth_samples),sizeof(double ) );
    fft_mlbf_r=(double *)calloc( (azimuth_samples),sizeof(double ) );
    fft_mlbf_i=(double *)calloc( (azimuth_samples),sizeof(double ) );

    test_data_r= (double **)calloc( (azimuth_samples), sizeof(double *) );   
    test_data_i= (double **)calloc( (azimuth_samples), sizeof(double *) ); 
    for   (i=0;i< (azimuth_samples); i++)     
    {   
          test_data_r[i] = (double*)calloc( (range_samples),sizeof(double ) );  
          test_data_i[i] = (double*)calloc( (range_samples),sizeof(double ) );
      
    }   


    mlbf_r=(double **)calloc( azimuth_samples,sizeof(double *) );
    mlbf_i=(double **)calloc( azimuth_samples,sizeof(double *) );

    look1_r= (double **)calloc( azimuth_samples,sizeof(double *) );   
    look1_i= (double **)calloc( azimuth_samples,sizeof(double *) ); 
    look2_r= (double **)calloc( azimuth_samples,sizeof(double *) ); 
    look2_i= (double **)calloc( azimuth_samples,sizeof(double *) ); 

    for   (i=0;i<(azimuth_samples); i++)     
    {   
          look1_r[i] = (double*)calloc((range_samples/2-band_cut), sizeof(double));  
          look1_i[i] = (double*)calloc((range_samples/2-band_cut), sizeof(double));
          look2_r[i] = (double*)calloc((range_samples/2-band_cut), sizeof(double));
          look2_i[i] = (double*)calloc((range_samples/2-band_cut), sizeof(double));
          mlbf_r[i] = (double*)calloc((range_samples/2-band_cut), sizeof(double));  
          mlbf_i[i] = (double*)calloc((range_samples/2-band_cut), sizeof(double));  
    }

    range_filter_r=(double *)calloc((range_samples), sizeof(double )  );
    range_filter_i=(double *)calloc((range_samples), sizeof(double )  );
    range_f=(double *)calloc((range_samples), sizeof(double )  );

    tao=(double*)calloc((range_samples/2-band_cut),sizeof(double));
    
    for(i=0;i<range_samples/2-band_cut;i++)
		tao[i]=-T_tao/2.0+(double)i*T_tao/(range_samples/2-band_cut);

	//tao=-T_tao/2.+findgen(range_samples/2-band_cut)*T_tao/(range_samples/2-band_cut)
    

    
    for(i=0;i<range_samples;i++)
    {
        range_f[i]=-fs/2.0+(double)i*fs/range_samples;
        range_filter_r[i]=cos(-pow(range_f[i],2)*PI/k);
        range_filter_i[i]=sin(-pow(range_f[i],2)*PI/k);
    }	

	//range_f=-fs/2.+findgen(range_samples)*fs/range_samples
	//range_filter=exp(dcomplex(0,range_f^2*!pi/k))




   if( (fp=fopen("e:\\test\\OnePoint_data_master_00.dat","r")) == NULL )
	
	  return ;

   

	fread(data_tmp,8,2*range_samples*azimuth_samples,fp);

	

	for ( ia =0;ia<=azimuth_samples-1;ia++)
    {
       	
   
		for(i=0;i<range_samples;i++)
		{
			in_echo_r[i]=data_tmp[2*i+2*range_samples*ia];
			in_echo_i[i]=data_tmp[2*i+2*range_samples*ia+1];
		}
		//readu,1,in_echo

    /*	
        for(i=0;i<range_samples;i++)
        {
            total_in_echo_r+=in_echo_r[i];
            total_in_echo_i+=in_echo_i[i];
        }

        for(i=0;i<range_samples;i++)
        {
           in_echo_r[i]=in_echo_r[i]-total_in_echo_r/range_samples;
           in_echo_i[i]=in_echo_i[i]-total_in_echo_i/range_samples;
        }

⌨️ 快捷键说明

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