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

📄 hardmc_n.c

📁 CCS环境下
💻 C
字号:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<math.h>

#define a0  0
#define a1  90
#define a2  127    /*8bit量化 */

#define N  8
#define M  1041


#pragma DATA_SECTION(OUT, "data_buf1")

int _cosx[N]  ,  _sinx[N];
int  tcos[10*N] , tsin[10*N];
int _I[M] , _Q[M] , _FI[M] , _FQ[M];
int Zs[M] , n_I[M] , n_Q[M];
int IIjuan[2*M-1] ,  QQjuan[2*M-1] , OUT[2*M-1];
int IQjuan[2*M-1] ,  QIjuan[2*M-1];
int out_re[2*M-1] ,  out_im[2*M-1];



/*巴克码*/
int code[13]={1,1,1,1,1,-1,-1,1,1,-1,1,-1,1};

int i , j;


void Iroad(int _I[M])     /*同相信号*/
{
  /*通过查表等到cos函数*/ 
  _cosx[0]=a2  ;  _cosx[1]=a1  ;  _cosx[2]=a0  ;  _cosx[3]=-a1 ;
  _cosx[4]=-a2 ;  _cosx[5]=-a1 ;  _cosx[6]=a0  ;  _cosx[7]=a1  ; 
  
  for(j=0;j<N;j++)
    {
      tcos[j]=_cosx[j];
      tcos[j+8]=_cosx[j];
      tcos[j+16]=_cosx[j];
      tcos[j+24]=_cosx[j];
      tcos[j+32]=_cosx[j];     
      tcos[j+40]=_cosx[j];
      tcos[j+48]=_cosx[j];     
      tcos[j+56]=_cosx[j];
      tcos[j+64]=_cosx[j];   
      tcos[j+72]=_cosx[j];       
    }

  for(j=0; j<10*N; j++)
    {
      _I[j]=code[0]*tcos[j];
      _I[j+80]=code[1]*tcos[j];
      _I[j+160]=code[2]*tcos[j];
      _I[j+240]=code[3]*tcos[j];
      _I[j+320]=code[4]*tcos[j];
      
      _I[j+400]=code[5]*tcos[j];
      _I[j+480]=code[6]*tcos[j];
     
      _I[j+560]=code[7]*tcos[j];
      _I[j+640]=code[8]*tcos[j];
    
      _I[j+720]=code[9]*tcos[j];
      _I[j+800]=code[10]*tcos[j];
      
      _I[j+880]=code[11]*tcos[j];
      _I[j+960]=code[12]*tcos[j];
      _I[1040]=a2;
    }    
}


void Qroad(int _Q[M])    /*正交信号*/
{
  /*通过查表等到sin函数*/ 
  _sinx[0]=a0  ;  _sinx[1]=a1  ;  _sinx[2]=a2  ;  _sinx[3]=a1 ;
  _sinx[4]=a0 ;  _sinx[5]=-a1 ;  _sinx[6]=-a2  ;  _sinx[7]=-a1  ; 
  
  for(j=0;j<N;j++)
    {
      tsin[j]=_sinx[j];
      tsin[j+8]=_sinx[j];
      tsin[j+16]=_sinx[j];
      tsin[j+24]=_sinx[j];
      tsin[j+32]=_sinx[j];     
      tsin[j+40]=_sinx[j];
      tsin[j+48]=_sinx[j];     
      tsin[j+56]=_sinx[j];
      tsin[j+64]=_sinx[j];   
      tsin[j+72]=_sinx[j];       
    }
  

  for(j=0; j<10*N; j++)
    {
      _Q[j]=code[0]*tsin[j];
      _Q[j+80]=code[1]*tsin[j];
      _Q[j+160]=code[2]*tsin[j];
      _Q[j+240]=code[3]*tsin[j];
      _Q[j+320]=code[4]*tsin[j];
      
      _Q[j+400]=code[5]*tsin[j];
      _Q[j+480]=code[6]*tsin[j];
     
      _Q[j+560]=code[7]*tsin[j];
      _Q[j+640]=code[8]*tsin[j];
    
      _Q[j+720]=code[9]*tsin[j];
      _Q[j+800]=code[10]*tsin[j];
      
      _Q[j+880]=code[11]*tsin[j];
      _Q[j+960]=code[12]*tsin[j];
      _Q[1040]=a0;
    }    
}

void conII(int a[M],int b[M],int IIjuan[M+M-1])        /*卷积函数*/
{
      
    for(i=0;i<=M+M-2;i++)
    {
       long int t=0;
       for(j=0;j<=M-1;j++)
         {
         if(i-j>=0&&i-j<=M-1)
            t+=a[j]*b[i-j];
         }
       IIjuan[i]=t*0.005;
    }
}


void conQQ(int a[M],int b[M],int QQjuan[M+M-1])        /*卷积函数*/
{
      
    for(i=0;i<=M+M-2;i++)
    {
       long int t=0;
       for(j=0;j<=M-1;j++)
         {
         if(i-j>=0&&i-j<=M-1)
            t+=a[j]*b[i-j];
         }
       QQjuan[i]=t*0.005;
    }
}

void conIQ(int a[M],int b[M],int IQjuan[M+M-1])        /*卷积函数*/
{
      
    for(i=0;i<=M+M-2;i++)
    {
       long int t=0;
       for(j=0;j<=M-1;j++)
         {
         if(i-j>=0&&i-j<=M-1)
            t+=a[j]*b[i-j];
         }
       IQjuan[i]=t*0.005;
    }
}

void conQI(int a[M],int b[M],int QIjuan[M+M-1])        /*卷积函数*/
{
      
    for(i=0;i<=M+M-2;i++)
    {
       long int t=0;
       for(j=0;j<=M-1;j++)
         {
         if(i-j>=0&&i-j<=M-1)
            t+=a[j]*b[i-j];
         }
       QIjuan[i]=t*0.005;
    }
}


void main(void)                /*主函数*/
{

    Iroad(_I);           /*调用I路信号产生函数*/
    Qroad(_Q);           /*调用Q路信号产生函数*/ 
        
   memset(Zs,0,M);             /*加入衰减和噪声*/
   srand((unsigned)time(NULL));  
   for(i=0;i<M;i++)
   { 
      Zs[i]=rand()%200-100;    
      n_I[i]=0.2*_I[i]+Zs[i];
      n_Q[i]=0.2*_Q[i]+Zs[i]; 
               
   }
   
   for(i=0;i<M;i++)        /*序列倒置*/
    {
       _FI[i]=_I[M-1-i];         
       _FQ[i]=_Q[M-1-i];

    }
        
    conII(n_I,_FI,IIjuan);       /*I路和I路卷积*/
    conQQ(n_Q,_FQ,QQjuan);       /*Q路和Q路卷积*/  
    conIQ(n_I,_FQ,IQjuan);       /*I路和Q路卷积*/ 
    conQI(n_Q,_FI,QIjuan);       /*Q路和I路卷积*/ 
    
    for(i=0;i<2*M-1;i++)
    {
      out_re[i]=(IIjuan[i]+QQjuan[i])*0.5; 
      out_im[i]=(IQjuan[i]-QIjuan[i])*0.5;
    } 
          
    for(i=0;i<2*M-1;i++)
    {
        OUT[i]=out_re[i]*0.01*out_re[i]*0.01+out_im[i]*0.01*out_im[i]*0.01;
        OUT[i]=10*sqrt(OUT[i]);      
    } 
   
}






⌨️ 快捷键说明

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