📄 hardmc_n.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 + -