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

📄 dlrxframe.cpp.bak

📁 在vc上做的802.16d ofdm phy的仿真
💻 BAK
字号:
#include "sample.h"
#include "dlRxDemod.h"
#include "RxPreamble.h"
#include "chTrack.h"
#include "chTrackStc.h"
#include "chcomp.h"
#include "channelDecoding.h"

#include "typedef.h"
#include "global_var.h"

#include <fstream.h>
#include <iomanip.h>

void dlRxFrame()
{
	int i;
	Uint16 g_dlRxFrameSymSize;
	Uint16  rxModIndex = 0;
	Int16 tempBuff0[DL_RX_BUFF_SIZE];
	Int16 tempBuff1[DL_RX_BUFF_SIZE];
	
	DlRxBurstParam *pRxBurstParam;
	Int16   *pFftOutBuff;
	
	pRxBurstParam = g_dlRxBurstParam;
	pFftOutBuff = g_dlRxFftOutBuff;

	g_dlRxFrameSymSize = g_ssDlFrameParam.frameDurationSym;
	g_dlRxStcFlag = 0;
	g_dlTxFrameSymIndex = 0;

	ofstream out1;

	ifstream fin0("temp\\txchannel0.txt");
	
	ifstream fin1("temp\\txchannel1.txt");
	
	//rx
	while(rxModIndex < g_dlRxFrameSymSize)
	{
		if ((*pRxBurstParam).burstFlag == STCFCH_BURSTFLAG
			|| (*pRxBurstParam).burstFlag == STC_BURSTFLAG)
		{
	
			if ((*pRxBurstParam).burstFlag == STCFCH_BURSTFLAG 
				&& (*pRxBurstParam).ofdmSymIndex == 0)
			{
				for (i = 0 ; i < 1280; i++)
				{
					fin0 >> g_dlTxInterpOutBuff0[i];
					fin1 >> g_dlTxInterpOutBuff1[i];
				}
			
				sample (g_dlTxInterpOutBuff0, DL_TX_INTERP_OUTBUFF_SIZE/2, INTERP_RATE, tempBuff0);

				sample (g_dlTxInterpOutBuff1, DL_TX_INTERP_OUTBUFF_SIZE/2, INTERP_RATE, tempBuff1);
					
				for (i = 0; i < DL_RX_BUFF_SIZE; i++)
				{
					g_dlRxBuff[i] = tempBuff0[i] + tempBuff1[i];
				}
				
				dlRxDemod();
				
				out1.open("temp\\rxstcpreamble.txt");
				for (i = 0; i < 512; i ++)
				{
					out1 << setw(10) << g_dlRxFftOutBuff[i];
				}
				out1.close();
				
				g_chEstMode = PREAMBLE_STC;

				pdlPreambleChEstRes = g_dlPreambleChEstResStc;
			
				dlRxPreamble();

				out1.open("temp\\ChEstOutStc0.txt");
				for (i = 0; i < 2 * PREAMBLE_FREQ_FULL_SIZE; i++)
				{
					out1 << setw(10) << g_dlRxPreambleChEstRes[0].ChEstOut[i];
				}
				out1.close();

				out1.open("temp\\ChEstOutStc1.txt");
				for (i = 0; i < 2 * PREAMBLE_FREQ_FULL_SIZE; i++)
				{
					out1 << setw(10) << g_dlRxPreambleChEstRes[1].ChEstOut[i];

				}
				out1.close();
						
			}
			else
			{
				for (i = 0 ; i < 1280; i++)
				{
					fin0 >> g_dlTxInterpOutBuff0[i];
					fin1 >> g_dlTxInterpOutBuff1[i];
				}
			
				sample (g_dlTxInterpOutBuff0, DL_TX_INTERP_OUTBUFF_SIZE/2, INTERP_RATE, tempBuff0);

				sample (g_dlTxInterpOutBuff1, DL_TX_INTERP_OUTBUFF_SIZE/2, INTERP_RATE, tempBuff1);
					
				for (i = 0; i < DL_RX_BUFF_SIZE; i++)
				{
					g_dlRxBuff[i] = tempBuff0[i] + tempBuff1[i];
				}
				
				if (g_dlRxStcFlag == 0)
				{
					dlRxDemod();
					
					g_dlRxStcFlag ^= 1;
				}
				
				else
				{
					pFftOutBuff += 2*FFT_SIZE;
					
					dlRxDemod();
				
				    dlRxChTrackCompStc();
				    
				    g_dlRxStcFlag ^= 1;
				}

				
				else
				{
					stcDecoding (g_dlRxStcFlag,
								 g_dlRxChCompOutBuff,
								 DL_RX_CHStcDecod_OUTBUFF_SIZE, //2*201
								 g_dlRxPreambleChEstRes,
								 g_dlRxChStcDecodOutBuff);

				}

				out1.open("temp\\rxchomp.txt",ios::app);
				for (i = 0; i < 402; i ++)
				{
					out1 << setw(8) << g_dlRxChStcDecodOutBuff[i];
				}
				out1.close();
				
			}	
		}
			channelDecoding (pRxBurstParam, g_dlRxChStcDecodOutBuff);
		}
		else
		{
			for (i = 0 ; i < 1280; i++)
			{
				fin0 >> g_dlTxInterpOutBuff0[i];
			}

			sample (g_dlTxInterpOutBuff0, DL_TX_INTERP_OUTBUFF_SIZE/2, INTERP_RATE, g_dlRxBuff);

			dlRxDemod();

			out1.open("temp\\rx.txt");
			for (i = 0; i < 512; i ++)
			{
				out1 << setw(10) << g_dlRxFftOutBuff[i];
			}
			out1.close();

			if ((*pRxBurstParam).preambleFlag != NO_PREAMBLE 
				&& (*pRxBurstParam).ofdmSymIndex < 2)
			{
				if ((*pRxBurstParam).ofdmSymIndex == 0)
				{
					g_chEstMode = LONGPREAMBLE_64;

					pdlPreambleChEstRes = &g_dlPreambleChEstRes64;
				}
				else
				{
					g_chEstMode = LONGPREAMBLE_128;

					pdlPreambleChEstRes = &g_dlPreambleChEstRes128;

				}	
				dlRxPreamble();

				out1.open("temp\\ChEstOut.txt");
				for (i = 0; i < 2 * PREAMBLE_FREQ_FULL_SIZE; i++)
				{
					out1 << setw(8) << g_dlRxPreambleChEstRes[0].ChEstOut[i];
				}
				out1.close();

				out1.open("temp\\SignalandNoise.txt");
		
				out1 << "rxsignal =" << g_dlRxPreambleChEstRes[0].rxSignalPower << endl;

				out1 << "rxnoise =" << g_dlRxPreambleChEstRes[0].rxNoisePower << endl;

				out1.close();
			}
			else
			{
				
				chTrack (g_dlRxFftOutBuff,
			  			 FFT_SIZE,
			  			 g_dlRxPreambleChEstRes,
			  			 &g_dlRxPilotParam,
			  			 &g_dlRxTrackPhaseShift);

				chComp (g_dlRxFftOutBuff,
						FFT_SIZE,
						&g_dlRxTrackPhaseShift,
						g_dlRxPreambleChEstRes,
						g_dlRxChCompOutBuff);

				out1.open("temp\\rxchomp.txt",ios::app);
				for (i = 0; i < 2 * PREAMBLE_FREQ_FULL_SIZE; i++)
				{
					out1 << setw(10) << g_dlRxChCompOutBuff[i];
				}
				out1.close();
				
				channelDecoding (pRxBurstParam, g_dlRxChCompOutBuff);
			}
		}

		rxModIndex ++;
		g_dlRxFrameSymIndex ++;
		(*pRxBurstParam).ofdmSymIndex ++;

		if ((*pRxBurstParam).ofdmSymIndex == (*pRxBurstParam).burstSizeSym
			&& g_dlRxBurstIndex < g_ssDlFrameParam.burstNum - 1)
		{
			pRxBurstParam ++;
			g_dlRxBurstIndex ++;
		}
	}
	fin0.close();
	fin1.close();

}
	

⌨️ 快捷键说明

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