On 10/18/07, Johnathan Corgan <[EMAIL PROTECTED]> wrote: > One approach then would be to ensure this never happens, i.e., add a > small epsilon to each input stream, and make epsilon small enough to not > sufficiently impact the results for "typical" input values. Normalizing > the conjugate product will then give you the cosine as the real value, > as you mentioned. Or, you could just divide the abs value into the real > value of the product, and avoid the extra calculation of the normed > imaginary part which you are going to throw away.
Thanks for the replies guys. The above is the approach I went with. It seems to work well, and gave a further BER improvement to my GMSK demod experiments. For those interested, here is how I'm using it in the context of GMSK demod: self.kc = gr.kludge_copy(gr.sizeof_gr_complex) self.delay = gr.delay(gr.sizeof_gr_complex, 2*self._samples_per_symbol) #2T delay self.conj = gr.conjugate_cc() self.mult = gr.multiply_cc() self.c2mag = gr.complex_to_mag() self.safety_add = gr.add_const_ff(0.0000001) self.c2f = gr.complex_to_float() self.rescaler = gr.divide_ff() self.sub = gr.add_const_ff(-self._decision_threshold) samp_per_sec = samples_per_symbol * sym_per_sec pre_cr_filt_bw = sym_per_sec*pre_cr_filt_bt pre_cr_filt_taps = gr.firdes.low_pass(1.0, samp_per_sec, pre_cr_filt_bw, pre_cr_filt_tr*samp_per_sec, gr.firdes.WIN_HAMMING) self.pre_cr_filt = gr.fir_filter_fff(1, pre_cr_filt_taps) # the clock recovery block tracks the symbol clock and resamples as needed. # the output of the block is a stream of soft symbols (float) self.clock_recovery = gr.clock_recovery_mm_ff(self._omega, self._gain_omega, self._mu, self._gain_mu, self._omega_relative_limit) # slice the floats at 0, outputting 1 bit (the LSB of the output byte) per sample self.slicer = gr.binary_slicer_fb() [...] # Connect & Initialize base class self.connect(self, self.kc, self.delay, self.conj, (self.mult, 0)) self.connect(self.kc, (self.mult, 1)) self.connect(self.mult, self.c2f, (self.rescaler, 0)) self.connect(self.mult, self.c2mag, self.safety_add, (self.rescaler, 1)) self.connect(self.rescaler, self.pre_cr_filt, self.sub, self.clock_recovery, self.slicer, self)
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org http://lists.gnu.org/mailman/listinfo/discuss-gnuradio