From 05a378e16dcb7ec1c189342419f1dcf7c46a795a Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sun, 5 Mar 2017 09:14:14 +0000 Subject: [PATCH] first pass at option to introduce interfering carrier git-svn-id: https://svn.code.sf.net/p/freetel/code@3056 01035d8c-6547-0410-b346-abe4f91aad63 --- freedv-dev/src/dlg_options.cpp | 31 +++++++++++++++++++++++++++++++ freedv-dev/src/dlg_options.h | 6 +++++- freedv-dev/src/fdmdv2_main.cpp | 27 ++++++++++++++++++++++++++- freedv-dev/src/fdmdv2_main.h | 7 +++++++ 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/freedv-dev/src/dlg_options.cpp b/freedv-dev/src/dlg_options.cpp index 27e1b0d0..b4246408 100644 --- a/freedv-dev/src/dlg_options.cpp +++ b/freedv-dev/src/dlg_options.cpp @@ -58,6 +58,25 @@ OptionsDlg::OptionsDlg(wxWindow* parent, wxWindowID id, const wxString& title, c bSizer30->Add(sbSizer_testFrames,0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3); + //------------------------------ + // Interfering tone + //------------------------------ + + wxStaticBoxSizer* sbSizer_tone; + wxStaticBox *sb_tone = new wxStaticBox(this, wxID_ANY, _("Simulated Interference Tone")); + sbSizer_tone = new wxStaticBoxSizer(sb_tone, wxHORIZONTAL); + + m_ckboxTone = new wxCheckBox(this, wxID_ANY, _("Tone Freq (Hz):"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); + sbSizer_tone->Add(m_ckboxTone, 0, wxALIGN_LEFT, 0); + m_txtToneFreqHz = new wxTextCtrl(this, wxID_ANY, "1000", wxDefaultPosition, wxSize(60,-1), 0, wxTextValidator(wxFILTER_DIGITS)); + sbSizer_tone->Add(m_txtToneFreqHz, 0, wxALIGN_LEFT, 0); + wxStaticText *m_staticTextta = new wxStaticText(this, wxID_ANY, _(" Amplitude (pk): "), wxDefaultPosition, wxDefaultSize, 0); + sbSizer_tone->Add(m_staticTextta, 0, wxALIGN_CENTER_VERTICAL, 5); + m_txtToneAmplitude = new wxTextCtrl(this, wxID_ANY, "1000", wxDefaultPosition, wxSize(60,-1), 0, wxTextValidator(wxFILTER_DIGITS)); + sbSizer_tone->Add(m_txtToneAmplitude, 0, wxALIGN_LEFT, 0); + + bSizer30->Add(sbSizer_tone,0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3); + //------------------------------ // FreeDV 700 Options //------------------------------ @@ -249,6 +268,10 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) m_ckboxChannelNoise->SetValue(wxGetApp().m_channel_noise); m_txtNoiseSNR->SetValue(wxString::Format(wxT("%i"),wxGetApp().m_noise_snr)); + m_ckboxTone->SetValue(wxGetApp().m_tone); + m_txtToneFreqHz->SetValue(wxString::Format(wxT("%i"),wxGetApp().m_tone_freq_hz)); + m_txtToneAmplitude->SetValue(wxString::Format(wxT("%i"),wxGetApp().m_tone_amplitude)); + m_ckboxAttnCarrierEn->SetValue(wxGetApp().m_attn_carrier_en); m_txtAttnCarrier->SetValue(wxString::Format(wxT("%i"),wxGetApp().m_attn_carrier)); @@ -284,6 +307,14 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) m_txtNoiseSNR->GetValue().ToLong(&noise_snr); wxGetApp().m_noise_snr = (int)noise_snr; + wxGetApp().m_tone = m_ckboxTone->GetValue(); + long tone_freq_hz, tone_amplitude; + m_txtToneFreqHz->GetValue().ToLong(&tone_freq_hz); + wxGetApp().m_tone_freq_hz = (int)tone_freq_hz; + m_txtToneAmplitude->GetValue().ToLong(&tone_amplitude); + wxGetApp().m_tone_amplitude = (int)tone_amplitude; + + wxGetApp().m_attn_carrier_en = m_ckboxAttnCarrierEn->GetValue(); long attn_carrier; m_txtAttnCarrier->GetValue().ToLong(&attn_carrier); diff --git a/freedv-dev/src/dlg_options.h b/freedv-dev/src/dlg_options.h index 1724a2f1..7bf5c85c 100644 --- a/freedv-dev/src/dlg_options.h +++ b/freedv-dev/src/dlg_options.h @@ -33,7 +33,7 @@ class OptionsDlg : public wxDialog public: OptionsDlg( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Options"), - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(600,630), + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(600,660), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~OptionsDlg(); @@ -78,6 +78,10 @@ class OptionsDlg : public wxDialog wxCheckBox *m_ckboxAttnCarrierEn; wxTextCtrl *m_txtAttnCarrier; + wxCheckBox *m_ckboxTone; + wxTextCtrl *m_txtToneFreqHz; + wxTextCtrl *m_txtToneAmplitude; + wxCheckBox *m_ckboxFreeDV700txClip; wxCheckBox *m_ckboxFreeDV700Combine; diff --git a/freedv-dev/src/fdmdv2_main.cpp b/freedv-dev/src/fdmdv2_main.cpp index 953fcb80..386512a7 100644 --- a/freedv-dev/src/fdmdv2_main.cpp +++ b/freedv-dev/src/fdmdv2_main.cpp @@ -53,7 +53,8 @@ int g_resyncs; float g_sig_pwr_av = 0.0; struct FIFO *g_error_pattern_fifo; short *g_error_hist, *g_error_histn; - +float g_tone_phase; + // time averaged magnitude spectrum used for waterfall and spectrum display float g_avmag[MODEM_STATS_NSPEC]; @@ -504,6 +505,10 @@ MainFrame::MainFrame(wxString plugInName, wxWindow *parent) : TopFrame(plugInNam wxGetApp().m_attn_carrier_en = 0; wxGetApp().m_attn_carrier = 0; + wxGetApp().m_tone = 0; + wxGetApp().m_tone_freq_hz = 1000; + wxGetApp().m_tone_amplitude = 500; + int mode = pConfig->Read(wxT("/Audio/mode"), (long)0); if (mode == 0) m_rb1600->SetValue(1); @@ -594,6 +599,7 @@ MainFrame::MainFrame(wxString plugInName, wxWindow *parent) : TopFrame(plugInNam g_test_frame_sync_state = 0; g_resyncs = 0; wxGetApp().m_testFrames = false; + g_tone_phase = 0.0; g_modal = false; @@ -3465,6 +3471,21 @@ void txRxProcessing() freedv_set_snr_squelch_thresh(g_pfreedv, g_SquelchLevel); } + // Optional tone interferer + + if (wxGetApp().m_tone) { + float w = 2.0*M_PI*wxGetApp().m_tone_freq_hz/freedv_get_modem_sample_rate(g_pfreedv); + float s; + unsigned int i; + for(i=0; isnr_squelch_thresh); // compute rx spectrum - do here so update rate in constant @@ -3728,14 +3749,18 @@ void per_frame_rx_processing( //fwrite(input_buf, sizeof(short), nin, ftest); // demod per frame processing + for(i=0; i