tx and rx click tune, tied together (non split)
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 21 Nov 2012 05:31:22 +0000 (05:31 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 21 Nov 2012 05:31:22 +0000 (05:31 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1043 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/src/fdmdv2_main.cpp
fdmdv2/src/fdmdv2_plot_spectrum.cpp
fdmdv2/src/fdmdv2_plot_spectrum.h
fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp
fdmdv2/src/fdmdv2_plot_waterfall_linux.h

index 7a8139f27410d1d5c26f21b1f81d0dd0e4f200e8..2791bd043ee7f6d43e478602d4cf02faa41dcba6 100644 (file)
@@ -77,10 +77,13 @@ unsigned int        g_recFromRadioSamples;
 int                 g_recFileFromRadioEventId;
 wxWindow           *g_parent;
 
-// Click to tune rx frequency offset states
+// Click to tune rx and tx frequency offset states
 float               g_RxFreqOffsetHz;
 COMP                g_RxFreqOffsetPhaseRect;
 COMP                g_RxFreqOffsetFreqRect;
+float               g_TxFreqOffsetHz;
+COMP                g_TxFreqOffsetPhaseRect;
+COMP                g_TxFreqOffsetFreqRect;
 
 // DRs debug variables, will be cleaned up eventually
 int cb_cnt, cb1, cb2;
@@ -349,6 +352,12 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent)
     g_RxFreqOffsetFreqRect.imag = sin(g_RxFreqOffsetHz);
     g_RxFreqOffsetPhaseRect.real = cos(0.0);
     g_RxFreqOffsetPhaseRect.imag = sin(0.0);
+
+    g_TxFreqOffsetHz = 0.0;
+    g_TxFreqOffsetFreqRect.real = cos(g_TxFreqOffsetHz);
+    g_TxFreqOffsetFreqRect.imag = sin(g_TxFreqOffsetHz);
+    g_TxFreqOffsetPhaseRect.real = cos(0.0);
+    g_TxFreqOffsetPhaseRect.imag = sin(0.0);
         
 }
 
@@ -2062,6 +2071,7 @@ void per_frame_tx_processing(
     unsigned char  packed_bits[BYTES_PER_CODEC_FRAME];
     int            bits[BITS_PER_CODEC_FRAME];
     COMP           tx_fdm[2*FDMDV_NOM_SAMPLES_PER_FRAME];
+    COMP           tx_fdm_offset[2*FDMDV_NOM_SAMPLES_PER_FRAME];
     int            sync_bit;
     int            i, bit, byte;
 
@@ -2088,10 +2098,12 @@ void per_frame_tx_processing(
     fdmdv_mod(g_pFDMDV, &tx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME], &bits[FDMDV_BITS_PER_FRAME], &sync_bit);
     assert(sync_bit == 0);
 
+    fdmdv_freq_shift(tx_fdm_offset, tx_fdm, g_TxFreqOffsetHz, &g_TxFreqOffsetPhaseRect, &g_TxFreqOffsetFreqRect, 2*FDMDV_NOM_SAMPLES_PER_FRAME);
+
     /* scale and convert shorts */
 
     for(i=0; i<2*FDMDV_NOM_SAMPLES_PER_FRAME; i++)
-    tx_fdm_scaled[i] = FDMDV_SCALE * tx_fdm[i].real;
+        tx_fdm_scaled[i] = FDMDV_SCALE * tx_fdm_offset[i].real;
 
 }
 
index 4103ba034f05b2b02609c7e36dbf3f229441f7a1..c2bfd0c729a0a191d054f4e99249279e0f8241bc 100644 (file)
@@ -220,6 +220,8 @@ void PlotSpectrum::OnMouseDown(wxMouseEvent& event)
         float clickFreq = (float)pt.x/freq_hz_to_px;
 
         // see PlotWaterfall::OnMouseDown()
+
         g_RxFreqOffsetHz = FDMDV_FCENTRE - clickFreq;
+        g_TxFreqOffsetHz = clickFreq - FDMDV_FCENTRE;
     }
 }
index 6a037636883f5dc7ee590b0fd4ff02b689fc9c0e..bd173301e9da3fe4db16643eb0f3a67102357f0e 100644 (file)
@@ -46,5 +46,7 @@ class PlotSpectrum : public PlotPanel
         DECLARE_EVENT_TABLE()
 };
 
+extern float g_RxFreqOffsetHz;
+extern float g_TxFreqOffsetHz;
 
 #endif //__FDMDV2_PLOT_SPECTRUM__
index 421d3778389189e8fd96e7780c7f627bc1be87c1..9bd4e2b7ab38260263c0d388b81a7a743e8abedb 100644 (file)
@@ -386,5 +386,6 @@ void PlotWaterfall::OnMouseDown(wxMouseEvent& event)
         // to the tx/rx thread
 
         g_RxFreqOffsetHz = FDMDV_FCENTRE - clickFreq;
+        g_TxFreqOffsetHz = clickFreq - FDMDV_FCENTRE;
     }
 }
index ad7c2614c69654ad1b0e493fc38488a5ae7623f3..32af9220a0f9fd437859a130a1c93b0ec6278af9 100644 (file)
@@ -59,5 +59,6 @@ class PlotWaterfall : public PlotPanel
 };
 
 extern float g_RxFreqOffsetHz;
+extern float g_TxFreqOffsetHz;
 
 #endif //__FDMDV2_PLOT_WATERFALL__