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

📄 metric.cpp

📁 Dream.exe soft source (Visual C++)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						rTableQAM64SM[BI_100 /* [1 0 0] */][0],
						rTableQAM64SM[BI_101 /* [1 0 1] */][0],
						rTableQAM64SM[BI_110 /* [1 1 0] */][0],
						rTableQAM64SM[BI_111 /* [1 1 1] */][0],
						(*pcInSymb)[i].rChan);


					/* Imaginary part --------------------------------------- */
					vecMetric[k + 1].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[BI_000 /* [0 0 0] */][1],
						rTableQAM64SM[BI_001 /* [0 0 1] */][1],
						rTableQAM64SM[BI_010 /* [0 1 0] */][1],
						rTableQAM64SM[BI_011 /* [0 1 1] */][1],
						(*pcInSymb)[i].rChan);

					vecMetric[k + 1].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[BI_100 /* [1 0 0] */][1],
						rTableQAM64SM[BI_101 /* [1 0 1] */][1],
						rTableQAM64SM[BI_110 /* [1 1 0] */][1],
						rTableQAM64SM[BI_111 /* [1 1 1] */][1],
						(*pcInSymb)[i].rChan);
				}
			}

			break;

		case 1:
			for (i = 0, k = 0; i < iInputBlockSize; i++, k += 2)
			{
				if (bIteration == TRUE)
				{
					/* Real part -------------------------------------------- */
#ifdef USE_MAX_LOG_MAP
					vecMetric[k].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.real(), 
						rTableQAM64SM[BI_000 /* [0 0 0] */][0],
						rTableQAM64SM[BI_100 /* [1 0 0] */][0],
						rTableQAM64SM[BI_001 /* [0 0 1] */][0],
						rTableQAM64SM[BI_101 /* [1 0 1] */][0],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k], vecSubsetDef3[k]);

					vecMetric[k].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.real(),
						rTableQAM64SM[BI_010 /* [0 1 0] */][0], 
						rTableQAM64SM[BI_110 /* [1 1 0] */][0], 
						rTableQAM64SM[BI_011 /* [0 1 1] */][0], 
						rTableQAM64SM[BI_111 /* [1 1 1] */][0],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k], vecSubsetDef3[k]);
#else
					/* Lowest bit defined by "vecSubsetDef3",highest defined
					   by "vecSubsetDef1" */
					iTabInd0 = 
						((ExtractBit(vecSubsetDef1[k]) & 1) << 2) | 
						(ExtractBit(vecSubsetDef3[k]) & 1);

					vecMetric[k].rTow0 = Minimum1((*pcInSymb)[i].cSig.real(), 
						rTableQAM64SM[iTabInd0][0],	(*pcInSymb)[i].rChan);

					vecMetric[k].rTow1 = Minimum1((*pcInSymb)[i].cSig.real(),
						rTableQAM64SM[iTabInd0 | (1 << 1)][0],
						(*pcInSymb)[i].rChan);
#endif


					/* Imaginary part --------------------------------------- */
#ifdef USE_MAX_LOG_MAP
					vecMetric[k + 1].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.imag(), 
						rTableQAM64SM[BI_000 /* [0 0 0] */][1],
						rTableQAM64SM[BI_100 /* [1 0 0] */][1],
						rTableQAM64SM[BI_001 /* [0 0 1] */][1],
						rTableQAM64SM[BI_101 /* [1 0 1] */][1],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k + 1], vecSubsetDef3[k + 1]);

					vecMetric[k + 1].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[BI_010 /* [0 1 0] */][1], 
						rTableQAM64SM[BI_110 /* [1 1 0] */][1], 
						rTableQAM64SM[BI_011 /* [0 1 1] */][1], 
						rTableQAM64SM[BI_111 /* [1 1 1] */][1],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k + 1], vecSubsetDef3[k + 1]);
#else
					/* Lowest bit defined by "vecSubsetDef3",highest defined
					   by "vecSubsetDef1" */
					iTabInd0 = 
						((ExtractBit(vecSubsetDef1[k + 1]) & 1) << 2) | 
						(ExtractBit(vecSubsetDef3[k + 1]) & 1);

					vecMetric[k + 1].rTow0 =
						Minimum1((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[iTabInd0][1],
						(*pcInSymb)[i].rChan);

					vecMetric[k + 1].rTow1 =
						Minimum1((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[iTabInd0 | (1 << 1)][1],
						(*pcInSymb)[i].rChan);
#endif
				}
				else
				{
					/* There are two possible points for each bit. Both have to
					   be used. In the first step: {i_2} = 0, Higest bit 
					   defined by "vecSubsetDef1" */

					/* Real part -------------------------------------------- */
#ifdef USE_MAX_LOG_MAP
					vecMetric[k].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.real(), 
						rTableQAM64SM[BI_000 /* [0 0 0] */][0],
						rTableQAM64SM[BI_100 /* [1 0 0] */][0],
						rTableQAM64SM[BI_001 /* [0 0 1] */][0],
						rTableQAM64SM[BI_101 /* [1 0 1] */][0],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k]);

					vecMetric[k].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.real(),
						rTableQAM64SM[BI_010 /* [0 1 0] */][0], 
						rTableQAM64SM[BI_110 /* [1 1 0] */][0], 
						rTableQAM64SM[BI_011 /* [0 1 1] */][0], 
						rTableQAM64SM[BI_111 /* [1 1 1] */][0],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k]);
#else
					iTabInd0 = ((ExtractBit(vecSubsetDef1[k]) & 1) << 2);
					vecMetric[k].rTow0 =
						Minimum2((*pcInSymb)[i].cSig.real(),
						rTableQAM64SM[iTabInd0][0],
						rTableQAM64SM[iTabInd0 | 1][0], (*pcInSymb)[i].rChan);

					iTabInd0 = ((ExtractBit(vecSubsetDef1[k]) & 1) << 2) |
						(1 << 1);
					vecMetric[k].rTow1 =
						Minimum2((*pcInSymb)[i].cSig.real(),
						rTableQAM64SM[iTabInd0][0],
						rTableQAM64SM[iTabInd0 | 1][0], (*pcInSymb)[i].rChan);
#endif


					/* Imaginary part --------------------------------------- */
#ifdef USE_MAX_LOG_MAP
					vecMetric[k + 1].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.imag(), 
						rTableQAM64SM[BI_000 /* [0 0 0] */][1],
						rTableQAM64SM[BI_100 /* [1 0 0] */][1],
						rTableQAM64SM[BI_001 /* [0 0 1] */][1],
						rTableQAM64SM[BI_101 /* [1 0 1] */][1],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k + 1]);

					vecMetric[k + 1].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[BI_010 /* [0 1 0] */][1], 
						rTableQAM64SM[BI_110 /* [1 1 0] */][1], 
						rTableQAM64SM[BI_011 /* [0 1 1] */][1], 
						rTableQAM64SM[BI_111 /* [1 1 1] */][1],
						(*pcInSymb)[i].rChan,
						vecSubsetDef1[k + 1]);
#else
					iTabInd0 = ((ExtractBit(vecSubsetDef1[k + 1]) & 1) << 2);
					vecMetric[k + 1].rTow0 =
						Minimum2((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[iTabInd0][1],
						rTableQAM64SM[iTabInd0 | 1][1], (*pcInSymb)[i].rChan);

					iTabInd0 = ((ExtractBit(vecSubsetDef1[k + 1]) & 1) << 2) |
						(1 << 1);
					vecMetric[k + 1].rTow1 =
						Minimum2((*pcInSymb)[i].cSig.imag(),
						rTableQAM64SM[iTabInd0][1],
						rTableQAM64SM[iTabInd0 | 1][1], (*pcInSymb)[i].rChan);
#endif
				}
			}

			break;

		case 2:
			for (i = 0, k = 0; i < iInputBlockSize; i++, k += 2)
			{
				/* Real part ------------------------------------------------ */
#ifdef USE_MAX_LOG_MAP
				vecMetric[k].rTow0 =
					Minimum4((*pcInSymb)[i].cSig.real(),
					rTableQAM64SM[BI_000 /* [0 0 0] */][0],
					rTableQAM64SM[BI_100 /* [1 0 0] */][0],
					rTableQAM64SM[BI_010 /* [0 1 0] */][0],
					rTableQAM64SM[BI_110 /* [1 1 0] */][0],
					(*pcInSymb)[i].rChan,
					vecSubsetDef1[k], vecSubsetDef2[k]);

				vecMetric[k].rTow1 =
					Minimum4((*pcInSymb)[i].cSig.real(),
					rTableQAM64SM[BI_001 /* [0 0 1] */][0],
					rTableQAM64SM[BI_101 /* [1 0 1] */][0],
					rTableQAM64SM[BI_011 /* [0 1 1] */][0],
					rTableQAM64SM[BI_111 /* [1 1 1] */][0],
					(*pcInSymb)[i].rChan,
					vecSubsetDef1[k], vecSubsetDef2[k]);
#else
				/* Higest bit defined by "vecSubsetDef1" next bit defined
				   by "vecSubsetDef2" */
				iTabInd0 =
					((ExtractBit(vecSubsetDef1[k]) & 1) << 2) |
					((ExtractBit(vecSubsetDef2[k]) & 1) << 1);

				vecMetric[k].rTow0 = Minimum1((*pcInSymb)[i].cSig.real(),
					rTableQAM64SM[iTabInd0][0], (*pcInSymb)[i].rChan);

				vecMetric[k].rTow1 = Minimum1((*pcInSymb)[i].cSig.real(),
					rTableQAM64SM[iTabInd0 | 1][0], (*pcInSymb)[i].rChan);
#endif


				/* Imaginary part ------------------------------------------- */
#ifdef USE_MAX_LOG_MAP
				vecMetric[k + 1].rTow0 =
					Minimum4((*pcInSymb)[i].cSig.imag(),
					rTableQAM64SM[BI_000 /* [0 0 0] */][1],
					rTableQAM64SM[BI_100 /* [1 0 0] */][1],
					rTableQAM64SM[BI_010 /* [0 1 0] */][1],
					rTableQAM64SM[BI_110 /* [1 1 0] */][1],
					(*pcInSymb)[i].rChan,
					vecSubsetDef1[k + 1], vecSubsetDef2[k + 1]);

				vecMetric[k + 1].rTow1 =
					Minimum4((*pcInSymb)[i].cSig.imag(),
					rTableQAM64SM[BI_001 /* [0 0 1] */][1],
					rTableQAM64SM[BI_101 /* [1 0 1] */][1],
					rTableQAM64SM[BI_011 /* [0 1 1] */][1],
					rTableQAM64SM[BI_111 /* [1 1 1] */][1],
					(*pcInSymb)[i].rChan,
					vecSubsetDef1[k + 1], vecSubsetDef2[k + 1]);
#else
				/* Higest bit defined by "vecSubsetDef1" next bit defined
				   by "vecSubsetDef2" */
				iTabInd0 =
					((ExtractBit(vecSubsetDef1[k + 1]) & 1) << 2) |
					((ExtractBit(vecSubsetDef2[k + 1]) & 1) << 1);

				/* Calculate distances, imaginary part */
				vecMetric[k + 1].rTow0 = Minimum1((*pcInSymb)[i].cSig.imag(),
					rTableQAM64SM[iTabInd0][1], (*pcInSymb)[i].rChan);

				vecMetric[k + 1].rTow1 = Minimum1((*pcInSymb)[i].cSig.imag(),
					rTableQAM64SM[iTabInd0 | 1][1], (*pcInSymb)[i].rChan);
#endif
			}

			break;
		}

		break;

	case CParameter::CS_3_HMSYM:
		/**********************************************************************/
		/* 64QAM HMsym ********************************************************/
		/**********************************************************************/
		/* (i_0  i_1  i_2  q_0  q_1  q_2) = 
		   (y_0,0  y_1,0  y_2,0  y_0,1  y_1,1  y_2,1) */
		switch (iLevel)
		{
		case 0:
			for (i = 0, k = 0; i < iInputBlockSize; i++, k += 2)
			{
				if (bIteration == TRUE)
				{
					/* Real part -------------------------------------------- */
					/* Lowest bit defined by "vecSubsetDef3" next bit defined
					   by "vecSubsetDef2" */
					iTabInd0 = 
						(ExtractBit(vecSubsetDef3[k]) & 1) | 
						((ExtractBit(vecSubsetDef2[k]) & 1) << 1);

					vecMetric[k].rTow0 = Minimum1((*pcInSymb)[i].cSig.real(), 
						rTableQAM64HMsym[iTabInd0][0], (*pcInSymb)[i].rChan);

					vecMetric[k].rTow1 = Minimum1((*pcInSymb)[i].cSig.real(),
						rTableQAM64HMsym[iTabInd0 | (1 << 2)][0],
						(*pcInSymb)[i].rChan);


					/* Imaginary part --------------------------------------- */
					/* Lowest bit defined by "vecSubsetDef3" next bit defined
					   by "vecSubsetDef2" */
					iTabInd0 =
						(ExtractBit(vecSubsetDef3[k + 1]) & 1) | 
						((ExtractBit(vecSubsetDef2[k + 1]) & 1) << 1);

					/* Calculate distances, imaginary part */
					vecMetric[k + 1].rTow0 =
						Minimum1((*pcInSymb)[i].cSig.imag(),
						rTableQAM64HMsym[iTabInd0][1], (*pcInSymb)[i].rChan);

					vecMetric[k + 1].rTow1 =
						Minimum1((*pcInSymb)[i].cSig.imag(),
						rTableQAM64HMsym[iTabInd0 | (1 << 2)][1],
						(*pcInSymb)[i].rChan);
				}
				else
				{
					/* Real part -------------------------------------------- */
					vecMetric[k].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.real(), 
						rTableQAM64HMsym[BI_000 /* [0 0 0] */][0],
						rTableQAM64HMsym[BI_001 /* [0 0 1] */][0],
						rTableQAM64HMsym[BI_010 /* [0 1 0] */][0],
						rTableQAM64HMsym[BI_011 /* [0 1 1] */][0],
						(*pcInSymb)[i].rChan);

					vecMetric[k].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.real(),
						rTableQAM64HMsym[BI_100 /* [1 0 0] */][0], 
						rTableQAM64HMsym[BI_101 /* [1 0 1] */][0], 
						rTableQAM64HMsym[BI_110 /* [1 1 0] */][0], 
						rTableQAM64HMsym[BI_111 /* [1 1 1] */][0],
						(*pcInSymb)[i].rChan);


					/* Imaginary part --------------------------------------- */
					vecMetric[k + 1].rTow0 =
						Minimum4((*pcInSymb)[i].cSig.imag(),
						rTableQAM64HMsym[BI_000 /* [0 0 0] */][1],
						rTableQAM64HMsym[BI_001 /* [0 0 1] */][1],
						rTableQAM64HMsym[BI_010 /* [0 1 0] */][1],
						rTableQAM64HMsym[BI_011 /* [0 1 1] */][1],
						(*pcInSymb)[i].rChan);

					vecMetric[k + 1].rTow1 =
						Minimum4((*pcInSymb)[i].cSig.imag(),
						rTableQAM64HMsym[BI_100 /* [1 0 0] */][1], 
						rTableQAM64HMsym[BI_101 /* [1 0 1] */][1], 
						rTableQAM64HMsym[BI_110 /* [1 1 0] */][1], 
						rTableQAM64HMsym[BI_111 /* [1 1 1] */][1],
						(*pcInSymb)[i].rChan);
				}
			}

			break;

		case 1:
			for (i = 0, k = 0; i < iInputBlockSize; i++, k += 2)
			{
				if (bIteration == TRUE)
				{
					/* Real part -------------------------------------------- */
					/* Lowest bit defined by "vecSubsetDef3",highest defined
					   by "vecSubsetDef1" */
					iTabInd0 =
						((ExtractBit(vecSubsetDef1[k]) & 1) << 2) | 
						(ExtractBit(vecSubsetDef3[k]) & 1);

					vecMetric[k].rTow0 = Minimum1((*pcInSymb)[i].cSig.real(), 
						rTableQAM64HMsym[iTabInd0][0],
						(*pcInSymb)[i].rChan);

					vecMetric[k].rTow1 = Minimum1((*pcInSymb)[i].cSig.real(),
						rTableQAM64HMsym[iTabInd0 | (1 << 1)][0],
						(*pcInSymb)[i].rChan);

⌨️ 快捷键说明

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