Closed marnett2 closed 2 years ago
Hi, @marnett2. The example does indeed demonstrate GMSK and not just MSK. There are actually several ways to demodulate GMSK. The three main was are:
I hope that helps
Thanks for the excellent demodulation tips, I will definitely be exploring these methods!
But I am interested in the modulation side -- I still don't see where the Gaussian filter is used. In src/modem/src/gmskmod.c:
The Gaussian filter coeffecients are created (line 78):
liquid_firdes_gmsktx(q->k, q->m, q->BT, 0.0f, q->h);
The interpolator is created (line 81):
q->interp_tx = firinterp_rrrf_create_prototype(LIQUID_FIRFILT_GMSKTX, q->k, q->m, q->BT, 0);
Later, I see the interpolator is used, but the Gaussian filter (q->h) is never used (only freed). Would I need to add some code in gmskmod_modulate(), for example, that executes the filter q->h, e.g. with firfilt_rrrf_push() and firfilt_rrrf_execute() using a filter created with q->h?
Or is the interpolator actually doing the Gaussian filtering?
Thanks for your help!
Ah good point. I believe the coefficients were used in a previous version directly. Now there is a special filter type that's used in the interpolator. I can probably get rid of the filter coefficients in the modulator itself (aside from the print() method)
Ok, that makes sense. A side question -- if I wanted to demonstrate MSK, would I simply bypass the interpolator (or use a non-Gaussian form)?
MSK uses a different interpolator; you cannot just bypass it. You can use the cpfskmodem family for a whole range of continuous-phase frequency shift keying (CPFSK) modem types.
I will check out cpfskmodem, I had read that setting modulation index to .5 and using CPFSK would result in MSK. Thanks for your help!
Hi, Thanks for this excellent library, it is really helping with my research on communication theory.
I am curious about the code in examples/gmskmodem_example.c: it appears that the Gaussian filter is created, but not actually used. Is it up to the user to run the filter before calling gmskmod_modulate()? Would it be fair to say that the example code demonstrates minimum-shift keying (GMSK without the "G")?