Changeset 8662
- Timestamp:
- 02/05/09 14:54:40 (4 years ago)
- Location:
- ossiedev/branches/ttsou/dist/components/gmsk_demod
- Files:
-
- 2 added
- 3 modified
-
config/acx_pthread.m4 (added)
-
config/ax_boost_thread.m4 (added)
-
configure.ac (modified) (3 diffs)
-
gmsk_demod.cpp (modified) (3 diffs)
-
gmsk_demod.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ossiedev/branches/ttsou/dist/components/gmsk_demod/configure.ac
r8636 r8662 20 20 21 21 AX_BOOST_BASE([1.35]) 22 AX_BOOST_THREAD 22 23 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 23 24 CFLAGS="$CFLAGS $BOOST_CPPFLAGS" … … 28 29 AC_CHECK_HEADERS([standardinterfaces/complexShort.h], [], [AC_MSG_ERROR([cannot find standardInterfaces header files])]) 29 30 31 AC_CHECK_LIB([gnuradio-core], [main], [], [AC_MSG_ERROR([cannot find gnuradio library])],[$BOOST_LDFLAGS $BOOST_THREAD_LIB]) 32 AC_CHECK_HEADERS([gnuradio/gr_count_bits.h], [], [AC_MSG_ERROR([cannot find gnuradio header files])]) 33 30 34 AC_LANG_POP 31 35 … … 33 37 34 38 PKG_CHECK_MODULES(OSSIE, ossie >= 0.6.0,,exit) 35 CXXFLAGS="$CXXFLAGS $OSSIE_CFLAGS "39 CXXFLAGS="$CXXFLAGS $OSSIE_CFLAGS $CPPFLAGS $BOOST_LDFLAGS $BOOST_THREAD_LIB -I/usr/local/include/gnuradio" 36 40 IDL_FLAGS="$OSSIE_CFLAGS" 37 41 AC_SUBST(IDL_FLAGS) -
ossiedev/branches/ttsou/dist/components/gmsk_demod/gmsk_demod.cpp
r8636 r8662 24 24 #include <iostream> 25 25 #include "gmsk_demod.h" 26 #include <gr_clock_recovery_mm_ff.h> 26 27 27 28 gmsk_demod_i::gmsk_demod_i(const char *uuid, omni_condition *condition) : … … 114 115 PortTypes::ShortSequence *i_in(NULL), *q_in(NULL); 115 116 116 std::complex<float> cmplx_prod [i_in_length];117 std::complex<float> cmplx_prod;; 117 118 std::complex<float> cmplx_cur; 118 119 std::complex<float> cmplx_pre; 119 short demod_out[i_in_length]; 120 121 gain = sps * 2 / M_PI; 120 121 unsigned int i_in_len; 122 short i_in_prev = 0; 123 short q_in_prev = 0; 124 125 // 126 // Demod params 127 // 128 unsigned int sps = 4; 129 unsigned int gain = sps * 2 / M_PI; 122 130 float fp_gain = 5000; 123 131 unsigned int pkt_len = 64; 132 133 // 134 // GNU Radio 135 // 136 gr_vector_int ninput_items_required(1); 137 gr_vector_int ninput_items(1); 138 gr_vector_const_void_star input_items; 139 std::vector<bool> input_done; 140 gr_vector_void_star output_items; 141 int noutput_items; 142 143 float omega; 144 float gain_omega; 145 float mu = 0.5; 146 float gain_mu = 0.175; 147 float omega_relative_limit = 0.005; 148 float freq_err = 0.0; 149 150 omega = sps * (1 + freq_err); 151 gain_omega = 0.25 * gain_mu * gain_mu; 152 153 gr_clock_recovery_mm_ff_sptr gr_clock_recovery = 154 gr_make_clock_recovery_mm_ff(omega, gain_omega, mu, gain_mu); 155 156 gr_clock_recovery->forecast(pkt_len, ninput_items_required); 157 158 // 159 // Processing loop 160 // 124 161 while (gmsk_demod->processing_active) { 125 162 gmsk_demod->p_in->getData(i_in, q_in); 163 i_in_len = i_in->length(); 164 unsigned short demod_out[i_in_len]; 126 165 127 166 // … … 129 168 // 130 169 cmplx_cur = std::complex<float>((*i_in)[0], (*q_in)[0]); 131 cmplx_pre = std::complex<float>(i_in_ save, q_in_save);132 cmplx_prod [0]= cmplx_cur * conj(cmplx_pre);133 demod_out[0] = fp_gain * gain * atan( imag(cmplx_prod [0]) / real(cmplx_prod[0]));134 135 for (unsigned int i=1; i<i_in_len gth; i++) {170 cmplx_pre = std::complex<float>(i_in_prev, q_in_prev); 171 cmplx_prod = cmplx_cur * conj(cmplx_pre); 172 demod_out[0] = fp_gain * gain * atan( imag(cmplx_prod) / real(cmplx_prod)); 173 174 for (unsigned int i=1; i<i_in_len; i++) { 136 175 cmplx_cur = std::complex<float>((*i_in)[i], (*q_in)[i]); 137 176 cmplx_pre = std::complex<float>((*i_in)[i-1], (*q_in)[i-1]); 138 cmplx_prod [i]= cmplx_cur * conj(cmplx_pre);139 demod_out[i] = fp_gain * gain * atan( imag(cmplx_prod [i]) / real(cmplx_prod[i]));177 cmplx_prod = cmplx_cur * conj(cmplx_pre); 178 demod_out[i] = fp_gain * gain * atan( imag(cmplx_prod / real(cmplx_prod))); 140 179 } 141 180 142 181 // 143 // Floating point hack 144 // 182 // Type conversion 183 // 184 std::vector<const void*> demod_vec(i_in_len); 185 for (unsigned int i=0; i<i_in_len; i++) { 186 demod_vec[i] = (const void*) &demod_out[i]; 187 } 145 188 146 189 // 147 190 // Timing recovery 148 191 // 192 noutput_items = gr_clock_recovery->general_work(pkt_len, 193 ninput_items, 194 demod_vec, 195 output_items); 149 196 150 197 gmsk_demod->p_in->bufferEmptied(); -
ossiedev/branches/ttsou/dist/components/gmsk_demod/gmsk_demod.h
r8636 r8662 72 72 73 73 // Component specifics 74 unsigned int sps; 75 short i_in_prev; 76 short q_in_prev; 74 //short i_in_prev; 75 //short q_in_prev; 77 76 };