?? 16qam.txt
字號:
void FN16QAMModulation3(float NSymbol[SPLength],float FModulationOutput[2][SPLength])
{
float FModulationSymbol_I[16]={QAM16_A,QAM16_A,QAM16_A,QAM16_A,-QAM16_A,-QAM16_A,-QAM16_A,-QAM16_A,QAM16_B,QAM16_B,QAM16_B,QAM16_B,-QAM16_B,-QAM16_B,-QAM16_B,-QAM16_B},
FModulationSymbol_Q[16]={QAM16_A,-QAM16_A,QAM16_B,-QAM16_B,QAM16_A,-QAM16_A,QAM16_B,-QAM16_B,QAM16_A,-QAM16_A,QAM16_B,-QAM16_B,QAM16_A,-QAM16_A,QAM16_B,-QAM16_B};
int Ni,Nj,NModulationSymbol_Input;
for(Ni=0;Ni<SPLength/4;Ni++)
{
for(NModulationSymbol_Input=0,Nj=0;Nj<4;Nj++)
{
NModulationSymbol_Input<<=1;
if(NSymbol[Ni*4+Nj])
NModulationSymbol_Input^=1;
}
FModulationOutput[0][Ni]=FModulationSymbol_I[NModulationSymbol_Input];
FModulationOutput[1][Ni]=FModulationSymbol_Q[NModulationSymbol_Input];
}
}
void FN1Dimension_Harddecision3(float Finput,char NSymbol[2])
{
if(Finput>=2*QAM16_A)
{
NSymbol[0]=1;
NSymbol[1]=-1;
}
else if(Finput<2*QAM16_A&&Finput>=0)
{
NSymbol[0]=-1;
NSymbol[1]=-1;
}
else if(Finput>=-2*QAM16_A&&Finput<0)
{
NSymbol[0]=-1;
NSymbol[1]=1;
}
else
{
NSymbol[0]=1;
NSymbol[1]=1;
}
}
void FN16QAMDemodu_SoftDecision3(float FDeModulatorIntput[2][SPLength],float NSymbol[SPLength],float FLc)
{
float F1Demension[4]={QAM16_A,-QAM16_A,QAM16_B,-QAM16_B};
int Ni,Nj,NHardDecision,NcandidateDecision[3];
char NSymbolTemp[2];
float FDistanceToBest[2],FDistanceToCandidate[2],ftemp;
ftemp=1;
for(Ni=0;Ni<SPLength/4;Ni++)
{
FN1Dimension_Harddecision3(FDeModulatorIntput[0][Ni],NSymbolTemp);
for(NHardDecision=0,Nj=0;Nj<2;Nj++)
{
NHardDecision<<=1;
if(NSymbolTemp[Nj]>=0)
NHardDecision^=1;
}
for(Nj=0;Nj<2;Nj++)
{
NcandidateDecision[0]=NHardDecision^(1<<(1-Nj));
NcandidateDecision[1]=NHardDecision^(1<<(Nj));
NcandidateDecision[2]=NHardDecision^3;
FDistanceToBest[0]=(float)pow((FDeModulatorIntput[0][Ni]-F1Demension[NHardDecision]),2);
FDistanceToBest[1]=(float)pow((FDeModulatorIntput[0][Ni]-F1Demension[NcandidateDecision[0]]),2);
FDistanceToCandidate[0]=(float)pow((FDeModulatorIntput[0][Ni]-F1Demension[NcandidateDecision[1]]),2);
FDistanceToCandidate[1]=(float)pow((FDeModulatorIntput[0][Ni]-F1Demension[NcandidateDecision[2]]),2);
NSymbol[4*Ni+1-Nj]=4*(float)log((exp(-FLc*FDistanceToBest[0]/4)+exp(-FLc*FDistanceToBest[1]/4))/(exp(-FLc*FDistanceToCandidate[0]/4)+exp(-FLc*FDistanceToCandidate[1]/4)))/FLc;
NSymbol[4*Ni+1-Nj]*=(NSymbolTemp[1-Nj]/ftemp);
}
FN1Dimension_Harddecision3(FDeModulatorIntput[1][Ni],NSymbolTemp);
for(NHardDecision=0,Nj=0;Nj<2;Nj++)
{
NHardDecision<<=1;
if(NSymbolTemp[Nj]>=0)
NHardDecision^=1;
}
for(Nj=0;Nj<2;Nj++)
{
NcandidateDecision[0]=NHardDecision^(1<<(1-Nj));
NcandidateDecision[1]=NHardDecision^(1<<(Nj));
NcandidateDecision[2]=NHardDecision^3;
FDistanceToBest[0]=(float)pow((FDeModulatorIntput[1][Ni]-F1Demension[NHardDecision]),2);
FDistanceToBest[1]=(float)pow((FDeModulatorIntput[1][Ni]-F1Demension[NcandidateDecision[0]]),2);
FDistanceToCandidate[0]=(float)pow((FDeModulatorIntput[1][Ni]-F1Demension[NcandidateDecision[1]]),2);
FDistanceToCandidate[1]=(float)pow((FDeModulatorIntput[1][Ni]-F1Demension[NcandidateDecision[2]]),2);
NSymbol[4*Ni+3-Nj]=4*(float)log((exp(-FLc*FDistanceToBest[0]/4)+exp(-FLc*FDistanceToBest[1]/4))/(exp(-FLc*FDistanceToCandidate[0]/4)+exp(-FLc*FDistanceToCandidate[1]/4)))/FLc;
NSymbol[4*Ni+3-Nj]*=(NSymbolTemp[1-Nj]/ftemp);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -