From: drowe67 Date: Sat, 9 Mar 2013 04:00:48 +0000 (+0000) Subject: support for clipping of tx waveform X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=5d3bc807a4a7e5190a9355e54b3ab37b58595ba9;p=freetel-svn-tracking.git support for clipping of tx waveform git-svn-id: https://svn.code.sf.net/p/freetel/code@1205 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 34aebb19..af9b6bd6 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -40,6 +40,7 @@ struct CODEC2 *g_pCodec2; struct FDMDV *g_pFDMDV; struct FDMDV_STATS g_stats; float g_pwr_scale; +int g_clip; // test Frames int g_testFrames; @@ -853,6 +854,19 @@ void MainFrame::OnCmdSliderScroll(wxScrollEvent& event) event.Skip(); } +//------------------------------------------------------------------------- +// OnClipEnter() +//------------------------------------------------------------------------- +void MainFrame::OnClipEnter(wxCommandEvent& event) +{ + wxString clipStr = m_textCtrlClip->GetValue(); + long value; + if(clipStr.ToLong(&value)) { + g_clip = (int)value; + } + printf("g_clip: %d\n", g_clip); +} + //------------------------------------------------------------------------- // OnCheckSQClick() //------------------------------------------------------------------------- @@ -1616,7 +1630,13 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) // note: PAPR will still be worse for higher Nc, especially in frame test mode g_pwr_scale = sqrt((14.0+4.0)/(g_Nc+4.0)); - + wxString clipStr = m_textCtrlClip->GetValue(); + long value; + if(clipStr.ToLong(&value)) { + g_clip = (int)value; + } + printf("g_clip: %d\n", g_clip); + // init Codec 2 LPC Post Filter codec2_set_lpc_post_filter(g_pCodec2, @@ -2787,10 +2807,16 @@ void per_frame_tx_processing( /* compute scale factor to normalise tx power for all modes */ - /* scale and convert shorts */ + /* scale and convert to shorts */ - for(i=0; i<2*FDMDV_NOM_SAMPLES_PER_FRAME; i++) - tx_fdm_scaled[i] = FDMDV_SCALE * g_pwr_scale * tx_fdm_offset[i].real; + for(i=0; i<2*FDMDV_NOM_SAMPLES_PER_FRAME; i++) { + float s = tx_fdm_offset[i].real; + if (s > g_clip) + s = (float)g_clip; + if (s < -g_clip) + s = (float)g_clip; + tx_fdm_scaled[i] = FDMDV_SCALE * g_pwr_scale * s; + } } diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index ea1bcc3c..bed6ea2c 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -393,6 +393,7 @@ class MainFrame : public TopFrame // void OnSliderScrollTop( wxScrollEvent& event ); void OnCheckSQClick( wxCommandEvent& event ); void OnCheckSNRClick( wxCommandEvent& event ); + void OnClipEnter( wxCommandEvent& event ); // Toggle Buttons void OnTogBtnSplitClick(wxCommandEvent& event); diff --git a/fdmdv2/src/topFrame.cpp b/fdmdv2/src/topFrame.cpp index 36b03f76..5a74c757 100644 --- a/fdmdv2/src/topFrame.cpp +++ b/fdmdv2/src/topFrame.cpp @@ -278,6 +278,9 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const m_textBER = new wxStaticText(this, wxID_ANY, wxT("BER...: 0.0"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); sbSizer_testFrames->Add(m_textBER, 0, wxALIGN_LEFT, 1); + m_textCtrlClip = new wxTextCtrl(this, wxID_ANY, _("120"), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); + sbSizer_testFrames->Add(m_textCtrlClip, 1, wxALIGN_LEFT, 1); + rightSizer->Add(sbSizer_testFrames,0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3); /* new --- */ @@ -448,6 +451,8 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const m_ckboxSNR->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(TopFrame::OnCheckSNRClick), NULL, this); + m_textCtrlClip->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(TopFrame::OnClipEnter), NULL, this); + m_togBtnOnOff->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnOnOff), NULL, this); m_togBtnSplit->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnSplitClick), NULL, this); m_togBtnAnalog->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnAnalogClick), NULL, this); @@ -497,6 +502,8 @@ TopFrame::~TopFrame() m_sliderSQ->Disconnect(wxEVT_SCROLL_TOP, wxScrollEventHandler(TopFrame::OnSliderScrollTop), NULL, this); m_ckboxSQ->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(TopFrame::OnCheckSQClick), NULL, this); + m_textCtrlClip->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(TopFrame::OnClipEnter), NULL, this); + m_togBtnOnOff->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnOnOff), NULL, this); m_togBtnSplit->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnSplitClick), NULL, this); m_togBtnAnalog->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnAnalogClick), NULL, this); diff --git a/fdmdv2/src/topFrame.h b/fdmdv2/src/topFrame.h index 70b04167..5a4489c0 100644 --- a/fdmdv2/src/topFrame.h +++ b/fdmdv2/src/topFrame.h @@ -97,6 +97,7 @@ class TopFrame : public wxFrame wxStaticText *m_textBits; wxStaticText *m_textErrors; wxStaticText *m_textBER; + wxTextCtrl *m_textCtrlClip; wxRadioButton *m_rbSync; wxRadioButton *m_rb1400old; @@ -136,6 +137,8 @@ class TopFrame : public wxFrame virtual void OnCheckSQClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnCheckSNRClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnClipEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTogBtnLoopRx( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogBtnLoopTx( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogBtnOnOff( wxCommandEvent& event ) { event.Skip(); }