discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: Σχετ: Re: QAM constellation script


From: Marcus Müller
Subject: Re: Σχετ: Re: QAM constellation script
Date: Sat, 29 Apr 2023 13:23:07 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1

Hi George,

that flow graph doesn't frequency-hop :) It does something different, rather cool. Please correct me if I got anything wrong about your self-written blocks below:

What you do is:

"VCO generator":

Produces always the same 10240-long vector with pseudo-random values,


"Repeat":

Repeat that vector you get 100 times (but that makes no difference, you could have just taken 100 vectors from "VCO generator", they are all the same)
This does **not** repeat the elements within the vector 100 times


"VCO (complex)":

Takes every input values and uses it (scaled with a factor) as phase increment relative to the last value it has generated. With the uncorrelated random [0,1] source at the input, and the scaling being such that the phase increment range is always [0;2pi], this just generates a pseudo-random point on the unit circle each output item


"Complex Conj":

Well, takes the complex conjugate of each item individually – still just points of uncorrelated random phase!


"Multiply":

You're multiplying the samples from your reception with a different sample each from a repeating, white pseudorandom noise:
This is spectral whitening :) But not frequency hopping.


Best regards,
Marcus

On 4/28/23 14:03, George Katsimaglis wrote:
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 <https://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature>

    Στις Πέμ, 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





reply via email to

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