support for clipping of tx waveform
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 9 Mar 2013 04:00:48 +0000 (04:00 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 9 Mar 2013 04:00:48 +0000 (04:00 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1205 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/src/fdmdv2_main.cpp
fdmdv2/src/fdmdv2_main.h
fdmdv2/src/topFrame.cpp
fdmdv2/src/topFrame.h

index 34aebb195ff81a024d423fd466fef3183895df33..af9b6bd60509249d15e8964bb680f44622892427 100644 (file)
@@ -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;
+    }
 
 }
 
index ea1bcc3c645a7dfcfe9e14548911f1dd2c054887..bed6ea2ceb0fda5c2b6478a65dd8965d7ef2f086 100644 (file)
@@ -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);
index 36b03f761c11a872771eeb70ba6e92f3d9fd5394..5a74c757dff701f215e45ac50289225b2558b6af 100644 (file)
@@ -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);
index 70b04167badd3e127f72e18f7de0b0777927858c..5a4489c07939af1b9f5cc25d113e4bf100837abc 100644 (file)
@@ -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(); }