[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] M&M clock recovery for async digital signal

From: Tomaž Šolc
Subject: Re: [Discuss-gnuradio] M&M clock recovery for async digital signal
Date: Mon, 02 Mar 2015 12:01:06 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.4.0


I've been trying to further debug the problem I'm having with the M&M
clock recovery block. It seems to me that the core of the problem is
that the interpolation between samples isn't working correctly.

Current code does that with a "mmse_fir_interpolator_ff" block. However,
if I test it with the following: (based on what
clock_recovery_mm_ff_impl.cc does)

        printf("in[ii+0] = %f\n", in[ii]);
        float mu;
        for(mu = 0.; mu < 1.; mu += 0.1) {
                float out_ = d_interp->interpolate(&in[ii], mu);
                printf("mu=%f out=%f\n", mu, out_);
        printf("in[ii+1] = %f\n", in[ii+1]);

I get something like this:

in[ii+0] = -1.000000
mu=0.000000 out=-0.223138
mu=0.100000 out=-0.178490
mu=0.200000 out=-0.133470
mu=0.300000 out=-0.091666
mu=0.400000 out=-0.046198
mu=0.500000 out=-0.000634
mu=0.600000 out=0.044932
mu=0.700000 out=0.090404
mu=0.800000 out=0.132214
mu=0.900000 out=0.177242
in[ii+1] = -0.901245

I would expect that "out" values would be (roughly) between the two
"in", but as far as I can see, the output values don't have any relation
to the input. This obviously breaks the algorithm.

If I replace the d_interp->interpolate() call with a simple linear
interpolation between in[ii] and in[ii+1], the clock recovery block
actually works correctly. Given correct gains it locks on the sine wave
in the test from my previous mail.

So, my question now is, can someone confirm that this is in fact a bug?
The outputs above have been produced on a fresh build of v3.7.5.1
(Debian Wheezy, x86_64).


reply via email to

[Prev in Thread] Current Thread [Next in Thread]