discuss-gnuradio
[Top][All Lists]
Advanced

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

Σχετ: Re: QAM constellation script


From: George Katsimaglis
Subject: Σχετ: Re: QAM constellation script
Date: Fri, 28 Apr 2023 12:03:09 +0000 (UTC)

Hi,

Thanks for the answers.
I attach the Rx flowchart and grc of the frequency hopping. I have successfully used it on QO100 satellite.

George SV1BDS 


Στάλθηκε από το Ταχυδρομείο Yahoo σε Android

Στις Πέμ, 27 Απρ, 2023 στις 14:57, ο χρήστηςMarcus Müller
<mmueller@gnuradio.org> έγραψε:
Hi George,

> Also I have implemented 1.000.000 hops/sec frequency hopping at QO100 satellite, spread
> over 1 MHz, using 10240 different frequencies.
> Is this project of general interest?

Well, that's impossible to say, but honestly: it probably is! And also, you shouldn't care
too much :) It's cool in any case!
My advise is: Just put it out there.

But I do have signal theory questions:

We know that if a signal has a bandwidth of 1 MHz, we can (complex) sample it and contain
all its signal content with a sampling rate of 1 MS/s.

If you're doing a million hops per second, how are you achieving a bandwidth of only 1
MHz? That means that every hop only gets a single sample, and you can't signify
"frequency" with just a single number.

So, I might have misunderstood you there, but it would seem what you claim to have done is
mathematically not possible :(

> I create this script using Python to create QAM constellations points.
> May be of general interest.

It's nice, but GNU Radio already comes with that!

from gnuradio import digital
constellation = digital.constellation_16qam()
points = constellation.points()

(and you can just use digital.constellation_16qam().points() in a GRC block parameter, no
need to build a string!)

These are also power-normalized to 1.

If you don't want normalized (or different sizes of) QAM constellation,

digital.qam.make_non_differential_constellation(M, gray_coded)

is your friend;

digital.qam.make_non_differential_constellation(4096, True)

makes a nice 4096-QAM, but it's average power isn't 1; you can fix that

points = digital.qam.make_non_differential_constellation(4096, True)
average_pwr = sum(point**2 for point in points) / len(points)
print(f"Average power: {average_pwr}; normalization factor hence: {average_pwr**(-1/2)}")
normalized_points = [ point * average_pwr**(-1/2) for point in points ]

Similarly, since you're doing satellite communications, you might be interested in PSKs,
an A-PSKs.

You can create a PSK using

digital.psk.psk_constellation(m=4, mod_code='gray', differential=True)

e.g.

digital.psk.psk_constellation(16, differential=False)


If you don't have GNU Radio but just python,

str([(i, j) for i in range(-n, n, 2) for j in range (-n, n, 2)])

does the same as your code, but might be a bit easier to read (again, if you want to use
this in GRC, don't do the conversion to `str`; GRC accepts any valid Python in its fields).

Best regards,
Marcus


Attachment: FH_USBTESTRx.pdf
Description: Adobe PDF document

Attachment: FH_USBTESTRx.grc
Description: Binary data


reply via email to

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