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.
SDR - Demodulation of DVB-C
Started by ●March 27, 2013
Reply by ●March 27, 20132013-03-27
>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 filterwith>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 andmid-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
Reply by ●March 27, 20132013-03-27
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
Reply by ●March 27, 20132013-03-27
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
Reply by ●March 27, 20132013-03-27
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
Reply by ●March 27, 20132013-03-27
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
Reply by ●March 27, 20132013-03-27
>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 atthe>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
Reply by ●March 27, 20132013-03-27
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
Reply by ●March 28, 20132013-03-28
Reply by ●March 28, 20132013-03-28