DSPRelated.com
Forums

OFDM receiver on my laptop -- and questions

Started by overkamp November 1, 2006
I am working on a ISDB-T receiver implemented in software on my laptop. I
am only interested in a 1-seg receiver at this point (1-seg is the single
OFDM segment 422-carrier reduced BW part of the Japanese ISDB-T spec). I
have an ADC connected to a Xilinx Spartan 3 FPGA and Cypress USB chip. The
ADC samples the low-IF output of a tuner chip, the FPGA does the I/Q
down-conversion to baseband, and also throttles the FIFOs in the USB chip.


My laptop receives baseband I/Q via USB, and in C code I am implementing
the remainder of the OFDM receiver. So far I have AFC and symbol timing
working (kind of) using the auto-correlation technique. On my laptop I can
view the OFDM spectrum in real-time and see the scattered pilot, AC1, and
TMCC  carriers with thier slightly larger amplitudes (4/3) no problem.

Okay, that's my long-winded intro. Now on to the questions. For simplicity
I am starting with the DBPSK TMCC carriers. Later I will tackle the data
carriers which require coherent demod. But for the life of me, I cannot
get the signal constellations to stand still. I suspect that this may be
due to the AFC "control voltage" to the "local osc" not being low-pass
filtered. But it may also be due to the start-of-symbol timing detection
bobbling around. Can anyone shed some light on details of the AFC loop
control, or point to good articles, and also start-of-symbol timing conrol
info as well. For now I don't mind if the constellations have some tilt, or
if I don't know what point is the zero phase ref for coherent demod. I
would be happy if I could just get the constellations to sit still! Any
info is greatly appreciated! If I am being too vague in any of the above,
I am happy to clarify.

Regards,
Greg






You didnt mention how constellation disbursed.
Based on that I can suggest.

Ravi N

>I am working on a ISDB-T receiver implemented in software on my laptop.
I
>am only interested in a 1-seg receiver at this point (1-seg is the
single
>OFDM segment 422-carrier reduced BW part of the Japanese ISDB-T spec). I >have an ADC connected to a Xilinx Spartan 3 FPGA and Cypress USB chip.
The
>ADC samples the low-IF output of a tuner chip, the FPGA does the I/Q >down-conversion to baseband, and also throttles the FIFOs in the USB
chip.
> > >My laptop receives baseband I/Q via USB, and in C code I am implementing >the remainder of the OFDM receiver. So far I have AFC and symbol timing >working (kind of) using the auto-correlation technique. On my laptop I
can
>view the OFDM spectrum in real-time and see the scattered pilot, AC1,
and
>TMCC carriers with thier slightly larger amplitudes (4/3) no problem. > >Okay, that's my long-winded intro. Now on to the questions. For
simplicity
>I am starting with the DBPSK TMCC carriers. Later I will tackle the data >carriers which require coherent demod. But for the life of me, I cannot >get the signal constellations to stand still. I suspect that this may be >due to the AFC "control voltage" to the "local osc" not being low-pass >filtered. But it may also be due to the start-of-symbol timing detection >bobbling around. Can anyone shed some light on details of the AFC loop >control, or point to good articles, and also start-of-symbol timing
conrol
>info as well. For now I don't mind if the constellations have some tilt,
or
>if I don't know what point is the zero phase ref for coherent demod. I >would be happy if I could just get the constellations to sit still! Any >info is greatly appreciated! If I am being too vague in any of the
above,
>I am happy to clarify. > >Regards, >Greg > > > > > > >
Hi Ravi,

The constellations are rotating. The direction of rotation and rate of
rotation both are not constant. I suspect what I need to do is detect a
zero phase reference, and use that to fix the phase on the fft output. But
I am wondering if this kind of behavior is normal. I have applied low-pass
filtering to both the local oscillator control that does the frequency
offset correction, and also the start-of-symbol timing. These are both
very stable.

Greg

overkamp wrote:
> Hi Ravi, > > The constellations are rotating. The direction of rotation and rate of > rotation both are not constant. I suspect what I need to do is detect a > zero phase reference, and use that to fix the phase on the fft output. But > I am wondering if this kind of behavior is normal. I have applied low-pass > filtering to both the local oscillator control that does the frequency > offset correction, and also the start-of-symbol timing. These are both > very stable. > > Greg >
Have you tried looking at the channel impulse response? It might be worth checking the peak position and variation from symbol to symbol.
>Have you tried looking at the channel impulse response? It might be >worth checking the peak position and variation from symbol to symbol. >
No I have not done that yet, but I know it is something I must do. My vague understanding is that I have to look at the scattered pilots and get their amplitude and phase across frequency, then perhaps interpolate across frequency, then do inverse fft to get the impulse response. Is that correct? The scattered pilots are scattered in both time and frequency. Across time, they appear every fourth symbol. And for different frequencies they don't appear at the same time. This is for the ISDB-TV spec, but other specs are probably similar. I am not sure how I sync up to the scattered pilots. That is, for a particular freq, if a pilot occurs every fourth symbol, how do I isolate it. Must I do some kind of frequency-domain convolution? Suppose that I can get the channel impulse response. Is the peak supposed to be used to adjust the start-of-symbol timing? Greg
overkamp wrote:
>> Have you tried looking at the channel impulse response? It might be >> worth checking the peak position and variation from symbol to symbol. >> > > No I have not done that yet, but I know it is something I must do. My > vague understanding is that I have to look at the scattered pilots and get > their amplitude and phase across frequency, then perhaps interpolate across > frequency, then do inverse fft to get the impulse response. Is that > correct?
Sounds about right. If your signal is good, you can do a basic interpolation to keep complexity down.
> > The scattered pilots are scattered in both time and frequency. Across > time, they appear every fourth symbol. And for different frequencies they > don't appear at the same time. This is for the ISDB-TV spec, but other > specs are probably similar. I am not sure how I sync up to the scattered > pilots. That is, for a particular freq, if a pilot occurs every fourth > symbol, how do I isolate it. Must I do some kind of frequency-domain > convolution?
Correlation. Look at symbols four apart. The scattered pilots are the same, so will stand out. From this you can sync to the repeating pattern of four.
> > Suppose that I can get the channel impulse response. Is the peak supposed > to be used to adjust the start-of-symbol timing? >
Yes, you can use this. How you use it can get a bit complicated though. I assume you are already using sample rate conversion to remove the error between transmitter and receiver sample clocks? Do you have access to good literature on this subject, or already have papers covering this from the web? This part of ISDB-T is pretty much identical to DVB-T, so you can use info for DVB-T. The TMCC is different but you can't do much with this anyway until you can get constellation data reliably. Where is your ISDB-T signal coming from?
Hi nahn. Sorry I got your name wrong two posts back. 

Thanks for the info about the scattered pilot correlation. Initially I
thought I should correlate the scattered pilots to a known, stored
sequence. But from your post, it sounds like I should correlate the
current symbol with the symbol spaced four symbols back in time (or
multiple symbols spaced four apart). Is that right? In the past I have
done time-domain auto-correlation (it is used for the carrier offset
adjustment and start-of-symbol timing), but I have not done a correlation
in the freq domain using real/imag or amp/phase values. Can you say a bit
about how this is done?

I have not done anything about differences in transmitter/receiver sample
clock. From papers I have read, it was mentioned that carrier offset and
symbol timing had far stronger effects than sample clock differences. So
currently I have a fixed ADC clock with no attempt in software to do
sample rate conversion.

All of the literature I am using has been pulled off the web. Most of the
papers are OFDM papers, and not specific to ISDB. The few ISDB-related
papers I have do not go into the OFDM receiver. I do have the ISDB spec as
well. If you have any papers/docs that are favorites, I would be very
interesting in hearing about them.

As for signal source, I am using both a live signal from an antennna, and
also a cheap, used Tektronix RTX100. It is not very flexible compared to
what is out there now, but the price was right.

I have some new results as well. I am able to get stable constellations
using a very simple technique. It will be adequate for decoding the DBPSK
TMCC carriers, but will not work for the coherent QPSK carriers. But at
least it was very cool to see DBPSK constellations that are not rotating.
I took a single TMCC carrier and squared it to removed the modulation. I
use this as a phase ref to do phase correction on the FFT output. Of
course I have no way to tell what phase is zero degrees and what is 180
degrees, but it doesn't matter for the differential BPSK carriers. It does
matter for the QPSK carriers, for which I will need to do the full-blown
phase detection of the scattered pilots.

Greg







overkamp wrote:
> Hi nahn. Sorry I got your name wrong two posts back. > > Thanks for the info about the scattered pilot correlation. Initially I > thought I should correlate the scattered pilots to a known, stored > sequence. But from your post, it sounds like I should correlate the > current symbol with the symbol spaced four symbols back in time (or > multiple symbols spaced four apart). Is that right? In the past I have > done time-domain auto-correlation (it is used for the carrier offset > adjustment and start-of-symbol timing), but I have not done a correlation > in the freq domain using real/imag or amp/phase values. Can you say a bit > about how this is done? >
For each of the four possible positions of the scattered pilot sequences, complex conjugate multiply carriers spaced 12 apart with the same carrier from four symbols earlier, and accumulate the result. Largest magnitude accumulation result tells you which of the four patterns was in use. Stay synced to this sequence and you know which carriers are the scattered pilots in any symbol. This is different from the time-domain auto-correlation, and is only to work out which carriers are the scattered pilots. Then you are able to us them for frequency and sample timing offset estimation. You can also calculate the channel impulse response from the scattered pilots and use this to adjust start-of-symbol timing.
> I have not done anything about differences in transmitter/receiver sample > clock. From papers I have read, it was mentioned that carrier offset and > symbol timing had far stronger effects than sample clock differences. So > currently I have a fixed ADC clock with no attempt in software to do > sample rate conversion.
You might want to look into this a bit more, see references below.
> > All of the literature I am using has been pulled off the web. Most of the > papers are OFDM papers, and not specific to ISDB. The few ISDB-related > papers I have do not go into the OFDM receiver. I do have the ISDB spec as > well. If you have any papers/docs that are favorites, I would be very > interesting in hearing about them. >
A lot of papers reference Speth, Fechtel, Foch, Meyer papers on Optimum receiver design. I don't know if you can get hold of these but if you can they will pretty much cover all the detail you need, apart from ISDB specifics.
> As for signal source, I am using both a live signal from an antennna, and > also a cheap, used Tektronix RTX100. It is not very flexible compared to > what is out there now, but the price was right. > > I have some new results as well. I am able to get stable constellations > using a very simple technique. It will be adequate for decoding the DBPSK > TMCC carriers, but will not work for the coherent QPSK carriers. But at > least it was very cool to see DBPSK constellations that are not rotating. > I took a single TMCC carrier and squared it to removed the modulation. I > use this as a phase ref to do phase correction on the FFT output. Of > course I have no way to tell what phase is zero degrees and what is 180 > degrees, but it doesn't matter for the differential BPSK carriers. It does > matter for the QPSK carriers, for which I will need to do the full-blown > phase detection of the scattered pilots. >
Sounds good. I guess there is not much you can do with TMCC data without doing all the other work but it would be satisfying to at least check the TMCC format is received correctly.
nahn,

It has been a while since I checked the thread, as I got distracted with
other work. Came back and was glad to see your post. Thanks very much for
the valuable info.

Greg