discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] help with QAM demodulation


From: Ben Reynwar
Subject: Re: [Discuss-gnuradio] help with QAM demodulation
Date: Mon, 27 Feb 2012 18:55:17 -0700

On Mon, Feb 27, 2012 at 2:57 PM, Tom Rondeau <address@hidden> wrote:
> On Mon, Feb 27, 2012 at 4:51 PM, Jeff Hodges <address@hidden> wrote:
>>
>> Thanks Ben and Tom, you two have been very helpful.
>>
>> The code Ben provided does work, and adjusting my GRC program to use the
>> same parameters, I was able to achieve the expected results.
>>
>> However, it appears there are two issues:
>>
>> (1) When differential encoding is set to off for both mod/demod blocks,
>> the output data becomes invalid
>
>
> I'm not sure the differential en/decoder works for QAM. I suggested it
> before because of the bits that you sent us, but the gray coding was the
> problem, which makes more sense.
>
Could this be simply because of the rotational symmetry of the QAM
constellation.  There's only a 25% chance that the receiver will lock
onto the constellation in the correct orientation so unless you're
using differential encoding it'll only work one quarter of the time.

>>
>> (2) When the samples per symbol is above 10 the output also becomes
>> invalid.
>
>
> I'm not sure why you would want to run it with that many sps, anyway. I'd
> probably have to dive back into the code to see what might be the problem
> there. Theoretically, it should be doable, but since I've never run it with
> that many, it's probably never been exercised.
>
I had this same problem a while back and found that for high values of
samples-per-symbol I needed different parameters.  Try twiddling with
freq_bw.

>>
>> Any ideas on what may be causing these discrepancies?
>>
>> In response to Tom's questions, I am using 16-QAM and the constellation
>> does look very noisy (both phase and amplitude) coming out of the QAM mod
>> and being observed on the WX GUI Constellation Sink. But then again, there a
>> lot of parameters on that signal processing block, so maybe I do not have
>> the proper values set.
>>
>> Thanks,
>>
>> Jeff
>
>
> The noise might be due to ISI since you're just coming out of a RRC filter
> at that point. Unless the constellation sink has another RRC in it. Also,
> that sink tries to do some synchronization designed for PSK signals, so it
> won't work great and might be causing some of your error. Try just using an
> oscope and plottng x verus y.
>
> Tom
>
>
>>
>> On Mon, Feb 27, 2012 at 12:50 PM, Ben Reynwar <address@hidden> wrote:
>>>
>>> On Mon, Feb 27, 2012 at 10:00 AM, Ben Reynwar <address@hidden> wrote:
>>> > On Mon, Feb 27, 2012 at 7:36 AM, Jeff Hodges <address@hidden>
>>> > wrote:
>>> >> Does anyone know if the QAM demodulator code is working properly?  I
>>> >> would
>>> >> like to get a QAM demodulator working for a symbol rate of 300ksym/s.
>>> >> I
>>> >> don't know whether I am just using the wrong parameters or if the
>>> >> blocks do
>>> >> not work properly, but I am not getting the results I expect.
>>> >>
>>> >> To test the code out I am using the GRC. I have a vector source with a
>>> >> known
>>> >> data sequence running into the qam mod block and then the output of
>>> >> that
>>> >> into a QAM demod block. The output of the QAM demod is running into a
>>> >> Uchar
>>> >> to Float, and I am plotting the results on a WX GUI Scope.  I have the
>>> >> exact
>>> >> same settings on both the QAM mod and demod blocks.  The output I am
>>> >> seeing
>>> >> on the scope looks completely random. (I also tried other vector
>>> >> source
>>> >> data: When the input is 0x0F, repeating, the output I see is 00001010
>>> >> repeating. But when I use 0x0E, the results are random again.)
>>> >>
>>> >> I have also tried demodulating a real QAM signal with a known data
>>> >> sequence,
>>> >> also to no avail.
>>> >>
>>> >> I have been working on this for about a month now and haven't had any
>>> >> success.  I have examined the underlying QAM.py and generic_mod,
>>> >> generic_demod codes, and they seem to be written properly. But I am
>>> >> not
>>> >> getting the expected results.
>>> >>
>>> >> Any help with this problem or advice you can give will be greatly
>>> >> appreciated, and I will return the favor by helping out in any way
>>> >> that I
>>> >> can.
>>> >>
>>> >> Thank you very much in advance,
>>> >>
>>> >> Jeff
>>> >>
>>> >> _______________________________________________
>>> >> Discuss-gnuradio mailing list
>>> >> address@hidden
>>> >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>> >>
>>> >
>>> > If it's not working it's probably my fault, so I'll do some tests
>>> > myself today and get back to you.
>>> >
>>> > Cheers,
>>> > Ben
>>>
>>> I found a bug in the xml file for the demodulator that would cause
>>> problems if you requested no gray-coding.
>>> It cause gnuradio-companion to pass an incorrect parameter name.
>>> A fix is at
>>> https://github.com/benreynwar/gnuradio/commit/e68ab8589ca235563f8c061fbb79d13793d1f21f
>>>
>>> In case that wasn't your problem I'll post an example that works for me:
>>>
>>> from gnuradio import gr, digital
>>>
>>> class qam_mod_demod(gr.top_block):
>>>
>>>    def __init__(self):
>>>        super(qam_mod_demod, self).__init__()
>>>        src = gr.vector_source_b([1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0,
>>> 0, 0]*1000)
>>>        packer = gr.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST)
>>>        self.snk = gr.vector_sink_b()
>>>        mod = digital.qam.qam_mod(constellation_points=16,
>>> mod_code="gray",
>>>                                  differential=True,
>>> samples_per_symbol=2,
>>>                                  excess_bw=0.35)
>>>        demod = digital.qam.qam_demod(constellation_points=16,
>>> mod_code="gray",
>>>                                      differential=True,
>>> samples_per_symbol=2,
>>>                                      excess_bw=0.35,
>>> freq_bw=6.28/100.0,
>>>                                      timing_bw=6.28/100.0,
>>> phase_bw=6.28/100.0)
>>>        unpacker = gr.packed_to_unpacked_bb(8, gr.GR_MSB_FIRST)
>>>        self.connect(src, packer, mod, demod, unpacker, self.snk)
>>>
>>> if __name__ == '__main__':
>>>    qmd = qam_mod_demod()
>>>    qmd.run()
>>>    data = qmd.snk.data()
>>>    print(data)
>>
>>
>



reply via email to

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