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

📄 dqpsktransmitter.cpp

📁 QPSK调制Modem的C实现及文档说明
💻 CPP
字号:
/********************************************************************
 * DQPSKtransmitter -- processed and transmits discrete samples     *
 * Functions -- SetParameters, transmit                             *
 * Inputs -- number of symbols and training symbols                 *
 * Returns -- void                                                  *
 * Note: default number of symbols are 100 where all are training   *
 *       symbols, also there is NO timing offset in TX.             *
 ********************************************************************/

/* user included files. Each file represents one class definition */
#include "SignalGenerator.cpp"
#include "DiffEncoder.cpp"
#include "ImpulseGenerator.cpp"
#include "RRcFilter.cpp"
#include "modulator.cpp"
/* #include "DAconverter.cpp" */  /* used when D/A board is presented */

class DQPSKtransmitter {
 private:
  long int NumSymbols;       /* number of symbols to be sent */
  int TrainingSymbols;    /* number of symbols used in training mode */
  double PhaseShift;     /* carrier phase shift in radians */
  double symbol;    		/* temparory storage */
  double CosRailSymbol,SinRailSymbol;          /* symbol to be processed */
  double CosRailSample,SinRailSample;          /* sample to be processed */
  double ChannelSample;

  /* Object definition */
  SignalGenerator SG;
  DiffEncoder DE;
  ImpulseGenerator IG1;    /* for cos rail */
  ImpulseGenerator IG2;    /* for sin rail */
  RRcFilter RRCF1;       /* filter for cos(or I) rail */
  RRcFilter RRCF2;       /* filter for sin(or Q) rail */
  modulator MR;       /* 2 times base band signalfreq. phase shift=0(rad) */
  /* DAconverter DA;     /* software interface to D/A board */

 public:
  DQPSKtransmitter()
   { NumSymbols=100; TrainingSymbols=100; PhaseShift=0; }
  void SetParameters(long int NumSym, int TrainSym, double phase)
   { NumSymbols=NumSym; TrainingSymbols=TrainSym; PhaseShift=phase;}
  void transmit(char ChannelFileName[],char DataFileName[]);
};

/******************************************************************
 * This function transmits a specific number of symbols including *
 * training symbols and writes to a file specified by the user.   *
 ******************************************************************/
void DQPSKtransmitter::transmit(char ChannelFileName[],char DataFileName[])
 { ofstream WriteChannelFile(ChannelFileName,ios::out);
   ofstream WriteDataFile(DataFileName,ios::out);
   cout<<"Transmitting "<<2*NumSymbols<<"("<<2*TrainingSymbols<<" for training)";
   cout<<"bits..."<<endl;
  /* only one sample is processed for each loop time */
  for (int i=0; i<(NumSymbols*8); ++i)
   { if (((i%8)==0)&&(i<TrainingSymbols*8))   /* training mode */
      { if (i>=((TrainingSymbols-5)*8))    /* 10 zeros for data mode */
        symbol=DE.EncodeSymbol(SG.GenZero(),SG.GenZero());
        else
        symbol=DE.EncodeSymbol(SG.GenOne(),SG.GenOne());
        CosRailSymbol=cos(symbol);
        SinRailSymbol=sin(symbol);
        MR.ShiftPhase(PhaseShift,0);       /* default phase shift is zero */
      }
     if (((i%8)==0)&&(i>=(TrainingSymbols*8)))     /* data mode */
      { int temp1,temp2;
        temp1=SG.GenRandomBit(); 		temp2=SG.GenRandomBit();
        symbol=DE.EncodeSymbol(temp1,temp2);
        CosRailSymbol=cos(symbol);
        SinRailSymbol=sin(symbol);
        MR.ShiftPhase(PhaseShift,0);      /* default phase shift is zero */
        WriteDataFile<<temp1<<endl<<temp2<<endl;
      }
     CosRailSample=IG1.GenImpulse(CosRailSymbol);  /* Generate Impulse */
     SinRailSample=IG2.GenImpulse(SinRailSymbol);
     ChannelSample=MR.CosModulation(RRCF1.conv(CosRailSample))-
                   MR.SinModulation(RRCF2.conv(SinRailSample));

    // if ((i%50000)!=0)        /* timing drift */
     WriteChannelFile<<ChannelSample<<endl;
     /* Send sample to D/A board. Used when D/A board is presented. */
     /* DA.SendSample(DA.MapSample(ChannelSample)); */
   }
 }
















⌨️ 快捷键说明

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