Hi ????????,
I don't know the inner workings of the module but if I want to generate,
for example PSK, from first principles, I do it as follows. For QPSK
there are four points in the constellation so each represents 2 bits.
The points may be 1 + j, -1 - j, 1 - j and -1 + j, so a sample
representing 2 bits would be one of these. If there is more than 1
sample per symbol, then the other samples are zero (interpolation). The
next sample follows and so on. This forms the input to your root Nyquist
filter, e.g. SRRC. The output of the filter is the modulated signal. As
the previous response said, the centre frequency is zero. If you want
any other frequency, a complex mix is required. To help you understand
this you could try writing some code in Matlab, Octave or Python etc. to
implement a simple signal chain.
Regards,
Steve Hubbard
On 7/5/21 7:03 pm, ???????? wrote:
Recently I was learning the working principle of "constellation
modulator". I read the file "generic_mod_demod.py" and realized that
it is a hierarchical block. I was confused about its working
principle, why there is no other action after it is connected to
rrc_filter. What? Shouldn't the general IQ modulation have
"acoswt-bsinwt" or "(a + bi) exp(-jwt)" operation? I haven't seen
similar operations in the code, but the output of the "constellation
modulator" is a baseband complex modulated signal. Is there anything
else I can't see?
mod code:
?0?2 ?0?2 ?0?2 ?0?2 # Connect
?0?2 ?0?2 ?0?2 ?0?2 self._blocks = [self, self.bytes2chunks]
?0?2 ?0?2 ?0?2 ?0?2 if self.pre_diff_code:
?0?2 ?0?2 ?0?2 ?0?2 ?0?2 ?0?2 self._blocks.append(self.symbol_mapper)
?0?2 ?0?2 ?0?2 ?0?2 if differential:
?0?2 ?0?2 ?0?2 ?0?2 ?0?2 ?0?2 self._blocks.append(self.diffenc)
?0?2 ?0?2 ?0?2 ?0?2 self._blocks += [self.chunks2symbols, self.rrc_filter, self]
?0?2 ?0?2 ?0?2 ?0?2 self.connect(*self._blocks)