Forum: GNU Radio Re: Complex samples format with ASK

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
069315c9e8059c65c4c3d3e24803545f?d=identicon&s=25 Michael Buettner (Guest)
on 2008-11-26 22:25
(Received via mailing list)
> I know very little about RFID, but I can make these observations on
> how I would probably perform a naive demodulation of this signal.

>  1. Tune the USRP to your carrier frequency and bring your signal
> down to baseband (centered around DC).
>  2. Choose an appropriate number of samples per symbol or bit (I'd
> arbitrarily choose 6 .. or 8).
>  3. Filter the incoming signal to some appropriate spectral mask.
>  4. Find the magnitude (or even power since it saves a sqrt) of the
> complex vector.
>  5. Develop some algorithm which accounts for frequency offset/tracking.
>  6. Perform hard decisions from the soft decisions you make from the
> algorithm developed in step (5).

Marco,

Are you trying to decode the reader transmission, or the tag reply? You
may
be able to use a matched filter as a first step to clean up the signal
before
demodulating. I'm not really sure what 13.56 MHz RFID signals look
like, but that
helps a lot at 915 MHz.

Regardless, I think step 3 is the key to get you started. You don't want
to just
throw out the I or Q channel. You probably want to use the
complex_to_mag block,
and then the signal will look like what you expect.

michael
A5bd7ae805ecf3d11fad16fcffee2f5b?d=identicon&s=25 Paul Mathews (Guest)
on 2008-11-26 23:13
(Received via mailing list)
> I know very little about RFID, but I can make these observations on

> how I would probably perform a naive demodulation of this signal.

>  1. Tune the USRP to your carrier frequency and bring your signal
> down to baseband (centered around DC).
>  2. Choose an appropriate number of samples per symbol or bit (I'd

> arbitrarily choose 6 .. or 8).
>  3. Filter the incoming signal to some appropriate spectral mask.
>  4. Find the magnitude (or even power since it saves a sqrt) of the
> complex vector.
>  5. Develop some algorithm which accounts for frequency offset/tracking.

>  6. Perform hard decisions from the soft decisions you make from the
> algorithm developed in step (5).


Marco,
Are you trying to decode the reader transmission, or the tag reply? You
may
be able to use a matched filter as a first step to clean up the signal
before
demodulating. I'm not really sure what 13.56 MHz RFID signals look like,
but
that

helps a lot at 915 MHz.

Regardless, I think step 3 is the key to get you started. You don't want
to
just
throw out the I or Q channel. You probably want to use the
complex_to_mag
block,
and then the signal will look like what you expect.

michael

To try to answer Marco's original question about I/Q directly: the phase
info available from I/Q samples is not directly useful for RFID ASK
signals.
However, the calculated magnitude provides slightly better SNR than
would
samples of magnitude alone.

I've done a lot of work with 13 MHz RFID. Most common form of modulation
is
Amplitude Shift Keying, a form of AM, with the data stream Manchester
encoded.
http://en.wikipedia.org/wiki/Manchester_coding
A good example of channel filtering and AM demodulation using
complex_to_mag
is usrp_am_mw_rcv.py. That example is setup for AM broadcast, so you'll
want
to widen the channel filter BW out to accomodate the baud rate you're
using,
and, you can eliminate the audio filtering and sink code. The
demodulated
output is the 'envelope' of the signal, with an offset the depends on
the
percentage of modulation achieved. The RFID reader in Marco's case
achieves
100% modulation, so the offset will be 50% of peak level, like this
(fixed
font spacing req'd):
       ___     ___     ___
      |   |   |   |   |   |
 0 ___|   |___|   |___|   |___

RFID tags typically achieve much lower modulation percentages, depending
on
coupling with the reader, like this:


       ___     ___    ___
      |   |___|   |__|   |
 0 ___|                  |___

In either case, you can threshold the data at some value less than the
average peak to do a crude conversion from envelope to bits. In turn,
you
can examine the bitstream to locate bit transitions. The bit stream can
then
be decoded. There are better ways, e.g., using matched filters, to
identify
Manchester codes directly from the envelope data, but this should get
you
started.
Paul Mathews
23272b99cdcd7420e24e90c1fde60538?d=identicon&s=25 Marco Bottino (Guest)
on 2008-12-05 10:44
(Received via mailing list)
Hello,

Selon Paul Mathews <opto@whidbey.com>:

> You have to choose reasonable values for the decimations and filter
> parameters. The attached file runs without generating compiler errors, but
> it's up to you to take it from here.
> Paul
>

If, as you say, it runs, what does "RuntimeError: complex_to_mag(4):
insufficient connected output ports (1 needed, 0 connected)" means?
Maybe that the output is not used (even if I don't understand why), so
for that
it stops?

thank you

Marco
This topic is locked and can not be replied to.