Hi Lannan:

I am working on a similar project in the digital not audio domain.

There are two approaches.  The simple one, which I am currently using, is to 
prepend each message with a preamble of known bytes.  Then you recover byte 
alignment from the received bitstream by using a sliding window over the 
received bitstream looking for the known pattern.  This gives you an offset and 
you can recover bytes from there.  

I am currently doing this realignment in a small Python program that I will 
eventually integrate into a custom block.

This method is simple but it has no error detection or correction.  It works 
for my project, however!  I can transfer megabytes of data successfully at 
about 130M bps.

As it’s a learning project, however, I am currently working on a more 
sophisticated approach.  Please read the gnuradio tutorial on packet 
transmission and recovery.  Just Google “gnuradio packet” and the article will 
be near the top.

This article covers adding proper headers, CRCs, forward error correction et 
cetera and moving to use of a burst transmission approach.  It is quite 
complicated but I have the basic techniques “sort of” working with my project.  
My goal is to integrate the discussed techniques into the project so I can make 
my data transfers more robust.

The article Co es with example flowgraphs which are complicated at first look 
but through reading the (excellent) explanatory text it becomes clear as to 
which parts do what, and why.

Hope this helps.  If you want to discuss the sliding window basic approach then 
let me know.  As another responder noted you could also conceivably use a 
Correlation block for this, but you might have to move your data stream into 
the gnuradio messaging side first.

Kevin





Sent from my iPad

> On Jul 22, 2020, at 08:40, lannan jiang <[email protected]> wrote:
> 
> Hi everyone, 
>    (It's me again.)
>    I am working on an audio channel using QPSK modulation. I currently am 
> transmitting through a signal source that outputs bytes. I am looking for a 
> method to align the byte boundaries so I am able to hear a clean audio at the 
> receiver. 
>    Here is an idea of what I want to do: send packets that have, for example, 
> 7 bytes of data and 1 byte of known pattern, and so I can sync with the 
> receive block. However, I do not know how to implement this in GRC (I see a 
> block named packet header generator, is this what I want to use?). Could 
> someone please advise me on how to approach this?
>    
>    Thanks in advance.
>    Lannan Jiang 

Reply via email to