#DSTAR Arduino header Encoding and decoding library#
F4GOH Anthony f4goh@orange.fr
November 2015
Use this library freely with Arduino 1.6.5
To use the DSTAR library:
- Go to https://github.com/f4goh/DSTAR, click the Download ZIP button and save the ZIP file to a convenient location on your PC.
- Uncompress the downloaded file. This will result in a folder containing all the files for the library, that has a name that includes the branch name, usually DSTAR-master.
- Rename the folder to DSTAR.
- Copy the renamed folder to the Arduino sketchbook\libraries folder.
To use the DSTAR library, see /exemples/Radio_frame_header.ino.
CMX589 DSTAR Modem soon...
73
/*
Serial Monitor results :
Data to encode :
@ F4GOH GF4GOH BCQCQCQ F4GOH ID51
Add CRC :crc : A3BC
Data to encode :
0x40,0x0,0x0,0x46,0x34,0x47,0x4F,0x48,0x20,0x20,0x47,0x46,0x34,0x47,0x4F,0x48,0x20,0x20,0x42,0x43,0x51,0x43,0x51,0x43,0x51,0x20,0x20,0x46,0x34,0x47,0x4F,0x48,0x20,0x20,0x20,0x49,0x44,0x35,0x31,0xBC,0xA3,0x0,
Data convolued :
0x0,0xE,0xC0,0x0,0x0,0x0,0x35,0xCE,0xCE,0x17,0xD9,0xCE,0x1A,0x7E,0xC3,0xBE,0xC0,0x3B,0x0,0x3B,0xD9,0xCE,0xF5,0xCE,0xCE,0x17,0xD9,0xCE,0x1A,0x7E,0xC3,0xBE,0xC0,0x3B,0x0,0x3B,0x3B,0xE,0x17,0xE,0x2C,0xE2,0x17,0xE,0x2C,0xE2,0x17,0xE,0x2C,0xE2,0xC0,0x3B,0x0,0x3B,0x35,0xCE,0xCE,0x17,0xD9,0xCE,0x1A,0x7E,0xC3,0xBE,0xC0,0x3B,0x0,0x3B,0x0,0x3B,0xEF,0xBE,0xCE,0xCE,0x22,0x17,0xEC,0xD7,0xD,0xA4,0x67,0x38,0xB0,0x0,
Data interleaving :
0x5,0xE1,0x4,0x80,0x1E,0x10,0x8,0x24,0x19,0xE5,0x13,0xC1,0xA7,0xD5,0xD,0xDC,0xCD,0xB3,0x5C,0x6B,0x4E,0x1D,0xFF,0x5D,0xC3,0x3,0xA7,0x16,0x35,0x20,0xB5,0xF3,0xD0,0xB,0xDC,0xB,0x24,0x8B,0x71,0xBE,0x11,0xA1,0xBA,0x6E,0x3B,0xD5,0x35,0xE5,0x3E,0xAB,0xAE,0xAE,0x9,0xC0,0x89,0x8B,0xBA,0x4B,0x95,0x77,0xC9,0x70,0xC1,0x15,0x91,0x68,0x36,0xC2,0x2A,0x37,0xD3,0x75,0x6,0x29,0x66,0x2C,0xF5,0x75,0xF7,0x87,0x4C,0x26,0x30,0x0,
Data scrambling :
0xB,0x13,0xCD,0x82,0x38,0x3E,0xBE,0x28,0xCD,0x2,0xA7,0xEB,0x5D,0x84,0xB5,0x22,0xD0,0x56,0xCE,0x6F,0x2,0x40,0x93,0x44,0x6A,0xCC,0xCF,0x43,0xC1,0x83,0xC4,0xF,0xEB,0xC0,0xF8,0x3,0xBC,0x31,0xA9,0x8D,0x42,0x3F,0x6A,0xC5,0xD2,0x93,0xD6,0x1D,0x49,0x3D,0xE6,0xBF,0x38,0xB5,0x39,0xED,0x1D,0x76,0x34,0x20,0x1B,0xFD,0x6,0xE5,0x7E,0x44,0xA6,0xE0,0x48,0xDC,0xB3,0xB8,0x48,0x52,0x24,0x83,0x50,0x6E,0x78,0x66,0x92,0x7F,0x10,0x0,
Data de-scrambling :
0x5,0xE1,0x4,0x80,0x1E,0x10,0x8,0x24,0x19,0xE5,0x13,0xC1,0xA7,0xD5,0xD,0xDC,0xCD,0xB3,0x5C,0x6B,0x4E,0x1D,0xFF,0x5D,0xC3,0x3,0xA7,0x16,0x35,0x20,0xB5,0xF3,0xD0,0xB,0xDC,0xB,0x24,0x8B,0x71,0xBE,0x11,0xA1,0xBA,0x6E,0x3B,0xD5,0x35,0xE5,0x3E,0xAB,0xAE,0xAE,0x9,0xC0,0x89,0x8B,0xBA,0x4B,0x95,0x77,0xC9,0x70,0xC1,0x15,0x91,0x68,0x36,0xC2,0x2A,0x37,0xD3,0x75,0x6,0x29,0x66,0x2C,0xF5,0x75,0xF7,0x87,0x4C,0x26,0x30,0x0,
Data de-interleaving :
0x0,0xE,0xC0,0x0,0x0,0x0,0x35,0xCE,0xCE,0x17,0xD9,0xCE,0x1A,0x7E,0xC3,0xBE,0xC0,0x3B,0x0,0x3B,0xD9,0xCE,0xF5,0xCE,0xCE,0x17,0xD9,0xCE,0x1A,0x7E,0xC3,0xBE,0xC0,0x3B,0x0,0x3B,0x3B,0xE,0x17,0xE,0x2C,0xE2,0x17,0xE,0x2C,0xE2,0x17,0xE,0x2C,0xE2,0xC0,0x3B,0x0,0x3B,0x35,0xCE,0xCE,0x17,0xD9,0xCE,0x1A,0x7E,0xC3,0xBE,0xC0,0x3B,0x0,0x3B,0x0,0x3B,0xEF,0xBE,0xCE,0xCE,0x22,0x17,0xEC,0xD7,0xD,0xA4,0x67,0x38,0xB0,0x0,
Data decoded(viterbi) :
0x40,0x0,0x0,0x46,0x34,0x47,0x4F,0x48,0x20,0x20,0x47,0x46,0x34,0x47,0x4F,0x48,0x20,0x20,0x42,0x43,0x51,0x43,0x51,0x43,0x51,0x20,0x20,0x46,0x34,0x47,0x4F,0x48,0x20,0x20,0x20,0x49,0x44,0x35,0x31,0xBC,0xA3,0x0,
Nb errors :0
Checking crc : 1
Original data :@ F4GOH GF4GOH BCQCQCQ F4GOH ID51¼£
*/
Have fun with Viterbi
Download PDF : Viterbi how to
To Understand pdf, take a look at https://github.com/f4goh/CONVOLUTION
#include <DSTAR.h>
#define pinLed 13 //Output led
#define BUFSIZE 42 //size of bufferTxRx
//format : flag1,flag2,flag3,RCV Call,Send Call,Your Call,Own Call 1,Own Call 2
// 1by 1by 1by 8by 8by 8by 8by 4by
byte bufferTxRx[]={0x40,0,0,'F','4','G','O','H',' ',' ','G','F','4','G','O','H',' ',' ','B','C','Q','C','Q','C','Q',' ',' ','F','4','G','O','H',' ',' ',' ','I','D','5','1',0,0,0};
byte bufferConv[BUFSIZE*2]; //buffer convolued,randomize and interleaved data
byte history[BUFSIZE*8]; //buffer for viterbi decoding (large buffer need)
void convol()
{
Serial.println("Data to encode :");
print_data(bufferTxRx,sizeof(bufferTxRx),1);
Serial.print("Add CRC :");
Dstar.add_crc(bufferTxRx);
Serial.print("crc : ");
Serial.println(Dstar.crc,HEX);
Serial.println("Data to encode :");
print_data(bufferTxRx,sizeof(bufferTxRx),0);
Serial.println("Data convolued :");
Dstar.convolution(bufferTxRx,bufferConv); //source, dest
print_data(bufferConv,sizeof(bufferConv),0);
Serial.println("Data interleaving :");
Dstar.interleave(bufferConv);
print_data(bufferConv,sizeof(bufferConv),0);
Serial.println("Data scrambling :");
Dstar.pseudo_random(bufferConv,660);
print_data(bufferConv,sizeof(bufferConv),0);
}
void decode()
{
Serial.println("Data de-scrambling :");
Dstar.pseudo_random(bufferConv,660);
print_data(bufferConv,sizeof(bufferConv),0);
Serial.println("Data de-interleaving :");
Dstar.deInterleave(bufferConv);
print_data(bufferConv,sizeof(bufferConv),0);
Serial.println("Data decoded(viterbi) :");
Dstar.viterbi(bufferConv,history,bufferTxRx); //decode data
print_data(bufferTxRx,sizeof(bufferTxRx),0);
Serial.print("Nb errors :");
Serial.println(Dstar.acc_error[1][0]); //print nb errors
Serial.print("Checking crc : ");
Serial.println(Dstar.check_crc(bufferTxRx)); //crc testing
Serial.print("Original data :");
print_data(bufferTxRx,sizeof(bufferTxRx),1);
}