struct FDMDV *g_pFDMDV;
struct FDMDV_STATS g_stats;
float g_pwr_scale;
+int g_clip;
// test Frames
int g_testFrames;
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()
//-------------------------------------------------------------------------
// 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,
/* 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;
+ }
}
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 --- */
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);
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);
wxStaticText *m_textBits;
wxStaticText *m_textErrors;
wxStaticText *m_textBER;
+ wxTextCtrl *m_textCtrlClip;
wxRadioButton *m_rbSync;
wxRadioButton *m_rb1400old;
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(); }