Thank you so much for the detail reasoning which helped me a lot for
understanding. Thank you all!

Sincerely,

Milo



On Wed, Aug 12, 2009 at 11:27 AM, Johnathan Corgan <
[email protected]> wrote:

> On Wed, 2009-08-12 at 10:00 -0700, Milo Wong wrote:
>
> > I was wondering if there is anyway to obtain the binary output from
> > audio source in GRC. I need this bits information as modulating signal
> > for ASK. Since sound card digitized our analog voice signal to binary
> > information in 16bits (suppose the sound card is 16bits), so I think
> > it should be a way to directly obtain the 16bits binary output of each
> > float symbol from audio source. I used to digitize them through "float
> > to byte" type conversion, however, it would lost a lot of dynamic
> > range since byte is only 8bits which is too imprecision.
> >
> > I've been confused by this question for a long time. Is there anybody
> > who can help me? Thank you in advance!
>
> The audio sources in GNU Radio provide a single-precision floating point
> output stream with a dynamic range from -1.0 to 1.0.
>
> Digital modulators in GNU Radio typically require a stream of "unpacked
> bytes", where each byte in the stream contains one or more LSBs
> representing the symbol you wish to modulate.  BPSK modulation has two
> symbols, so these are represented by a '0' or '1' as the LSB.  QPSK has
> four symbols, and these are represented by '00', '01', '10', and '11' in
> the the two LSBs.  Other modulators are similar.
>
> So your goal is to figure out how to convert a series of floating point
> samples representing an analog data source (audio) into a series of
> unpacked bytes appropriate to feed your modulator of choice.  In digital
> comms, this is the job of a vocoder.  Different vocoders result in
> differing properties of your communication system, such as data rate
> required, fidelity of the audio demodulation, effect of noise, and what
> happens when there are gaps in the packet stream.
>
> The simplest route you can go is to use the sample stream unmodified,
> which would give you a "signed-linear PCM" codec.  First, you would pass
> your sample stream into a multiplier to get the dynamic range from
> [-1.0,1.0] to [-32767.0:32767:0].  Then you use the type conversion
> block gr.float_to_short() to turn this from floating point into signed
> short integers of [-32767,32767].  Finally, you pass them through a
> gr.packed_to_unpacked_ss block with the right number of LSBs to turn
> them into symbols appropriate to your digital modulation.
>
> Signed-linear PCM is generally not used in RF comms as it requires a
> very wide bandwidth compared to other codecs.  If you are sampling voice
> at 8000 sps, then it takes 96000 bps (16 bits per sample) to encode the
> voice stream.  It also degrades very poorly in the presence of noise or
> missing frames.
>
> GNU Radio has an implementation of the GSM full-rate codec.  This takes
> audio at 8000 sps and generates a 13 Kbps stream of compressed audio.
> The GNU Radio GSM codec takes signed-linear shorts in and outputs
> 33-byte GSM frames, which you then need to modulate accordingly.
>
> For an example of how this is done in practice, look at the tx_voice.py
> script in the digital examples.  There is additional work involved in
> taking the GSM frames and encoding them for packet-based transmission,
> but the part about getting from voice to digital is there.
>
> Johnathan
>
>
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to