We use the FM Mod and Quadrature Demod blocks to modulate and demodulate
GFSK packetized data. In the past, we have used sensitivity values for
these blocks that were provided for us, but their meaning was opaque.
I did some digging in the list and the web and found two prevalent
definitions for sensitivity from examples. Both definitions were
consistent in saying that the Demod parameter ‘Quadrature Gain’ should
be
the inverse of the sensitivity parameter for the Mod block.
The competing definitions for sensitivity were:
- sensitivity = (pi / 2) / samples_pr_symbol #
from gnuradio/blksimpl/gmsk.py
and
- sensitivity = 2 * pi * max_deviation / sample_rate #
from gnuradio/blks2impl/nbfm_tx.py
In my own recent work, I have been using the second definition because
it
seems to work and it gives me control over the deviation (I define max
deviation using modulation index and baud rate).
However, when I attempt to use 1/sensitivity for the Quadrature Gain of
the
RX, it does not seem to work, while altering the RX definition of
sensitivity to be 1 / (2 * pi * max_deviation / baud_rate) does seem to
work.
Am I missing something fundamental about how these parameters work?
On Thu, Jun 27, 2013 at 3:54 PM, Dan CaJacob [email protected]
wrote:
deviation using modulation index and baud rate).
However, when I attempt to use 1/sensitivity for the Quadrature Gain of the
RX, it does not seem to work, while altering the RX definition of
sensitivity to be 1 / (2 * pi * max_deviation / baud_rate) does seem to
work.
Am I missing something fundamental about how these parameters work?
Hi Dan,
The quadrature_demod converts from phase/frequency modulation back to
amplitude. So in the case of FSK signals (and let’s treat GMSK as FSK
for this), we want to convert frequency f1 into -1 and frequeuncy f2
to +1. Also, “let’s assume the system is synchronized” so that f1 =
-fm and f2 = +fm. What you want to do is convert those frequencies to
-1’s and 1’s, right? So there’s some rotation around the unit circle
that maps to this based on the number of samples per symbol you are
using. So hopefully that explains where the pi and sps in the
calculations come from.
Hope this helps.
Tom
Thanks Tom,
I think I have it worked out now. The sensitivity and gain parameters
for
the FM Mod and Quad. Demod blocks are reciprocals of one another. To
control deviation, in these parameters, you can just calculate
Modulation
Index. I was doing it the other way around. The bit that made
everything
make sense for me was reading that Modulation Index can be thought of as
having units of Radians. Understanding that, the rest makes perfect
sense.
So, the parameters become:
sensitivity = (pi * modulation_index) / samples_per_symbol
and on the receive side:
gain = samples_per_symbol / (pi * modulation_index)
Modulation index itself can be set explicitly or derived from a desired
deviation and baud rate:
modulation_index = deviation / (baud_rate / 2)
So, for a Minimum Modulation Index of 0.5, as is used in GMSK, the
sensitivity reduces to:
sensitivity = (pi / 2) / samples_per_symbol, just as it is in the
example.
The nbfm_tx.py example is probably different because it isn’t for data
transmission, but for audio, I think.
Thanks for your help!
Very Respectfully,
Dan CaJacob
On Thu, Jul 4, 2013 at 10:50 PM, Dan CaJacob [email protected]
wrote:
Very Respectfully,
Dan CaJacob
Hey Dan,
Great! I’ve edited your post and put the calculations here on our
Signal Processing wiki page
(http://gnuradio.org/redmine/projects/gnuradio/wiki/SignalProcessing).
And yes, converting to radians is key for this. I should have thought
to mention that.
Tom