Add experimental digital mode

pull/186/head
F5OEO 2019-01-08 15:03:34 +00:00
rodzic 4661455ec6
commit 21203ee990
2 zmienionych plików z 314 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,127 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdarg.h>
#include <stdint.h>
#include <math.h>
#include <time.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include "../librpitx/src/librpitx.h"
#include "costas8.h"
float frequency=14.07e6;
bool running=true;
//ngfmdmasync *fmmod;
fskburst *fsk;
static double GlobalTuningFrequency=00000.0;
void Encode(char Symbol,unsigned char *Tab,int Upsample)
{
for(int i=0;i<8;i++)
{
fprintf(stderr,"freq %d -> %c\n",4*(Costas8[Symbol][i]-1),Symbol);
for(int j=0;j<Upsample;j++)
Tab[i*Upsample+j]=(Costas8[Symbol][i]-1);
}
}
void wait_every(
int minute
) {
time_t t;
struct tm* ptm;
for(;running;){
time(&t);
ptm = gmtime(&t);
if((ptm->tm_min % minute) == 0 && ptm->tm_sec == 0) break;
usleep(1000);
}
usleep(1000000); // wait another second
}
static void
terminate(int num)
{
running=false;
fprintf(stderr,"Caught signal - Terminating\n");
}
int main(int argc, char **argv)
{
char *Message="F5OEO";
int SampleRate=4;
if (argc >2 )
{
frequency=atof(argv[1]);
Message=argv[2];
}
if(argc<=2)
{
printf("usage : corel8 frequency(Hz) Message\n");
exit(0);
}
for (int i = 0; i < 64; i++) {
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = terminate;
sigaction(i, &sa, NULL);
}
short VCOFreq;
int NbSymbol=5;
int SR = 4*100;
float Deviation = 4;
int Upsample=100;
int FifoSize = 8*(20+1)*Upsample; //8 symbols * 20 caracters max, 1 Symbol SYNC
fsk=new fskburst(frequency, SR, Deviation, 14, FifoSize);
unsigned char TabSymbol[FifoSize];
NbSymbol=strlen(Message);
fprintf(stderr,"Nb Symbols=%d\n",NbSymbol);
dbg_setlevel(1);
while(running)
{
fprintf(stderr,"Wait next minute\n");
wait_every(1);
if(!running) break;
fprintf(stderr,"Begin Tx\n");
unsigned char *TabChar=TabSymbol;
Encode(1,TabChar,Upsample);
TabChar+=8*Upsample;
for(int symbol=0;(symbol<NbSymbol)&&running;symbol++)
{
Encode(Message[symbol],TabChar,Upsample);
TabChar+=8*Upsample;
}
fsk->SetSymbols(TabSymbol, (NbSymbol+1)*8*Upsample);
fsk->stop();
}
delete fsk;
return 0;
}

Wyświetl plik

@ -0,0 +1,187 @@
unsigned char Costas8[184][8]=
{
{1,3,6,2,7,8,5,4},
{1,3,6,7,5,2,8,4},
{1,3,6,7,5,4,8,2},
{1,4,2,8,7,3,5,6},
{1,4,5,7,6,3,8,2},
{1,5,3,8,7,4,6,2},
{1,5,7,4,3,8,6,2},
{1,5,8,4,2,7,6,3},
{1,6,2,8,5,3,4,7},
{1,6,4,7,8,3,5,2},
{1,6,4,8,5,7,2,3},
{1,6,5,3,7,8,2,4},
{1,6,5,8,3,7,4,2},
{1,7,3,8,6,5,2,4},
{1,7,4,3,5,8,2,6},
{1,7,4,8,3,2,5,6},
{1,7,8,3,5,2,6,4},
{1,8,2,6,5,3,4,7},
{1,8,3,6,2,7,5,4},
{1,8,5,4,2,7,3,6},
{1,8,5,7,3,2,6,4},
{1,8,6,2,3,5,4,7},
{1,8,6,3,7,2,4,5},
{2,1,6,7,4,8,3,5},
{2,1,7,5,8,3,4,6},
{2,4,7,3,8,5,6,1},
{2,5,3,8,7,4,6,1},
{2,5,4,6,7,3,1,8},
{2,5,6,4,1,7,3,8},
{2,5,6,4,3,7,1,8},
{2,6,3,8,7,5,1,4},
{2,6,4,1,7,8,3,5},
{2,6,4,7,8,3,5,1},
{2,6,8,3,4,7,5,1},
{2,6,8,7,1,4,5,3},
{2,7,3,6,1,8,5,4},
{2,7,3,6,8,1,5,4},
{2,7,5,4,1,8,3,6},
{2,7,6,4,8,5,1,3},
{2,7,6,8,1,5,3,4},
{2,8,1,5,3,6,7,4},
{2,8,3,6,7,5,4,1},
{2,8,4,5,7,6,3,1},
{2,8,6,1,3,7,4,5},
{3,1,5,8,4,6,7,2},
{3,2,7,5,8,4,6,1},
{3,2,7,8,5,1,4,6},
{3,4,2,7,6,8,1,5},
{3,4,6,2,1,7,5,8},
{3,4,7,1,6,2,8,5},
{3,4,7,6,1,5,2,8},
{3,5,1,8,2,7,6,4},
{3,5,4,1,7,8,6,2},
{3,5,6,1,4,2,8,7},
{3,5,8,1,7,4,2,6},
{3,5,8,2,6,1,7,4},
{3,5,8,4,1,2,7,6},
{3,6,1,8,5,4,2,7},
{3,6,2,7,5,4,1,8},
{3,6,7,2,4,8,5,1},
{3,7,1,4,6,5,2,8},
{3,7,1,6,5,2,8,4},
{3,7,5,2,1,6,8,4},
{3,7,5,2,8,1,4,6},
{3,7,8,2,4,1,6,5},
{3,8,6,1,2,5,7,4},
{4,1,5,7,8,3,6,2},
{4,1,7,3,8,2,5,6},
{4,2,3,6,8,7,1,5},
{4,2,5,6,8,3,7,1},
{4,2,8,7,3,5,6,1},
{4,3,5,1,8,6,7,2},
{4,3,8,5,7,1,2,6},
{4,5,1,8,6,3,7,2},
{4,5,2,6,8,3,1,7},
{4,5,7,2,6,3,1,8},
{4,5,7,2,6,3,8,1},
{4,5,8,1,6,3,7,2},
{4,5,8,7,2,6,3,1},
{4,6,1,2,8,5,3,7},
{4,6,1,5,2,3,8,7},
{4,6,2,3,7,5,8,1},
{4,6,2,5,3,8,7,1},
{4,6,7,2,8,1,5,3},
{4,7,1,6,2,8,5,3},
{4,7,5,2,1,6,8,3},
{4,7,6,3,5,1,8,2},
{4,8,1,3,2,7,5,6},
{4,8,2,1,3,6,7,5},
{4,8,2,5,6,1,7,3},
{4,8,2,5,7,6,3,1},
{4,8,6,1,2,5,7,3},
{5,1,3,8,7,4,2,6},
{5,1,7,4,2,3,6,8},
{5,1,7,4,3,8,2,6},
{5,1,7,8,6,3,2,4},
{5,1,8,6,7,2,4,3},
{5,2,3,6,4,8,1,7},
{5,2,4,7,8,3,1,6},
{5,2,8,3,7,1,4,6},
{5,3,2,7,1,8,4,6},
{5,3,7,4,6,1,2,8},
{5,3,7,6,2,4,1,8},
{5,3,8,4,7,6,1,2},
{5,3,8,7,1,4,6,2},
{5,4,1,2,7,3,6,8},
{5,4,1,8,3,6,2,7},
{5,4,2,7,3,6,1,8},
{5,4,2,7,3,6,8,1},
{5,4,7,3,1,6,8,2},
{5,4,8,1,3,6,2,7},
{5,6,1,4,2,8,7,3},
{5,6,4,8,1,3,2,7},
{5,7,1,2,6,4,3,8},
{5,7,4,3,1,6,2,8},
{5,7,6,3,1,2,8,4},
{5,8,2,6,1,7,4,3},
{5,8,4,2,1,6,3,7},
{6,1,3,8,7,4,2,5},
{6,2,1,7,5,8,3,4},
{6,2,4,7,1,8,5,3},
{6,2,4,7,8,3,1,5},
{6,2,8,3,4,7,1,5},
{6,2,8,5,3,4,7,1},
{6,3,2,7,5,1,4,8},
{6,3,7,2,4,5,8,1},
{6,3,8,1,4,5,7,2},
{6,4,1,5,8,7,2,3},
{6,4,1,7,3,8,2,5},
{6,4,1,8,2,5,7,3},
{6,4,3,8,5,7,1,2},
{6,4,5,8,2,1,3,7},
{6,4,8,1,7,2,3,5},
{6,5,2,3,8,4,7,1},
{6,5,2,8,3,7,1,4},
{6,5,3,7,8,2,4,1},
{6,5,7,2,3,1,8,4},
{6,7,2,1,4,8,5,3},
{6,7,2,4,1,5,3,8},
{6,8,4,1,5,3,2,7},
{7,1,3,8,6,2,5,4},
{7,1,5,4,2,3,6,8},
{7,1,6,3,2,4,5,8},
{7,1,8,4,6,3,2,5},
{7,2,3,1,8,4,6,5},
{7,2,3,5,1,4,8,6},
{7,2,4,5,8,1,6,3},
{7,2,6,3,1,8,4,5},
{7,2,6,3,8,1,4,5},
{7,3,1,2,8,5,4,6},
{7,3,1,6,5,2,4,8},
{7,3,5,2,1,6,4,8},
{7,3,5,8,2,1,6,4},
{7,3,6,1,2,4,8,5},
{7,4,3,5,6,2,8,1},
{7,4,3,5,8,2,6,1},
{7,4,5,3,2,6,8,1},
{7,4,6,1,2,5,3,8},
{7,5,2,6,1,4,3,8},
{7,8,2,4,1,6,5,3},
{7,8,3,2,5,1,6,4},
{8,1,3,6,2,7,5,4},
{8,1,3,7,6,4,5,2},
{8,1,4,2,6,7,3,5},
{8,1,4,5,7,2,6,3},
{8,1,6,3,7,2,4,5},
{8,1,7,3,4,6,5,2},
{8,2,1,6,4,7,3,5},
{8,2,5,1,6,7,4,3},
{8,2,5,6,4,1,7,3},
{8,2,6,1,3,4,7,5},
{8,3,4,1,6,2,5,7},
{8,3,4,6,2,1,7,5},
{8,3,5,1,4,2,7,6},
{8,3,5,2,1,6,4,7},
{8,3,7,1,4,6,5,2},
{8,4,1,5,7,2,3,6},
{8,4,2,5,6,1,3,7},
{8,4,6,1,2,5,3,7},
{8,5,4,2,3,6,1,7},
{8,5,7,1,2,6,4,3},
{8,6,3,2,4,5,1,7},
{8,6,3,2,4,7,1,5},
{8,6,3,7,2,1,4,5}
};