DSPRelated.com
Forums

Choice of Oversampling Ratio in Comm Simulations

Started by Randy Yates April 1, 2006
Hi Folks,

When we simulate a communication system, say, QPSK with simple AWGN,
I've noticed that a high sample rate (N*Fsym Fsymthe symbol rate) is 
used. Typically it seems N=8. Why is this done?
-- 
%  Randy Yates                  % "She's sweet on Wagner-I think she'd die for Beethoven.
%% Fuquay-Varina, NC            %  She love the way Puccini lays down a tune, and
%%% 919-577-9882                %  Verdi's always creepin' from her room." 
%%%% <yates@ieee.org>           % "Rockaria", *A New World Record*, ELO   
http://home.earthlink.net/~yatescr
I usually oversample by 4 just so I don't have to do any baud tracking. In
my simulations I just take the sum of the magnutide of the four phases and
then use the largest as the resampling phase for everything else, i.e.

for i=1:4
 baud_phases(i) = sum(abs(xin(i:4:end)));
end
[y, best_phase] = max(baud_phases);

symbols = xin(best_phase:4:end)

The alternative is to run the signal through a non-linearity, pick out the
baud line, and track the sample phase with a PLL tied to the baud line. But
since the loop takes a while to converge you either have to run it through
the data twice or throw away the first portion of the simulation result.

-Clark

"Randy Yates" <yates@ieee.org> wrote in message
news:m3mzf5tp28.fsf@ieee.org...
> Hi Folks, > > When we simulate a communication system, say, QPSK with simple AWGN, > I've noticed that a high sample rate (N*Fsym Fsymthe symbol rate) is > used. Typically it seems N=8. Why is this done? > -- > % Randy Yates % "She's sweet on Wagner-I think she'd die
for Beethoven.
> %% Fuquay-Varina, NC % She love the way Puccini lays down a
tune, and
> %%% 919-577-9882 % Verdi's always creepin' from her room." > %%%% <yates@ieee.org> % "Rockaria", *A New World Record*, ELO > http://home.earthlink.net/~yatescr
Anonymous wrote:
> I usually oversample by 4 just so I don't have to do any baud tracking. In > my simulations I just take the sum of the magnutide of the four phases and > then use the largest as the resampling phase for everything else, i.e. > > for i=1:4 > baud_phases(i) = sum(abs(xin(i:4:end))); > end > [y, best_phase] = max(baud_phases); > > symbols = xin(best_phase:4:end) > > The alternative is to run the signal through a non-linearity, pick out the > baud line, and track the sample phase with a PLL tied to the baud line. But > since the loop takes a while to converge you either have to run it through > the data twice or throw away the first portion of the simulation result. > > -Clark >
An enhancement to this is to run a leaky integrator or boxcar on all the baud phases over time, and choose the highest smoothed baud phase. That performs better in low Eb/No situations. John
Thanks john and Anonymous. So the main reason is to aid in symbol timing? 

By the way, if you are not oversampled and you do a nonlinearity (e.g.,
absolute value) as part of finding the baud line, then don't you run the
risk of reflecting the nonlinearity spurs back into the baseband? In 
other words, even if we don't oversample the main data stream, don't
we need to oversample the nonlinearity function to avoid this?

--Randy


"john" <johns@xetron.com> writes:

> Anonymous wrote: >> I usually oversample by 4 just so I don't have to do any baud tracking. In >> my simulations I just take the sum of the magnutide of the four phases and >> then use the largest as the resampling phase for everything else, i.e. >> >> for i=1:4 >> baud_phases(i) = sum(abs(xin(i:4:end))); >> end >> [y, best_phase] = max(baud_phases); >> >> symbols = xin(best_phase:4:end) >> >> The alternative is to run the signal through a non-linearity, pick out the >> baud line, and track the sample phase with a PLL tied to the baud line. But >> since the loop takes a while to converge you either have to run it through >> the data twice or throw away the first portion of the simulation result. >> >> -Clark >> > > An enhancement to this is to run a leaky integrator or boxcar on all > the baud phases over time, and choose the highest smoothed baud phase. > That performs better in low Eb/No situations. > > John >
-- % Randy Yates % "Watching all the days go by... %% Fuquay-Varina, NC % Who are you and who am I?" %%% 919-577-9882 % 'Mission (A World Record)', %%%% <yates@ieee.org> % *A New World Record*, ELO http://home.earthlink.net/~yatescr
"Anonymous" <someone@microsoft.com> writes:

> I usually oversample by 4 just so I don't have to do any baud tracking. In > my simulations I just take the sum of the magnutide of the four phases and > then use the largest as the resampling phase for everything else, i.e. > > for i=1:4 > baud_phases(i) = sum(abs(xin(i:4:end))); > end > [y, best_phase] = max(baud_phases); > > symbols = xin(best_phase:4:end) > > The alternative is to run the signal through a non-linearity, pick out the > baud line, and track the sample phase with a PLL tied to the baud line. But > since the loop takes a while to converge you either have to run it through > the data twice or throw away the first portion of the simulation result. > > -Clark
What if the ideal baud timing lies between samples? -- % Randy Yates % "Rollin' and riding and slippin' and %% Fuquay-Varina, NC % sliding, it's magic." %%% 919-577-9882 % %%%% <yates@ieee.org> % 'Living' Thing', *A New World Record*, ELO http://home.earthlink.net/~yatescr
Randy Yates wrote:
> "Anonymous" <someone@microsoft.com> writes: > > >>I usually oversample by 4 just so I don't have to do any baud tracking. In >>my simulations I just take the sum of the magnutide of the four phases and >>then use the largest as the resampling phase for everything else, i.e. >> >>for i=1:4 >> baud_phases(i) = sum(abs(xin(i:4:end))); >>end >>[y, best_phase] = max(baud_phases); >> >>symbols = xin(best_phase:4:end) >> >>The alternative is to run the signal through a non-linearity, pick out the >>baud line, and track the sample phase with a PLL tied to the baud line. But >>since the loop takes a while to converge you either have to run it through >>the data twice or throw away the first portion of the simulation result. >> >>-Clark > > > What if the ideal baud timing lies between samples?
Just a guess, but I think that's the whole point. If you're oversampled by enough, the ideal time can't be too far from a sample. Jerry -- Engineering is the art of making what you want from things you can get. &#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;
Sort of. Most baud tracking loops work on data that is 2x the baud rate. You
need the symbol peaks and the transition points to make it work. If you
sketch a bpsk signal, for example, sample it a 2 times per symbol, take the
absolute value,  it's easy to see that optimal alignment is when you
maximize the amplitude of the resulting signal that "looks like" a sinusoid
at Pi.

"Randy Yates" <yates@ieee.org> wrote in message
news:m3hd5dtlbp.fsf@ieee.org...
> Thanks john and Anonymous. So the main reason is to aid in symbol timing? > > By the way, if you are not oversampled and you do a nonlinearity (e.g., > absolute value) as part of finding the baud line, then don't you run the > risk of reflecting the nonlinearity spurs back into the baseband? In > other words, even if we don't oversample the main data stream, don't > we need to oversample the nonlinearity function to avoid this? > > --Randy > > > "john" <johns@xetron.com> writes: > > > Anonymous wrote: > >> I usually oversample by 4 just so I don't have to do any baud tracking.
In
> >> my simulations I just take the sum of the magnutide of the four phases
and
> >> then use the largest as the resampling phase for everything else, i.e. > >> > >> for i=1:4 > >> baud_phases(i) = sum(abs(xin(i:4:end))); > >> end > >> [y, best_phase] = max(baud_phases); > >> > >> symbols = xin(best_phase:4:end) > >> > >> The alternative is to run the signal through a non-linearity, pick out
the
> >> baud line, and track the sample phase with a PLL tied to the baud line.
But
> >> since the loop takes a while to converge you either have to run it
through
> >> the data twice or throw away the first portion of the simulation
result.
> >> > >> -Clark > >> > > > > An enhancement to this is to run a leaky integrator or boxcar on all > > the baud phases over time, and choose the highest smoothed baud phase. > > That performs better in low Eb/No situations. > > > > John > > > > -- > % Randy Yates % "Watching all the days go by... > %% Fuquay-Varina, NC % Who are you and who am I?" > %%% 919-577-9882 % 'Mission (A World Record)', > %%%% <yates@ieee.org> % *A New World Record*, ELO > http://home.earthlink.net/~yatescr
"Randy Yates" <yates@ieee.org> wrote in message
news:m3acb5tl7l.fsf@ieee.org...
> "Anonymous" <someone@microsoft.com> writes: > > > I usually oversample by 4 just so I don't have to do any baud tracking.
In
> > my simulations I just take the sum of the magnutide of the four phases
and
> > then use the largest as the resampling phase for everything else, i.e. > > > > for i=1:4 > > baud_phases(i) = sum(abs(xin(i:4:end))); > > end > > [y, best_phase] = max(baud_phases); > > > > symbols = xin(best_phase:4:end) > > > > The alternative is to run the signal through a non-linearity, pick out
the
> > baud line, and track the sample phase with a PLL tied to the baud line.
But
> > since the loop takes a while to converge you either have to run it
through
> > the data twice or throw away the first portion of the simulation result. > > > > -Clark > > What if the ideal baud timing lies between samples? > -- > % Randy Yates % "Rollin' and riding and slippin' and > %% Fuquay-Varina, NC % sliding, it's magic." > %%% 919-577-9882 % > %%%% <yates@ieee.org> % 'Living' Thing', *A New World Record*,
ELO
> http://home.earthlink.net/~yatescr
Yes, this is only coarse accuracy. You can be off by as much as +/-.125 a symbol period but its usually good enough especially if you follow it with an equalizer. -Clark
Jerry Avins <jya@ieee.org> writes:

> Randy Yates wrote: >> "Anonymous" <someone@microsoft.com> writes: >> >>>I usually oversample by 4 just so I don't have to do any baud tracking. In >>>my simulations I just take the sum of the magnutide of the four phases and >>>then use the largest as the resampling phase for everything else, i.e. >>> >>>for i=1:4 >>> baud_phases(i) = sum(abs(xin(i:4:end))); >>>end >>>[y, best_phase] = max(baud_phases); >>> >>>symbols = xin(best_phase:4:end) >>> >>>The alternative is to run the signal through a non-linearity, pick out the >>>baud line, and track the sample phase with a PLL tied to the baud line. But >>>since the loop takes a while to converge you either have to run it through >>>the data twice or throw away the first portion of the simulation result. >>> >>>-Clark >> What if the ideal baud timing lies between samples? > > Just a guess, but I think that's the whole point. If you're > oversampled by enough, the ideal time can't be too far from a sample.
Maybe. I'm just thinking through this for the first time (obviously). What I don't understand is, presuming the timing doesn't change throughout the sequence, why don't we just find the timing once at the beginning and then shift it to the proper sampling points at the baseband rate using an all-pass filter? Then instead of running the entire simulation at N times the symbol rate, you just run a small timing recovery piece at the beginning. Seems like it'd save oodles of simulation time. -- % Randy Yates % "Watching all the days go by... %% Fuquay-Varina, NC % Who are you and who am I?" %%% 919-577-9882 % 'Mission (A World Record)', %%%% <yates@ieee.org> % *A New World Record*, ELO http://home.earthlink.net/~yatescr
Randy Yates wrote:
> Jerry Avins <jya@ieee.org> writes: > > >>Randy Yates wrote:
...
>>>What if the ideal baud timing lies between samples? >> >>Just a guess, but I think that's the whole point. If you're >>oversampled by enough, the ideal time can't be too far from a sample. > > > Maybe. I'm just thinking through this for the first time (obviously). > > What I don't understand is, presuming the timing doesn't change throughout > the sequence, why don't we just find the timing once at the beginning and > then shift it to the proper sampling points at the baseband rate using > an all-pass filter? Then instead of running the entire simulation at N times > the symbol rate, you just run a small timing recovery piece at the beginning. > Seems like it'd save oodles of simulation time.
Not knowing the details, I can't answer intelligently. Maybe the final system is to run oversampled, and the simulation reflects reality. Jerry -- Engineering is the art of making what you want from things you can get. &#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;