
From:  Ludwig Stephan (CR/AEH4) 
Subject:  Re: [Discussgnuradio] how does Doppler shift increment in flat fading channel GNU radio 
Date:  Tue, 8 Mar 2016 13:16:30 +0000 
Hi Bastian, I thought being a bit more thorough on the SOS method never harms ;) Aah, I got the point: alpha_n depends on theta and theta increases. I mixed it up and thought we were talking about psi and phi. > It does not grow, but change over time. alpha_n depends on theta, which is updated after each sample. Through theta, alpha_n is
> doing a random walk in the interval [ pi; pi] so that the term > > d_fDTs *sin(alpha_n) > > is a random walk through the Doppler spectrum. Just to make it clear (to myself): BUT: alpha_n depends on theta, which in turn does a random walk in the code Bastian, you are right. In all the papers theta is a randomly chosen constant. And it should remain constant – at least for a certain
time. After some time, the difference between actual process and intended process might run away such that a reinitialization might be appropriate. In this case you have to do something, which keeps the samples of previous calls continuous with the call using
new parameters. By alternating the sign of the random variable, someone is trying to keep theta “in lanes”. Maybe the random walk of theta is an (I think inappropriate, because it does not work, because all other parameters get changed independently) way of
achieving this. In fact, the code should not use update_theta for every new output sample, because I fear that this makes successive samples noncontinuous
– and your iPython notebook backs this. And theta should not saturate at +/ pi, either. I do not have a clue, where the step size is taken from. It is definitely not Table II
in the Zajic/Stüber paper.
> "Efficient Simulation of Rayleigh Fading with Enhanced DeCorrelation Properties” by Alenka G. Zajic and Gordon L. Stüber > the authors refer to the paper, stating that: Ahh, that is a very good reference. Actually I was searching for that in my literature database but did not find it again. > "To improve on previously reported models, Zheng and Xiao proposed several new statistical models [14][16]. By allowing all
> three parameter sets (amplitudes, phases, and Doppler frequencies) to be random variables, Zheng and Xiao’s models obtain
> statistical properties similar to ones required by the reference model. However, the models are no longer ergodic." > > To me it looks like the model was _fixed_ by introducing this random walk that is supposed to make the model
>
again. I guess this follows some paper or book since the code mentions a table > d_step( powf(0.00125*fDTs, 1.1) ), // max step size approximated from Table 2 No, the model of Zajic/Stüber is ergodic. But yes, they fixed the previous model by choosing the parameters randomly – but constant over time and not updating for
every sample. And Table II does definitely not refer to the one in their paper. I try to summarize all the efforts ·
Use sin and cos in the factors for getting (almost) uncorrelated I and Q shares of the complex random variable ·
Introduce a random phase (but constant) argument into every cos(f_D*t) term in order to make the system WSS ·
In order to make the signals ergodic (ever draw of parameters has the equal statistics, which also yield uncorrelated processes) let sin(f_D*t) and cos(f_D*t)
have different random (but constant) phases, but thake the cos/sin factors from identical angles of arrival ·
MEDS method produces WSS process of intended autocorrelation function, but introduces correlation between different random process. ·
The Zheng/Xiao model combines all previous advantages: still constant but different phases ·
The Zajic/Stüber model combines all previosu advantages, especially it has a random but constant phase (> WSS), is ergodic, has uncorrelated I/Q and uncorrelated
processes, while converging faster (requires smaller N). => In conclusion and because nobody remembers why this code was written like that, I vote for adapting the model to Zajic/Stüber by removing the update_theta function
and their call (and then unused variables like d_step). Their implementation is one of the bestknown ones. Best regards

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