📄 transfunctions.cpp
字号:
#include "Common.h"
void Modulation(IN int *DataBin, complex *TxSymbol)
{
//!!! 0 map to -1 and 1 map to 1
#if (BPS == 1) //BPSK
TxSymbol.real = (float)(2*DataBin[0] - 1);
TxSymbol.imag = 0;
#endif
#if (BPS == 2) //QPSK
TxSymbol[0].real = (float)(2*DataBin[0] - 1);
TxSymbol[0].imag = (float)(2*DataBin[1] - 1);
#endif
}
void Gen_Fuction(float *GenerateFunction)
{
float GenerateFunction_1[1] = {1.f};
float GenerateFunction_3[3] = {1.f,1.f,-1.f};
float GenerateFunction_11[11] = {1.f, 1.f, 1.f, -1.f, -1.f, -1.f, 1.f, -1.f, -1.f, 1.f, -1.f};
float GenerateFunction_13[13] = {1.f, 1.f, 1.f, 1.f, 1.f, -1.f, -1.f, 1.f, 1.f, -1.f, 1.f, -1.f, 1.f};
switch(Ns)
{
case 1:
memcpy(GenerateFunction, GenerateFunction_1, Ns*sizeof(float));
break;
case 3:
memcpy(GenerateFunction, GenerateFunction_3, Ns*sizeof(float));
break;
case 11:
memcpy(GenerateFunction, GenerateFunction_11, Ns*sizeof(float));
break;
case 13:
memcpy(GenerateFunction, GenerateFunction_13, Ns*sizeof(float));
break;
default :
printf("Can not support this BarkerCode!\n");
}
}
void Gen_msequence(complex *mseq)
{
complex msequence15[15] =
{
{-1.f, -1.f}, {1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f},
{1.f, 1.f}, {1.f, 1.f}, {-1.f, -1.f}, {1.f, 1.f},
{-1.f, -1.f}, {1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f},
{1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f}
};
/* complex msequence15[15] =
{
{-1.f, 1.f}, {1.f, 1.f}, {-1.f, 1.f}, {-1.f, 1.f},
{1.f, 1.f}, {1.f, 1.f}, {-1.f, 1.f}, {1.f, 1.f},
{-1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f},
{1.f, 1.f}, {-1.f, 1.f}, {-1.f, 1.f}
}; */
complex msequence16[16] =
{
{-1.f, -1.f}, {1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f},
{1.f, 1.f}, {1.f, 1.f}, {-1.f, -1.f}, {1.f, 1.f},
{-1.f, -1.f}, {1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f},
{1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f}, {-1.f, -1.f}
};
switch(PREAMBLE_LENGTH)
{
case 15:
memcpy(mseq, msequence15, PREAMBLE_LENGTH*sizeof(complex));
break;
case 16:
memcpy(mseq, msequence16, PREAMBLE_LENGTH*sizeof(complex));
break;
default :
printf("Can not support this m_sequence!\n");
}
}
void SpreadSprectrum(IN complex *TxSymbol, OUT complex *SpreadSignal)
{
int i=0;
float *BarkerCode;
BarkerCode = (float *)calloc(Ns, sizeof(float)); //可当作数组使用!
memset(BarkerCode, 0, Ns*sizeof(float));
Gen_Fuction(BarkerCode);
for (i=0; i<Ns; i++)
{
SpreadSignal[i] = ComplexMulR(TxSymbol[0], BarkerCode[i]);
}
free(BarkerCode);
}
void Gen_Pulse(float *Pulse)
{
float Pulse_1[1] = {1.f};
float Pulse_4[4] = {0.00018697f, 0.11575f, 0.98651f, 0.11575f};
float Pulse_8[8] = {0.00014482f, 0.0061567f, 0.089655f, 0.44721f, 0.76411f, 0.44721f, 0.089655f, 0.0061567f};
switch(PULSE_SIZE)
{
case 1:
memcpy(Pulse, Pulse_1, PULSE_SIZE*sizeof(float));
break;
case 4:
memcpy(Pulse, Pulse_4, PULSE_SIZE*sizeof(float));
break;
case 8:
memcpy(Pulse, Pulse_4, PULSE_SIZE*sizeof(float));
break;
default :
printf("Can not support this Sampling rate!\n");
}
}
void PulseShaping(IN complex *SpreadSignal, OUT complex *TxSignal)
{
int i=0, j=0;
float Pulse[PULSE_SIZE] = {0.f};
Gen_Pulse(Pulse);
for (i=0; i<Ns; i++)
{
for (j=0; j<PULSE_SIZE; j++)
{
TxSignal[i*PULSE_SIZE +j] = ComplexMulR(SpreadSignal[i], Pulse[j]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -