From dbc117ecf15320b2e0e8139b7f44c1a12cb5cf42 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 10 Jul 2014 06:18:28 +0000 Subject: [PATCH] basic channel simulation feaure to check txt messaging in noise git-svn-id: https://svn.code.sf.net/p/freetel/code@1751 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2-dev/src/dlg_options.cpp | 6 ++++++ fdmdv2-dev/src/dlg_options.h | 1 + fdmdv2-dev/src/fdmdv2_main.cpp | 7 +++++++ fdmdv2-dev/src/fdmdv2_main.h | 4 +++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/fdmdv2-dev/src/dlg_options.cpp b/fdmdv2-dev/src/dlg_options.cpp index 6acca118..a2a52a78 100644 --- a/fdmdv2-dev/src/dlg_options.cpp +++ b/fdmdv2-dev/src/dlg_options.cpp @@ -44,6 +44,10 @@ OptionsDlg::OptionsDlg(wxWindow* parent, wxWindowID id, const wxString& title, c sb_testFrames->SetToolTip(_("Send frames of known bits instead of compressed voice")); sbSizer_testFrames->Add(m_ckboxTestFrame, 0, wxALIGN_LEFT, 0); + m_ckboxChannelNoise = new wxCheckBox(this, wxID_ANY, _("Channel Noise"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); + sb_testFrames->SetToolTip(_("Add simulated AWGN channel noise to received signal")); + sbSizer_testFrames->Add(m_ckboxChannelNoise, 0, wxALIGN_LEFT, 0); + bSizer30->Add(sbSizer_testFrames,0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3); //------------------------------ @@ -197,6 +201,7 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) { m_txtCtrlCallSign->SetValue(wxGetApp().m_callSign); m_ckboxTestFrame->SetValue(wxGetApp().m_testFrames); + m_ckboxChannelNoise->SetValue(wxGetApp().m_channel_noise); m_ckbox_events->SetValue(wxGetApp().m_events); m_txt_spam_timer->SetValue(wxString::Format(wxT("%i"),wxGetApp().m_events_spam_timer)); @@ -217,6 +222,7 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) { wxGetApp().m_callSign = m_txtCtrlCallSign->GetValue(); wxGetApp().m_testFrames = m_ckboxTestFrame->GetValue(); + wxGetApp().m_channel_noise = m_ckboxChannelNoise->GetValue(); wxGetApp().m_events = m_ckbox_events->GetValue(); long spam_timer; diff --git a/fdmdv2-dev/src/dlg_options.h b/fdmdv2-dev/src/dlg_options.h index 498804d5..731532c4 100644 --- a/fdmdv2-dev/src/dlg_options.h +++ b/fdmdv2-dev/src/dlg_options.h @@ -67,6 +67,7 @@ class OptionsDlg : public wxDialog wxTextCtrl *m_txtCtrlCallSign; // TODO: this should be renamed to tx_txtmsg, and rename all related incl persis strge wxCheckBox *m_ckboxTestFrame; + wxCheckBox *m_ckboxChannelNoise; wxRadioButton *m_rb_textEncoding1; wxRadioButton *m_rb_textEncoding2; diff --git a/fdmdv2-dev/src/fdmdv2_main.cpp b/fdmdv2-dev/src/fdmdv2_main.cpp index 6b28cb0a..aaaad7b7 100644 --- a/fdmdv2-dev/src/fdmdv2_main.cpp +++ b/fdmdv2-dev/src/fdmdv2_main.cpp @@ -51,6 +51,7 @@ int g_total_bit_errors; int g_sz_error_pattern; short *g_error_pattern; struct FIFO *g_errorFifo; +int g_channel_noise; // time averaged magnitude spectrum used for waterfall and spectrum display float g_avmag[FDMDV_NSPEC]; @@ -1041,6 +1042,7 @@ void MainFrame::OnTimer(wxTimerEvent &evt) g_total_bit_errors = 0; } g_testFrames = wxGetApp().m_testFrames; + g_channel_noise = wxGetApp().m_channel_noise; if (g_State) { char bits[80], errors[80], ber[80]; @@ -3166,6 +3168,11 @@ void per_frame_rx_processing( rx_fdm[i].real = (float)input_buf[i] / FDMDV_SCALE; rx_fdm[i].imag = 0.0; } + + + if (g_channel_noise) { + fdmdv_simulate_channel(g_pFDMDV, rx_fdm, *nin, 2.0); + } fdmdv_freq_shift(rx_fdm_offset, rx_fdm, g_RxFreqOffsetHz, &g_RxFreqOffsetPhaseRect, *nin); fdmdv_demod(g_pFDMDV, rx_bits, &reliable_sync_bit, rx_fdm_offset, nin); diff --git a/fdmdv2-dev/src/fdmdv2_main.h b/fdmdv2-dev/src/fdmdv2_main.h index c7d1f7dc..49d4c90c 100644 --- a/fdmdv2-dev/src/fdmdv2_main.h +++ b/fdmdv2-dev/src/fdmdv2_main.h @@ -243,7 +243,9 @@ class MainApp : public wxApp // misc - bool m_testFrames; + bool m_testFrames; + bool m_channel_noise; + float m_channel_snr_dB; int FilterEvent(wxEvent& event); MainFrame *frame; -- 2.25.1