You can tell from my questions below that I am very new at this. If there is some other approach to my OOT that make more sense, please tell me...

I am aware of the gr-dsd OOT, but I want to decode/encode using a method that won't violate patents.

I'm working on a OOT that will have various blocks to encode/decode using an AMBE3000 device.

For decoding, incoming data will have an overall sync of 64+15 bits followed by a 660 bit header and then 20 millisecond voice frames with the encoded data (72 bits) and a "slow data" (24 bits). Starting with the first voice frame, every 21st frame will have a 24 bit frame sync instead of slow data. (It's the DStar protocol, see http://www.qsl.net/kb9mwr/projects/dv/dstar/dstar_dv_frame3_en.pdf , and it uses GMSK to convert between rf and digital.) The AMBE3000 will decode the 9 bytes of voice data in the 12 byte frame into 160 audio samples (short ints at 8000 per sec). The final voice frame should not have any "slow data" but instead have a 48 bit termination pattern).

My dstar_encode_sb block seems more straightforward: When the flow is started, just like a delay block, dstar_encode_sb will insert the overall sync and header at the beginning of the transmission, then the voice frames will be generated from an audio source. I'm unsure how to properly terminate the end. Is there another block function that I can override to add a final termination frame to the output stream as the flow is shutting down?

My dstar_decode_bs is quite a bit more complicated. I would like my dstar_decode_bs block to print some values from the header and only output audio when it is receiving voice frames. Is that possible? Can work() return zero when my block is not processing voice frames? Is forecast() a hard rule, or is it just a suggestion to the gnuradio scheduler?


_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to