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

📄 msk_sim.cpp

📁 很好的通信系统仿真源程序
💻 CPP
字号:
//
//  File = msk_sim.cpp
//

#define SIM_NAME "MskSim\0"
#define SIM_TITLE "Complex Baseband Simulation for MSK\0"

#include "global_stuff.h" 

#include "gausrand.h"
#include "bitgen.h"
#include "bitwav.h"
#include "mskmod.h"
#include "add_gaus_noise.h"
#include "spec_analyzer.h"
#include "phase_genie.h"
#include "quaddem.h"
#include "qpskdem.h"
#include "msk_genie.h"
#include "integ_dump_slice.h"
#include "discrete_delay_T.h"
#include "ber_ctr.h"
#include "siganchr.h"
#include "msk_theory.h"
#include "sigstuff.h"
#include "parmfile.h"
#include "model_graph.h"
#include "sigplot.h"
#include "reports.h"
#include "exec.h"
#include "psstream.h"
   

//#ifdef _DEBUG
// ofstream DebugFile("MskModulator.dbg", ios::out);
//#endif

//=========================================================
//  Global Stuff

//ParmFile ParmInput("MskModulator.dat");
//ofstream LongReport;
//ofstream ShortReport;
//PracSimStream DetailedResults;
//PracSimStream BasicResults;
//PracSimStream ErrorStream;

//PracSimModel *CommSystem;
//ActiveSystemGraph ActSystGraph;
//Executive Exec;
//PracSimModel *PrevModelConstr;
//PracSimModel *ActiveModel;
//SignalPlotter SigPlot;
//int PassNumber;
//int MaxPassNumber;
//int EnclaveNumber;

//=========================================================

main()
{
#include "sim_preamble.cpp"

  //=========================================================================
  //  Misc special processing

  //-----------------------------------------------------
  // create plot file of theoretical PSD for MSK signal

  MskPsd(  0.0,  // carrier_freq
            1.0,  // symb_energy,
            1.0,  // symb_intvl,
            -4.0, // beg_freq,
            4.0,  // end_freq,
            801,  // num_pts,
            true, // plot_in_db,
            "msk_psd_theor.txt\0"); //out_filename

  //-----------------------------------------------------
  // create plot file of BER for ideal MSK

  MskBer(  -10.0,  // beg_ebno,
            18.0, // end_ebno,
            401,  // num_pts,
            "theor_msk_ber.txt\0");  // out_filename
  //=========================================================================
  //  Allocate signals

  BIT_SIGNAL(i_bits);
  BIT_SIGNAL(q_bits);
  BIT_SIGNAL(q_bits_delayed);
  FLOAT_SIGNAL(i_baseband_wave);
  FLOAT_SIGNAL(q_baseband_wave);
  BIT_SIGNAL(i_bit_clock);
  BIT_SIGNAL(q_bit_clock);
  FLOAT_SIGNAL(i_filtered_wave);
  FLOAT_SIGNAL(q_filtered_wave);
  COMPLEX_SIGNAL(modulated_signal);
  COMPLEX_SIGNAL(filtered_sig);
  COMPLEX_SIGNAL(noisy_sig);
  COMPLEX_SIGNAL(phase_ref_sig);
  FLOAT_SIGNAL(power_meas_sig);
  FLOAT_SIGNAL(mag_signal);
  FLOAT_SIGNAL(phase_signal);
  FLOAT_SIGNAL(i_demod_wave);
  FLOAT_SIGNAL(q_demod_wave);
  FLOAT_SIGNAL(i_corr_sig);
  FLOAT_SIGNAL(q_corr_sig);
  FLOAT_SIGNAL(i_filt_demod_wave);
  FLOAT_SIGNAL(q_filt_demod_wave);
  FLOAT_SIGNAL(i_samp_demod_wave);
  FLOAT_SIGNAL(q_samp_demod_wave);
  BIT_SIGNAL(i_bit_decis);
  BIT_SIGNAL(q_bit_decis);

  //============================================================
  //  Construct, initialize and connect models

  EnclaveNumber = 0;

  BitGener* i_bit_gen = new BitGener( "i_bit_gen\0",
                                      CommSystem,
                                      i_bits );

  BitGener* q_bit_gen = new BitGener( "q_bit_gen\0",
                                      CommSystem,
                                      q_bits );

  DiscreteDelay<bit_t>* q_bit_delay = new DiscreteDelay<bit_t>( 
                                "q_bit_delay\0",
                                CommSystem,
                                q_bits,
                                q_bits_delayed);

  BitsToWave* i_wave_gen = new BitsToWave( "i_wave_gen\0",
                                           CommSystem,
                                           i_bits,
                                           i_baseband_wave,
                                           i_bit_clock );

  BitsToWave* q_wave_gen = new BitsToWave( "q_wave_gen\0",
                                           CommSystem,
                                           q_bits,
                                           q_baseband_wave,
                                           q_bit_clock );

  MskModulator* msk_mod = new MskModulator( "msk_mod\0",
                                            CommSystem,
                                            i_baseband_wave,
                                            q_baseband_wave,
                                            modulated_signal,
                                            mag_signal,
                                            phase_signal );
  
  AdditiveGaussianNoise<std::complex<float> >* agn_source = 
                  new AdditiveGaussianNoise<std::complex<float> >( 
                                                "agn_source\0",
                                                CommSystem,
                                                modulated_signal,
                                                noisy_sig,
                                                power_meas_sig);

  SpectrumAnalyzer<std::complex<float> >* modulator_spec_an = 
                  new SpectrumAnalyzer<std::complex<float> >( 
                                                  "modulator_spec_an\0",
                                                  CommSystem,
                                                  modulated_signal );

   PhaseRecoveryGenie* phase_genie = new PhaseRecoveryGenie( "phase_genie\0",
                                                            CommSystem,
                                                            phase_ref_sig);

   QuadratureDemod* quad_demod = new QuadratureDemod( "quad_demod\0",
                                                      CommSystem,
                                                      noisy_sig,
                                                      phase_ref_sig,
                                                      i_demod_wave,
                                                      q_demod_wave);

//  QpskDemodulator* qpsk_dem = new QpskDemodulator( "qpsk_dem\0",
//                                                    CommSystem,
//                                                    noisy_sig,
//                                                    i_demod_wave,
//                                                    q_demod_wave);

  SignalAnchor* temp_anchor = new SignalAnchor( "temp_anchor_1\0",
                                                CommSystem,
                                                i_baseband_wave,
                                                q_baseband_wave,
                                                0.0625, //samp_intvl
                                                4096 ); //block_size

   MskShapeGenie* msk_genie = new MskShapeGenie( "msk_genie\0",
                                                   CommSystem,
                                                   i_corr_sig,
                                                   q_corr_sig);

  IntegrateDumpAndSlice* i_bit_slicer = new IntegrateDumpAndSlice( "i_bit_slicer\0",
                                          CommSystem,
                                          i_demod_wave,
                                          //i_corr_sig,
                                          i_bit_clock,
                                          i_samp_demod_wave,
                                          i_bit_decis );

  BerCounter* i_ber_ctr = new BerCounter( "i_ber_ctr\0",
                                        CommSystem,
                                        i_bits,
                                        i_bit_decis );

  IntegrateDumpAndSlice* q_bit_slicer = new IntegrateDumpAndSlice( "q_bit_slicer\0",
                                          CommSystem,
                                          q_demod_wave,
                                          //q_corr_sig,
                                          q_bit_clock,
                                          q_samp_demod_wave,
                                          q_bit_decis );

  BerCounter* q_ber_ctr = new BerCounter( "q_ber_ctr\0",
                                        CommSystem,
                                        q_bits_delayed,
                                        q_bit_decis );

  //=============================================================
  #include "sim_postamble.cpp"
  return 0;
}  

⌨️ 快捷键说明

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