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.
Sent from my iPad
(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.