📄 fourxiang.c
字号:
#include<math.h>
#define a0 0
#define a1 90
#define a2 127 /*8bit量化 */
#define N 8
#define M 1041
#pragma DATA_SECTION(OUT,"bufffer1")
int _cosx1[N] , _cosx2[N] , _cosx3[N] , _cosx4[N];
int tc1[10*N] , tc2[10*N] , tc3[10*N] , tc4[10*N] ;
int _I[M] , _Q[M] , _FI[M] , _FQ[M];
int _Ijuan[2*M-1] , _Qjuan[2*M-1] , OUT[2*M-1];
int i , j;
void signal(int _I[M] , int _Q[M])
{
/*通过查表等到cos函数*/
_cosx1[0]=a2 ; _cosx1[1]=a1 ; _cosx1[2]=a0 ; _cosx1[3]=-a1 ;
_cosx1[4]=-a2 ; _cosx1[5]=-a1 ; _cosx1[6]=a0 ; _cosx1[7]=a1 ;
_cosx2[0]=a0 ; _cosx2[1]=-a1 ; _cosx2[2]=-a2 ; _cosx2[3]=-a1 ;
_cosx2[4]=a0 ; _cosx2[5]=a1 ; _cosx2[6]=a2 ; _cosx2[7]=a1 ;
_cosx3[0]=-a2 ; _cosx3[1]=-a1 ; _cosx3[2]=a0 ; _cosx3[3]=a1 ;
_cosx3[4]=a2 ; _cosx3[5]=a1 ; _cosx3[6]=a0 ; _cosx3[7]=-a1 ;
_cosx4[0]=a0 ; _cosx4[1]=a1 ; _cosx4[2]=a2 ; _cosx4[3]=a1 ;
_cosx4[4]=a0 ; _cosx4[5]=-a1 ; _cosx4[6]=-a2 ; _cosx4[7]=-a1 ;
/*10周期的初相位为0*/
for(j=0;j<N;j++)
{
tc1[j]=_cosx1[j];
tc1[j+8]=_cosx1[j];
tc1[j+16]=_cosx1[j];
tc1[j+24]=_cosx1[j];
tc1[j+32]=_cosx1[j];
tc1[j+40]=_cosx1[j];
tc1[j+48]=_cosx1[j];
tc1[j+56]=_cosx1[j];
tc1[j+64]=_cosx1[j];
tc1[j+72]=_cosx1[j];
}
/*10周期的初相位为90*/
for(j=0;j<N;j++)
{
tc2[j]=_cosx2[j];
tc2[j+8]=_cosx2[j];
tc2[j+16]=_cosx2[j];
tc2[j+24]=_cosx2[j];
tc2[j+32]=_cosx2[j];
tc2[j+40]=_cosx2[j];
tc2[j+48]=_cosx2[j];
tc2[j+56]=_cosx2[j];
tc2[j+64]=_cosx2[j];
tc2[j+72]=_cosx2[j];
}
/*10周期的初相位为180*/
for(j=0;j<N;j++)
{
tc3[j]=_cosx3[j];
tc3[j+8]=_cosx3[j];
tc3[j+16]=_cosx3[j];
tc3[j+24]=_cosx3[j];
tc3[j+32]=_cosx3[j];
tc3[j+40]=_cosx3[j];
tc3[j+48]=_cosx3[j];
tc3[j+56]=_cosx3[j];
tc3[j+64]=_cosx3[j];
tc3[j+72]=_cosx3[j];
}
/*10周期的初相位为270*/
for(j=0;j<N;j++)
{
tc4[j]=_cosx4[j];
tc4[j+8]=_cosx4[j];
tc4[j+16]=_cosx4[j];
tc4[j+24]=_cosx4[j];
tc4[j+32]=_cosx4[j];
tc4[j+40]=_cosx4[j];
tc4[j+48]=_cosx4[j];
tc4[j+56]=_cosx4[j];
tc4[j+64]=_cosx4[j];
tc4[j+72]=_cosx4[j];
}
for(j=0; j<10*N; j++)
{
_I[j]=tc1[j];
_I[j+80]=tc2[j];
_I[j+160]=tc3[j];
_I[j+240]=tc4[j];
_I[j+320]=tc1[j];
_I[j+400]=tc4[j];
_I[j+480]=tc1[j];
_I[j+560]=tc4[j];
_I[j+640]=tc1[j];
_I[j+720]=tc4[j];
_I[j+800]=tc3[j];
_I[j+880]=tc2[j];
_I[j+960]=tc1[j];
_I[1040]=a2;
}
for(j=0; j<10*N; j++)
{
_Q[j]=tc4[j];
_Q[j+80]=tc1[j];
_Q[j+160]=tc2[j];
_Q[j+240]=tc3[j];
_Q[j+320]=tc4[j];
_Q[j+400]=tc3[j];
_Q[j+480]=tc4[j];
_Q[j+560]=tc3[j];
_Q[j+640]=tc4[j];
_Q[j+720]=tc3[j];
_Q[j+800]=tc2[j];
_Q[j+880]=tc1[j];
_Q[j+960]=tc4[j];
_Q[1040]=a0;
}
}
void conI(int a[M],int b[M],int _Ijuan[2*M-1]) /*卷积函数*/
{
for(i=0;i<=2*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];
}
_Ijuan[i]=t*0.001;
}
}
void conQ(int c[M],int d[M],int _Qjuan[2*M-1]) /*卷积函数*/
{
for(i=0;i<=2*M-2;i++)
{
long int t=0;
for(j=0;j<=M-1;j++)
{
if(i-j>=0&&i-j<=M-1)
t+=c[j]*d[i-j];
}
_Qjuan[i]=t*0.001;
}
}
void main(void) /*主函数*/
{
signal(_I , _Q); /*调用I路和Q路信号产生函数*/
for(i=0;i<M;i++) /*序列倒置*/
{
_FI[i]=_I[M-i];
_FQ[i]=_Q[M-i];
}
conI(_I,_FI,_Ijuan); /*I路卷积*/
conQ(_Q,_FQ,_Qjuan); /*Q路卷积*/
for(i=0;i<2*M-1;i++)
{
OUT[i]=_Ijuan[i]*0.01*_Ijuan[i]*0.01+_Qjuan[i]*0.01*_Qjuan[i]*0.01;
OUT[i]=10*sqrt(OUT[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -