DSPRelated.com
Forums

SDR - Demodulation of DVB-C

Started by Vieriksson March 27, 2013
Hi,

I am having some issues with the IQ-demodulation of a DVB-C signal. Even
though it works fine on synthesized data, I can't get the timing recovery
to work on real data. Can anybody tell me what I am doing wrong or where
the problem is most likely to occur?


Transmitter: 
Transmits symbols at 4.5 Msymbols/s with a certain carrier frequency and
modulates it with QAM-16.


Receiver: 
Samples the received signal at 9 Msamples/s -> 2 IQ-samples/symbol at the
same carrier frequency as in the transmitter. IQ-bandwidth 8 MHz.AGC and
low-pass filtering performed in the receiver.


Software Defined Radio: 
Samples -> Up-sampling to 8 samples/symbol (because I am currently using
linear interpolation in the timing recovery). -> SRRC Receiver filter with
a roll-off of 0.15 (according to DVB-C standard) -> Timing Recovery ->
Carrier Recovery (Decision-directed) -> Equalizer (CMA or MMA).


Timing Recovery - Modified  Gardner:
Read 8 samples -> linear interpolation using the previously calculated
timing error to get the correct symbol -> use current, last and mid-symbol
to calculate new timing error.
Uses classic loop filter with an integral path and a proportional path.


TED: error = real( (last_sample - current_sample) * conj(mid_sample -
B*(last_sample + current_sample))). Where B is a constant that helps me
with the problem that for M-QAM, there are not always a zero-crossing.
I have also tried the regular Gardner TED.


This works fine for synthesized QAM-16 data:
QAM-16 data -> Transmitter SRRC-filter with roll-off 0.15 -> Channel (SNR
20) -> Rotation (carrier and phase offset) -> Variable Delay -> Receiver
SRRC-filter -> Timing Recovery -> Carrier Recovery -> Equalizer -> Proper
constellation diagram.



Thank you for your time.


Viktor.









>Hi, > >I am having some issues with the IQ-demodulation of a DVB-C signal. Even >though it works fine on synthesized data, I can't get the timing recovery >to work on real data. Can anybody tell me what I am doing wrong or where >the problem is most likely to occur? > > >Transmitter: >Transmits symbols at 4.5 Msymbols/s with a certain carrier frequency and >modulates it with QAM-16. > > >Receiver: >Samples the received signal at 9 Msamples/s -> 2 IQ-samples/symbol at the >same carrier frequency as in the transmitter. IQ-bandwidth 8 MHz.AGC and >low-pass filtering performed in the receiver. > > >Software Defined Radio: >Samples -> Up-sampling to 8 samples/symbol (because I am currently using >linear interpolation in the timing recovery). -> SRRC Receiver filter
with
>a roll-off of 0.15 (according to DVB-C standard) -> Timing Recovery -> >Carrier Recovery (Decision-directed) -> Equalizer (CMA or MMA). > > >Timing Recovery - Modified Gardner: >Read 8 samples -> linear interpolation using the previously calculated >timing error to get the correct symbol -> use current, last and
mid-symbol
>to calculate new timing error. >Uses classic loop filter with an integral path and a proportional path. > > >TED: error = real( (last_sample - current_sample) * conj(mid_sample - >B*(last_sample + current_sample))). Where B is a constant that helps me >with the problem that for M-QAM, there are not always a zero-crossing. >I have also tried the regular Gardner TED. > > >This works fine for synthesized QAM-16 data: >QAM-16 data -> Transmitter SRRC-filter with roll-off 0.15 -> Channel (SNR >20) -> Rotation (carrier and phase offset) -> Variable Delay -> Receiver >SRRC-filter -> Timing Recovery -> Carrier Recovery -> Equalizer -> Proper >constellation diagram. > > > >Thank you for your time. > > >Viktor. > > > > > > > > > >
Viktor, The first thing I'd recommend is that you bag the linear interpolation and use a polyphase resampling filter to synchronize your samples with the received symbols at 2x the symbol rate. Linear interpolation is a hack that's used by people that don't understand resampling. A polyphase resampler can be controlled by your PLL easily. Additionally you can roll any type of filtering into it such as matched filtering and get resampling and filtering all in one efficient structure - and no need to jack up the sample rate higher than necessary, and no need to use some funcky sample rate to capture your signal either, just sample at the Nyquist rate, whatever that happens to be for the given bandwidth. The standard Garder TED should work and there's no need to hack it up, you just need to decide how all your references are to be recovered. For example you can jointly recover timing and carrier, in which case a decision directed TED might work. However if you recover timing first with no knowledge of carrier or channel, then you must use an NDA TED and Gardner can be put in this form. When using equalization, this might be the way to go. So there is no hard core answer here. -Doug
Hi Doug,

Thanks for the answer. 

Let us say that I am reading 10,000 IQ-samples (2 IQ-samples per symbol).

Now I am using a receiver root raised cosine matched filter:

fdesign.pulseshaping(2, 'Square Root Raised Cosine', 'Ast, Beta', 43,
0.15)

I filter (the filter length is about 600) all of the 10,000 samples at the
same time and then apply my timing recovery.


This is wrong? Should I apply the matched filtering (SRRC-filter) in
combination with the polyphase resampling filtering inside the timing
recovery PLL? How would that scheme look like?

Thanks again.

Regards,
Viktor


On 3/27/2013 5:42 AM, Vieriksson wrote:
> Hi, > > I am having some issues with the IQ-demodulation of a DVB-C signal. Even > though it works fine on synthesized data, I can't get the timing recovery > to work on real data. Can anybody tell me what I am doing wrong or where > the problem is most likely to occur?
If it works on synthesized data, then it should work with real data. Does your synthesized data include frequency and timing offsets, distortion and noise? Vladimir Vassilevsky DSP and Mixed Signal Designs www.abvolt.com
Hi Vladimir,

Thank you for your reply, always nice to get some input from a well known
name.

The synthesized data is put through an AWGN channel with SNR 20dB. Then I
add frequency and phase offsets by multiplying the signal with
e^(i*(2*pi*freq_offset*t + phase_offset)) where t is increased with the
sample time. Finally a delay is added by stepping the data through a delay
channel with variable delay that is increasing or decreasing with time.

Regards,
Viktor
On 3/27/2013 9:10 AM, Vieriksson wrote:

> The synthesized data is put through an AWGN channel with SNR 20dB. Then I > add frequency and phase offsets by multiplying the signal with > e^(i*(2*pi*freq_offset*t + phase_offset)) where t is increased with the > sample time. Finally a delay is added by stepping the data through a delay > channel with variable delay that is increasing or decreasing with time.
If demodulator works on simulated data, and doesn't work on real data, then something is not adequate in simulation. You are modeling timing rate mismatch by variable delay line. But, the delay can't be increasing or decreasing forever. How are you dealing with this? I'd synthesize the simulation signal analytically for every sample of the receiver. That would allow me keeping independent time scales. Vladimir Vassilevsky DSP and Mixed Signal Designs www.abvolt.com
>Hi Doug, > >Thanks for the answer. > >Let us say that I am reading 10,000 IQ-samples (2 IQ-samples per symbol). > >Now I am using a receiver root raised cosine matched filter: > >fdesign.pulseshaping(2, 'Square Root Raised Cosine', 'Ast, Beta', 43, >0.15) > >I filter (the filter length is about 600) all of the 10,000 samples at
the
>same time and then apply my timing recovery. > > >This is wrong? Should I apply the matched filtering (SRRC-filter) in >combination with the polyphase resampling filtering inside the timing >recovery PLL? How would that scheme look like? > >Thanks again. > >Regards, >Viktor > > >
Viktor, Take a look at figures 6, 7, and 8 of: Multirate Digital Filters for Symbol Timing Synchronization in Software Defined Radios Fredric J. Harris, Senior Member, IEEE, and Michael Rice, Senior Member, IEEE your matched filter can be converted to a polyphase filter so you essentially get resampling for free. Check out Fred Harris' book as well. -Doug
Delay example:

Number of 16QAM modulated symbols = 5,000
Samples per Symbol = 2
Number of samples after transmit RRC-filter = 10,000
Number of samples after AWGN + Carrier Offsets = 10,000

Start delay = 0.3 samples
End delay = 6.7 samples
Delta delay = (6.7 - 0.3)/10,000 samples

Delay = Start Delay : Delta delay : End delay (Increase with Delta delay
between each sample)

Then I apply this delay on the signal, sample by sample.



Since I am going to perform the demodulation of the DVB-C signal offline on
recorded IQ-samples I thought that this would be enough to simulate timing
offset.


Regards,
Viktor
Thanks for the links Doug.

Regards,
Viktor

where is the "REAL" data coming from?

off the local cable TV system?

are you SURE they are using the EXACT same standard as you have
simulated?

inadvertent spectral inversion is always a good gothcha


Mark