📄 dqpskmodem.cpp
字号:
/*********************************************************************
* This program simulates a 4800 bps DQPSK modem. It is a bit stream *
* type modem, i.e. it processes and sends one sample at a time. The *
* channel is an additive white Gaussian noise channel *
* *
* Chan Tong Lam June, 1998 *
*********************************************************************/
/* Define output file names */
#define INPUTPARAMETERS "InputParameters.txt"
#define RANDOMDATA "RandomBitsSent.txt"
#define TRANSMITTEROUTPUT "TransmitterOutput.txt"
#define CHANNELOUTPUT "ChannelOutput.txt"
#define PURENOISE "AWGnoise2.txt"
#define DATASINK0 "DataSink0.txt" /* noiseless channel */
#define DATASINK1 "DataSink1.txt" /* noisy channel */
#define DATASTROBES0 "DataStrobes0.txt" /* noiseless channel */
#define DATASTROBES1 "DataStrobes1.txt" /* noisy channel */
#define PERFORMANCEBER "BERanalysis.txt"
#define BER "BER.txt"
#define SNR "SNR.txt"
/* Borland C++ include files */
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <complex.h>
#include <math.h>
#include <time.h>
/* User include files*/
#include "DQPSKtransmitter.cpp"
#include "channel.cpp"
#include "DQPSKreceiver.cpp"
#include "PerformanceAnalyzer.cpp"
/* Transmitter constants */
long int NumSymbols=2000;
const int NumTraining=50;
const int TxCarrierPhaseShift=0; /* in radians */
/* Channel constants */
/* const double ChannelVariance=772.5; */
const long RandSeed=-300; /* seed must be a negative integer */
/* Receiver constants */
int main()
{ifstream In(INPUTPARAMETERS,ios::in);
int starting,ending,step; /* for AWGNoise variance */
In>>NumSymbols;
In>>starting;
In>>step;
In>>ending;
for (int i=starting; i<=ending; i=i+step)
{double ChannelVariance;
DQPSKtransmitter TX;
channel CH;
DQPSKreceiver RX0(0); /* detection with no noise */
DQPSKreceiver RX1(1); /* detection with noise */
PerformanceAnalyzer PAR; /* calculates BER and SNR */
/* input parameter */
ChannelVariance=i;
/* Transmitter */
TX.SetParameters(NumSymbols,NumTraining,TxCarrierPhaseShift);
TX.transmit(TRANSMITTEROUTPUT,RANDOMDATA); /* write samples to file */
/* Channel */
CH.SetParameters(ChannelVariance,RandSeed);
CH.AddAWGN(TRANSMITTEROUTPUT,CHANNELOUTPUT,PURENOISE,8*NumSymbols);
/* Receiver */ /* NO NOISE */
if (!RX0.ReceiveAndDetect(TRANSMITTEROUTPUT,DATASINK0,DATASTROBES0)) break;
if (!RX1.ReceiveAndDetect(CHANNELOUTPUT,DATASINK1,DATASTROBES1)) break;
/* Performance(e.g. BER) analysis */
PAR.CalculateSNR(DATASTROBES0,PURENOISE);
PAR.CalculateBER(RANDOMDATA,DATASINK0,PERFORMANCEBER); /* output to a file */
PAR.CalculateBER(RANDOMDATA,DATASINK1);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -