ASK Modulation

I am trying to write an ASK Modulation block to transmit streams of 0’s
and
1’s. In order to match the “symbol timing” of the protocol that I am
trying
to implement, would I keep an instance variable in the block that, in
effect, keeps track of how many samples have been processed by the block
so
far? In other words, using the known sampling frequency and how many
samples have been processed in the block so far, to know whether to go
to
the next bit to be sent or not.

Also, what is the best way to define what bit sequence I would like to
send? Would it be file_source?

Any other better ways that this can be done? I am brand-new to
gnuradio,
but I have gone through most of the GnuRadio tutorial and the “How to
write
a block” tutorial.

Thanks.
Bill H.

2009/3/17 William H. [email protected]:

Any other better ways that this can be done? I am brand-new to gnuradio,
but I have gone through most of the GnuRadio tutorial and the “How to write
a block” tutorial.

I have never written a block for GNU Radio before, but I think you’re
missing a fundamental concept here.

For the transmitter, you are given N bits and generate M*N output
samples of the appropriate amplitude.

Why do you feel there is a need to keep track of “symbol timing” in
the transmit path?

On the RX side, you should take a look at the source code. There are
plenty of blocks which have instance variables associated with them
that can keep track of how many samples you’ve processed as well as
looking back in your history in case you need more information. Try
here:

http://www.gnuradio.org/trac/browser/gnuradio/trunk/gnuradio-core/src/lib/general

Easy examples are the linear feedback shift registers, and there are
plenty of more complicated examples in the same directory.

I hope this has been helpful to you.

Good luck.

Brian

William H. wrote:

I am trying to write an ASK Modulation block to transmit streams of 0’s
and 1’s. In order to match the “symbol timing” of the protocol that I
am trying to implement, would I keep an instance variable in the block
that, in effect, keeps track of how many samples have been processed by
the block so far? In other words, using the known sampling frequency
and how many samples have been processed in the block so far, to know
whether to go to the next bit to be sent or not.

When receiving any digital bitstreams there are certain steps to do,
regardless of the modulation used. There are many examples in both
GnuRadio and CGRAN.

As a quick summary, you should:

  1. Demodulate whatever modulation (in this case, ASK) was used. The
    sample rate should be at LEAST twice the symbol rate of the data.

  2. Convert your samples to digital symbols. For a trivial 2-level
    ASK, this would just be a simple bitslicer. Note that the result
    is STILL at the sample rate, NOT the symbol rate.

  3. Feed the resulting bitstream into a M&M clock recovery block. This
    will resample the bitstream down to the data’s clock rate, with one
    sample per bit.

  4. Store to a file, or do further processing.

Also, what is the best way to define what bit sequence I would like to
send? Would it be file_source?

That is one way. You could also use a UDP source, or the TUN/TAP
device.

@(^.^)@ Ed