Hello, I am trying to use the gr.clock_recovery_mm_cc (float omega, float gain_omega, float mu, float gain_mu). What do I set for the omega, gain_omega, mu, and gain_mu? There is also a version of this function with 5 parameters. Also, what should be the number of samples per bit going into this gr.clock_recovery_mm_ff() or how much oversampling per bit should be used as the input? Thanks, George Barrinuevo george_barr@yahoo.com

on 2007-03-24 07:41

on 2007-03-25 19:46

On Fri, Mar 23, 2007 at 11:40:39PM -0700, George Barrinuevo wrote: > Hello, > > I am trying to use the gr.clock_recovery_mm_cc (float > omega, float gain_omega, float mu, float gain_mu). > What do I set for the omega, gain_omega, mu, and > gain_mu? There is also a version of this function > with 5 parameters. For a shoot-from-the-hip introduction, take a look at some of the places in the Python code where these blocks are instantiated. Without a good understanding of the algorithm, trying to explain these is tough. I suggest starting with these books and papers: /*! * \brief Mueller and Müller (M&M) based clock recovery block with complex input, complex output. * \ingroup block * * This implements the Mueller and Müller (M&M) discrete-time error-tracking synchronizer. * * See "Digital Communication Receivers: Synchronization, Channel * Estimation and Signal Processing" by Heinrich Meyr, Marc Moeneclaey, & Stefan Fechtel. * ISBN 0-471-50275-8. */ /* Modified Mueller and Muller clock recovery circuit Based: G. R. Danesfahani, T.G. Jeans, "Optimisation of modified Mueller and Muller algorithm," Electronics Letters, Vol. 31, no. 13, 22 June 1995, pp. 1032 - 1033. */ > Also, what should be the number of samples per bit > going into this gr.clock_recovery_mm_ff() or how much > oversampling per bit should be used as the input? About 2 samples per symbol should be fine. Also, because of the constraints given by the filters implemented within gri_mmse_fir_interpolator_cc, the input signal must contain no significant energy above Fs/4, where Fs is the sampling rate. Note that this restriction is twice as tight as the Nyquist criterion. Eric

on 2007-03-25 20:49

Whoops, I realized I sent this straight to George yesterday and not the list. > > with 5 parameters. > input, complex output. > > > Also, what should be the number of samples per bit > > going into this gr.clock_recovery_mm_ff() or how much > > oversampling per bit should be used as the input? > > About 2 samples per symbol should be fine. > > Also, because of the constraints given by the filters implemented > within gri_mmse_fir_interpolator_cc, the input signal must contain no > significant energy above Fs/4, where Fs is the sampling rate. Note > that this restriction is twice as tight as the Nyquist criterion. The number of samples per symbol can be anything (within reason), and the M&M algorithm requires a minimum of 2. The value of omega should default to the number of samples per symbol; this value determines the sampling period in the M&M loop. The gain_omega is used to adjust omega, but this should be very small since you don't want too much variation around it (we have set this value as 0.25*gain_mu^2). The value of mu is related to the adjustment of the sampling due to the error signal, and it could default to anything. Between 0 and 1 is good. The gain_mu is probably the most important value for the loops response. This is the correction factor based on the timing difference between symbols. If you look in the DQPKS or DBPSK demodulators in the code (src/python/gnuradio/blksimpl), you'll see how these are set. Somewhere between 0.05 and 0.15. Tom