Let's say I want to emulate the design of a modulator I am building "in real life". I'd like the components, input data rate, and output bandwidth to be the same as in the real system. If I use the GNURadio Constellation Modulator block for this, it imposes a lower limit on samples/second. This results in a different bandwidth for the GNURadio graph, than the real system.

Why does this block impose this restriction? And, is there a canonical (or preferred) way around it, when emulating real systems?


The GNURadio Constellation modulator enforces a minimum of 2 Samples Per Symbol mostly due to simplicity and some practical reasons. Theoretically, if you're just transmitting PSK without any pulse shaping, you could do 1 sample per symbol (note these are complex symbols) . But typically we like filtered PSK, and the block does this with the RRC filter. However - a key point is that when filtering the signal, you have bandwidth expansion. So if you use a 35% excess bandwidth, your sample rate must be at least 1.35x larger , or another way to say it is that you need at least 1.35 samples per symbol to satisfy nyquist. Similarly for 50% bandwidth you'd need 1.5 samples/symbol. The easiest way to deal with this is to just upsample by 2 (i.e. oversample) and filter with an RRC designed for 2 samples per symbol and then you can support the full range of excess BW values that the RRC can do.

There is one other key idea here though - if you were to try doing a rational upsampling by 1.35x for a 35% excess BW RRC, your resulting signal would be fully occupying your bandwidth (i.e. you have no oversampling). This becomes a problem in multiple areas - for one, when you upsample by 2 later on, the image that must be filtered will show up right next to the one you want to keep, making your digital filtering requirements harder. Additionally, if you instead plan to send this out via a D/A, the image in your 2nd nyquist zone will be sitting right next to your desired image in zone 1, and again filtering with your analog reconstruction filter will be very difficult (e.g. a complex filter with steep transition band).

Also take a look at this very similar question asked by myself where Dan Boschen gave a great answer: Sample rates, Samples per Symbol, and Digital Pulse Shaping

  • 1
    $\begingroup$ exactly, if you just want the symbol mapping, use xx_to_chunks; the Constellation modulator does include pulse shaping, and that makes little sense with 1sps $\endgroup$ – Marcus Müller Jan 17 at 21:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.