[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discussgnuradio] VrFSKDemod
From: 
Eric Blossom 
Subject: 
Re: [Discussgnuradio] VrFSKDemod 
Date: 
Sun, 11 Jan 2004 23:33:06 0800 
Useragent: 
Mutt/1.4.1i 
On Sun, Jan 11, 2004 at 09:50:51PM 0700, address@hidden wrote:
>
>
> I'm trying to piece together everything necessary to decode a 9600bps EDACS
> trunked radio control channel.
Sounds like a good GNU Radio application...
> The data is 2 level FSK. I found the needswork/VrFSKDemod.h. How much work
> does this need and/or is there a suitable alternative elsewhere?
>
> Attempting to use it gets complaints that VrSigProc is not a template class
> rightly so as it is not. Any suggestions?
>
It was written for what looks like a very early version of the SPECTRA
system. All the glue is different, which wouldn't be too much of
problem to fix (take a look at the stuff in src/gnu/lib/dtv for a wide
variety of examples), but I'm not even sure that the demod technique
is robust.
You may want to start by taking a look a communication theory book,
and code a couple of things up. It's a great way to learn, and when
you're done, we'll all be able to take advantage of your new FSK
demodulator.
... I just took a look at "Contemporary Communcation Systems using
MATLAB" (ISBN 0534371736). On page 318, they recommend a
noncoherent demodulator for Mary FSK.
It goes like this...
Instead, we consider a method for demodulation and detection that
does not require knowledge fo the carrier phases. The demodulation
may be accomplished as shown in Figure 7.27. In this case, there are
two correlators per signal waveform, or a total of 2M correlators in
general. The received signal is correlated with the basis functions
(quadrature carriers)
sqrt(2/T) * cos (2*pi*Fc*t + 2*pi*m*deltaF*t) and
sqrt(2/T) * sin (2*pi*Fc*t + 2*pi*m*deltaF*t) for m = 0,1, ... M1.
[Translation: For each frequency they're trying to detect, they're
multiplying the received signal by the sin and cosine of each.
That's what the m*deltaF term is. Then they integrate (read: add up)
the result of each multiplication over a time period equal to the
expected symbol time. They then feed that into a envelope detector:
sqrt (x*x + y*y). The correlator with the largest envelope is the
value.]
For the binary case with a center freq F and deviation deltaF it looks
like this:
+ * cos (FdeltaF/2)  integrator 
  x*x + y*y  env 0
+ * sin (FdeltaF/2)  integrator 

signal  +

+ * cos (F+deltaF/2)  integrator 
  x*x + y*y  env 1
+ * sin (F+deltaF/2)  integrator 
The cos and sin blocks are called gr_nco in GNU Radio.
This doesn't handle some real problems such as ensuring that you're
sampling the integrator at the middle of a bit...
Eric