kopia lustrzana https://github.com/rs1729/RS
match header bits
rodzic
f4d592a58f
commit
6c23e1a878
|
@ -141,7 +141,8 @@ int getmaxCorr(float *maxv, unsigned int *maxvpos, int len) {
|
||||||
// Maximum im Intervall [sample_out-slen, sample_out-1]
|
// Maximum im Intervall [sample_out-slen, sample_out-1]
|
||||||
// Randwerte zaehlen nicht als Extremwerte;
|
// Randwerte zaehlen nicht als Extremwerte;
|
||||||
// nur neu berechnen, wenn neue Werte groesser als altes Max
|
// nur neu berechnen, wenn neue Werte groesser als altes Max
|
||||||
int slen, pos, mpos;
|
int slen, pos;
|
||||||
|
unsigned int mpos=0;
|
||||||
float m, s0, s, s1;
|
float m, s0, s, s1;
|
||||||
|
|
||||||
int posIn = 0; // -1..0..1; // rs41:0
|
int posIn = 0; // -1..0..1; // rs41:0
|
||||||
|
@ -171,7 +172,7 @@ int getmaxCorr(float *maxv, unsigned int *maxvpos, int len) {
|
||||||
*maxvpos = mpos;
|
*maxvpos = mpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return mpos-sample_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
int f32buf_sample(FILE *fp, int inv, int cm) {
|
int f32buf_sample(FILE *fp, int inv, int cm) {
|
||||||
|
@ -192,7 +193,7 @@ int f32buf_sample(FILE *fp, int inv, int cm) {
|
||||||
|
|
||||||
if (cm) {
|
if (cm) {
|
||||||
if (sample_in > sample_in0+1 || sample_in <= sample_in0) {
|
if (sample_in > sample_in0+1 || sample_in <= sample_in0) {
|
||||||
for (i = 0; i < M; i++) corrbuf[i] = 0.0;
|
for (i = 0; i < M; i++) corrbuf[i] = 0.0; // -1.0
|
||||||
}
|
}
|
||||||
norm = 0.0;
|
norm = 0.0;
|
||||||
// for (i = 0; i < N; i++) {
|
// for (i = 0; i < N; i++) {
|
||||||
|
@ -218,7 +219,7 @@ int f32buf_sample(FILE *fp, int inv, int cm) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_bufbit(int symlen, char *bits, int ofs, int reset) {
|
static int read_bufbit(int symlen, char *bits, unsigned int mvp, int reset) {
|
||||||
// symlen==2: manchester2 0->10,1->01->1: 2.bit
|
// symlen==2: manchester2 0->10,1->01->1: 2.bit
|
||||||
|
|
||||||
static unsigned int rcount;
|
static unsigned int rcount;
|
||||||
|
@ -227,21 +228,21 @@ static int read_bufbit(int symlen, char *bits, int ofs, int reset) {
|
||||||
double sum = 0.0;
|
double sum = 0.0;
|
||||||
|
|
||||||
if (reset) {
|
if (reset) {
|
||||||
rcount = 0; // eigentlich scount = 1
|
rcount = 0;
|
||||||
rbitgrenze = 0; // oder bitgrenze = -1
|
rbitgrenze = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rbitgrenze += samples_per_bit;
|
rbitgrenze += samples_per_bit;
|
||||||
do {
|
do {
|
||||||
sum += bufs[(sample_out+rcount + 2*M +ofs) % M];
|
sum += bufs[(rcount + mvp + M) % M];
|
||||||
rcount++;
|
rcount++;
|
||||||
} while (rcount < rbitgrenze); // n < samples_per_bit
|
} while (rcount < rbitgrenze); // n < samples_per_bit
|
||||||
|
|
||||||
if (symlen == 2) {
|
if (symlen == 2) {
|
||||||
rbitgrenze += samples_per_bit;
|
rbitgrenze += samples_per_bit;
|
||||||
do {
|
do {
|
||||||
sum -= bufs[(sample_out+rcount + 2*M +ofs) % M];
|
sum -= bufs[(rcount + mvp + M) % M];
|
||||||
rcount++;
|
rcount++;
|
||||||
} while (rcount < rbitgrenze); // n < samples_per_bit
|
} while (rcount < rbitgrenze); // n < samples_per_bit
|
||||||
}
|
}
|
||||||
|
@ -259,14 +260,14 @@ static int read_bufbit(int symlen, char *bits, int ofs, int reset) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int headcmp(int symlen, char *hdr, int len, int ofs) {
|
int headcmp(int symlen, char *hdr, int len, unsigned int mvp) {
|
||||||
int errs = 0;
|
int errs = 0;
|
||||||
int pos;
|
int pos;
|
||||||
int step = 1;
|
int step = 1;
|
||||||
if (symlen != 1) step = 2;
|
if (symlen != 1) step = 2;
|
||||||
|
|
||||||
for (pos = 0; pos < len; pos += step) {
|
for (pos = 0; pos < len; pos += step) {
|
||||||
read_bufbit(symlen, rawbits+pos, len*samples_per_bit+ofs, pos==0);
|
read_bufbit(symlen, rawbits+pos, mvp+1-(int)(len*samples_per_bit), pos==0);
|
||||||
}
|
}
|
||||||
rawbits[pos] = '\0';
|
rawbits[pos] = '\0';
|
||||||
|
|
||||||
|
@ -344,7 +345,7 @@ static double norm2_match() {
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
int init_buffers(char hdr[], int hLen, int bitofs, int shape) {
|
int init_buffers(char hdr[], int hLen, int shape) {
|
||||||
//hLen = strlen(header) = HEADLEN;
|
//hLen = strlen(header) = HEADLEN;
|
||||||
|
|
||||||
int i, pos;
|
int i, pos;
|
||||||
|
@ -380,7 +381,7 @@ int init_buffers(char hdr[], int hLen, int bitofs, int shape) {
|
||||||
|| ( pos > 0 && hdr[pos-1]!=hdr[pos] && x < 0.0 ) ) // x=0: a=sqalp
|
|| ( pos > 0 && hdr[pos-1]!=hdr[pos] && x < 0.0 ) ) // x=0: a=sqalp
|
||||||
{
|
{
|
||||||
switch (shape) {
|
switch (shape) {
|
||||||
case 1: if ( fabs(x) > 0.5 ) a *= (1 - fabs(x))/0.5;
|
case 1: if ( fabs(x) > 0.6 ) a *= (1 - fabs(x))/0.6;
|
||||||
break;
|
break;
|
||||||
case 2: a = sqalp * exp(-alpha*x*x);
|
case 2: a = sqalp * exp(-alpha*x*x);
|
||||||
break;
|
break;
|
||||||
|
@ -388,7 +389,7 @@ int init_buffers(char hdr[], int hLen, int bitofs, int shape) {
|
||||||
break;
|
break;
|
||||||
default: a = sqalp;
|
default: a = sqalp;
|
||||||
if (i-pos*samples_per_bit < 2 ||
|
if (i-pos*samples_per_bit < 2 ||
|
||||||
i-pos*samples_per_bit > samples_per_bit-2) a = 0.9*sqalp;
|
i-pos*samples_per_bit > samples_per_bit-2) a = 0.8*sqalp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,10 @@ int f32buf_sample(FILE*, int, int);
|
||||||
int read_sbit(FILE*, int, int*, int, int, int, int);
|
int read_sbit(FILE*, int, int*, int, int, int, int);
|
||||||
|
|
||||||
int getmaxCorr(float*, unsigned int*, int);
|
int getmaxCorr(float*, unsigned int*, int);
|
||||||
int headcmp(int, char*, int, int);
|
int headcmp(int, char*, int, unsigned int);
|
||||||
float get_var(void);
|
float get_var(void);
|
||||||
|
|
||||||
int init_buffers(char*, int, int, int);
|
int init_buffers(char*, int, int);
|
||||||
int free_buffers(void);
|
int free_buffers(void);
|
||||||
|
|
||||||
unsigned int get_sample(void);
|
unsigned int get_sample(void);
|
||||||
|
|
|
@ -593,16 +593,16 @@ int main(int argc, char **argv) {
|
||||||
int bitpos = 0;
|
int bitpos = 0;
|
||||||
int bitQ;
|
int bitQ;
|
||||||
int pos;
|
int pos;
|
||||||
int herrs;
|
int herrs, herr1;
|
||||||
int headerlen = 0;
|
int headerlen = 0;
|
||||||
int frm = 0, nfrms = 4; // nfrms=1,2,4,8
|
int frm = 0, nfrms = 8; // nfrms=1,2,4,8
|
||||||
|
|
||||||
float mv;
|
float mv;
|
||||||
unsigned int mv_pos, mv0_pos;
|
unsigned int mv_pos, mv0_pos;
|
||||||
|
|
||||||
float thres = 0.6;
|
float thres = 0.6;
|
||||||
|
|
||||||
int bitofs = 0;
|
int bitofs = 0, dif = 0;
|
||||||
|
|
||||||
|
|
||||||
#ifdef CYGWIN
|
#ifdef CYGWIN
|
||||||
|
@ -666,8 +666,8 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
|
||||||
headerlen = strlen(rawheader);
|
headerlen = strlen(rawheader);
|
||||||
bitofs = 0; // -1 .. +1
|
bitofs = 2; // +1 .. +2
|
||||||
if (init_buffers(rawheader, headerlen, bitofs, 1) < 0) { // shape=1
|
if (init_buffers(rawheader, headerlen, 0) < 0) { // shape=0 (alt. shape=1)
|
||||||
fprintf(stderr, "error: init buffers\n");
|
fprintf(stderr, "error: init buffers\n");
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
@ -678,13 +678,21 @@ int main(int argc, char **argv) {
|
||||||
while ( f32buf_sample(fp, option_inv, 1) != EOF ) {
|
while ( f32buf_sample(fp, option_inv, 1) != EOF ) {
|
||||||
|
|
||||||
mv0_pos = mv_pos;
|
mv0_pos = mv_pos;
|
||||||
getmaxCorr(&mv, &mv_pos, headerlen+headerlen/2);
|
dif = getmaxCorr(&mv, &mv_pos, headerlen+headerlen/2);
|
||||||
|
|
||||||
if (mv > thres) {
|
if (mv > thres) {
|
||||||
if (mv_pos > mv0_pos) {
|
if (mv_pos > mv0_pos) {
|
||||||
|
|
||||||
header_found = 0;
|
header_found = 0;
|
||||||
herrs = headcmp(2, rawheader, headerlen, bitofs); // symlen=2
|
herrs = headcmp(2, rawheader, headerlen, mv_pos); // symlen=2
|
||||||
|
herr1 = 0;
|
||||||
|
if (herrs <= 3 && herrs > 0) {
|
||||||
|
herr1 = headcmp(2, rawheader, headerlen, mv_pos+1);
|
||||||
|
if (herr1 < herrs) {
|
||||||
|
herrs = herr1;
|
||||||
|
herr1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (herrs <= 1) header_found = 1; // herrs <= 1 bitfehler in header
|
if (herrs <= 1) header_found = 1; // herrs <= 1 bitfehler in header
|
||||||
|
|
||||||
if (header_found) {
|
if (header_found) {
|
||||||
|
@ -694,11 +702,11 @@ int main(int argc, char **argv) {
|
||||||
pos /= 2;
|
pos /= 2;
|
||||||
|
|
||||||
frm = 0;
|
frm = 0;
|
||||||
while ( frm < nfrms ) { // nfrms=1,4,8
|
while ( frm < nfrms ) { // nfrms=1,2,4,8
|
||||||
while ( pos < BITFRAME_LEN ) {
|
while ( pos < BITFRAME_LEN ) {
|
||||||
header_found = !(frm==nfrms-1 && pos>=BITFRAME_LEN-10);
|
header_found = !(frm==nfrms-1 && pos>=BITFRAME_LEN-10);
|
||||||
bitQ = read_sbit(fp, 2, &bit, option_inv, bitofs, bitpos==0, !header_found); // symlen=2, return: zeroX/bit
|
bitQ = read_sbit(fp, 2, &bit, option_inv, dif+bitofs, bitpos==0, !header_found); // symlen=2, return: zeroX/bit
|
||||||
//bitQ = read_sbit(fp, 2, &bit, option_inv, bitofs, bitpos==0, 0); // symlen=2, return: zeroX/bit
|
//bitQ = read_sbit(fp, 2, &bit, option_inv, dif+bitofs, bitpos==0, 0); // symlen=2, return: zeroX/bit
|
||||||
if (bitQ == EOF) { frm = nfrms; break; }
|
if (bitQ == EOF) { frm = nfrms; break; }
|
||||||
frame_bits[pos] = 0x30 + bit;
|
frame_bits[pos] = 0x30 + bit;
|
||||||
pos++;
|
pos++;
|
||||||
|
|
|
@ -1064,7 +1064,7 @@ int main(int argc, char *argv[]) {
|
||||||
int bit, byte;
|
int bit, byte;
|
||||||
int frmlen = FRAME_LEN;
|
int frmlen = FRAME_LEN;
|
||||||
int headerlen;
|
int headerlen;
|
||||||
int herrs;
|
int herrs, herr1;
|
||||||
int bitQ, Qerror_count;
|
int bitQ, Qerror_count;
|
||||||
|
|
||||||
float mv;
|
float mv;
|
||||||
|
@ -1072,7 +1072,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
float thres = 0.7;
|
float thres = 0.7;
|
||||||
|
|
||||||
int bitofs = 0;
|
int bitofs = 0, dif = 0;
|
||||||
|
|
||||||
|
|
||||||
#ifdef CYGWIN
|
#ifdef CYGWIN
|
||||||
|
@ -1146,8 +1146,8 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
headerlen = strlen(header);
|
headerlen = strlen(header);
|
||||||
bitofs = +1; // -1 .. +1
|
bitofs = 2; // +1 .. +2
|
||||||
if (init_buffers(header, headerlen, bitofs, 2) < 0) { // shape=2
|
if (init_buffers(header, headerlen, 2) < 0) { // shape=2
|
||||||
fprintf(stderr, "error: init buffers\n");
|
fprintf(stderr, "error: init buffers\n");
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
@ -1158,13 +1158,21 @@ int main(int argc, char *argv[]) {
|
||||||
while ( f32buf_sample(fp, option_inv, 1) != EOF ) {
|
while ( f32buf_sample(fp, option_inv, 1) != EOF ) {
|
||||||
|
|
||||||
mv0_pos = mv_pos;
|
mv0_pos = mv_pos;
|
||||||
getmaxCorr(&mv, &mv_pos, headerlen+headerlen/2);
|
dif = getmaxCorr(&mv, &mv_pos, headerlen+headerlen/2);
|
||||||
|
|
||||||
if (mv > thres) {
|
if (mv > thres) {
|
||||||
if (mv_pos > mv0_pos) {
|
if (mv_pos > mv0_pos) {
|
||||||
|
|
||||||
header_found = 0;
|
header_found = 0;
|
||||||
herrs = headcmp(1, header, headerlen, bitofs); // symlen=1
|
herrs = headcmp(1, header, headerlen, mv_pos); // symlen=1
|
||||||
|
herr1 = 0;
|
||||||
|
if (herrs <= 3 && herrs > 0) {
|
||||||
|
herr1 = headcmp(2, header, headerlen, mv_pos+1);
|
||||||
|
if (herr1 < herrs) {
|
||||||
|
herrs = herr1;
|
||||||
|
herr1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (herrs <= 2) header_found = 1; // herrs <= 2 bitfehler in header
|
if (herrs <= 2) header_found = 1; // herrs <= 2 bitfehler in header
|
||||||
|
|
||||||
if (header_found) {
|
if (header_found) {
|
||||||
|
@ -1176,7 +1184,7 @@ int main(int argc, char *argv[]) {
|
||||||
Qerror_count = 0;
|
Qerror_count = 0;
|
||||||
|
|
||||||
while ( byte_count < frmlen ) {
|
while ( byte_count < frmlen ) {
|
||||||
bitQ = read_sbit(fp, 1, &bit, option_inv, bitofs, bit_count==0, 0); // symlen=1, return: zeroX/bit
|
bitQ = read_sbit(fp, 1, &bit, option_inv, dif+bitofs, bit_count==0, 0); // symlen=1, return: zeroX/bit
|
||||||
if ( bitQ == EOF) break;
|
if ( bitQ == EOF) break;
|
||||||
bit_count += 1;
|
bit_count += 1;
|
||||||
bitbuf[bitpos] = bit;
|
bitbuf[bitpos] = bit;
|
||||||
|
@ -1207,7 +1215,7 @@ int main(int argc, char *argv[]) {
|
||||||
print_frame(byte_count);
|
print_frame(byte_count);
|
||||||
|
|
||||||
while ( bit_count < BITS*FRAME_LEN ) {
|
while ( bit_count < BITS*FRAME_LEN ) {
|
||||||
bitQ = read_sbit(fp, 1, &bit, option_inv, bitofs, bit_count==0, 0); // symlen=1, return: zeroX/bit
|
bitQ = read_sbit(fp, 1, &bit, option_inv, dif+bitofs, bit_count==0, 0); // symlen=1, return: zeroX/bit
|
||||||
if ( bitQ == EOF) break;
|
if ( bitQ == EOF) break;
|
||||||
bit_count++;
|
bit_count++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1214,7 +1214,7 @@ int main(int argc, char *argv[]) {
|
||||||
header_found = 0;
|
header_found = 0;
|
||||||
int bit, byte;
|
int bit, byte;
|
||||||
int bitQ;
|
int bitQ;
|
||||||
int herrs;
|
int herrs, herr1;
|
||||||
int headerlen = 0;
|
int headerlen = 0;
|
||||||
|
|
||||||
float mv;
|
float mv;
|
||||||
|
@ -1222,7 +1222,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
float thres = 0.7;
|
float thres = 0.7;
|
||||||
|
|
||||||
int bitofs = 0;
|
int bitofs = 0, dif = 0;
|
||||||
|
|
||||||
|
|
||||||
#ifdef CYGWIN
|
#ifdef CYGWIN
|
||||||
|
@ -1379,8 +1379,8 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
|
|
||||||
headerlen = strlen(rawheader);
|
headerlen = strlen(rawheader);
|
||||||
bitofs = 0; // -1 .. +1
|
bitofs = 2; // +1 .. +2
|
||||||
if (init_buffers(rawheader, headerlen, bitofs, 2) < 0) { // shape=2
|
if (init_buffers(rawheader, headerlen, 2) < 0) { // shape=2
|
||||||
fprintf(stderr, "error: init buffers\n");
|
fprintf(stderr, "error: init buffers\n");
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
@ -1390,13 +1390,21 @@ int main(int argc, char *argv[]) {
|
||||||
while ( f32buf_sample(fp, option_inv, 1) != EOF ) {
|
while ( f32buf_sample(fp, option_inv, 1) != EOF ) {
|
||||||
|
|
||||||
mv0_pos = mv_pos;
|
mv0_pos = mv_pos;
|
||||||
getmaxCorr(&mv, &mv_pos, headerlen+headerlen/2);
|
dif = getmaxCorr(&mv, &mv_pos, headerlen+headerlen/2);
|
||||||
|
|
||||||
if (mv > thres) {
|
if (mv > thres) {
|
||||||
if (mv_pos > mv0_pos) {
|
if (mv_pos > mv0_pos) {
|
||||||
|
|
||||||
header_found = 0;
|
header_found = 0;
|
||||||
herrs = headcmp(2, rawheader, headerlen, bitofs); // symlen=2
|
herrs = headcmp(2, rawheader, headerlen, mv_pos); // symlen=2
|
||||||
|
herr1 = 0;
|
||||||
|
if (herrs <= 3 && herrs > 0) {
|
||||||
|
herr1 = headcmp(2, rawheader, headerlen, mv_pos+1);
|
||||||
|
if (herr1 < herrs) {
|
||||||
|
herrs = herr1;
|
||||||
|
herr1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (herrs <= 2) header_found = 1; // herrs <= 2 bitfehler in header
|
if (herrs <= 2) header_found = 1; // herrs <= 2 bitfehler in header
|
||||||
|
|
||||||
if (header_found) {
|
if (header_found) {
|
||||||
|
@ -1407,7 +1415,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
while ( byte_count < FRAME_LEN ) {
|
while ( byte_count < FRAME_LEN ) {
|
||||||
header_found = !(byte_count>=FRAME_LEN-2);
|
header_found = !(byte_count>=FRAME_LEN-2);
|
||||||
bitQ = read_sbit(fp, 2, &bit, option_inv, bitofs, bit_count==0, !header_found); // symlen=2, return: zeroX/bit
|
bitQ = read_sbit(fp, 2, &bit, option_inv, dif+bitofs, bit_count==0, !header_found); // symlen=2, return: zeroX/bit
|
||||||
if ( bitQ == EOF) break;
|
if ( bitQ == EOF) break;
|
||||||
bit_count += 1;
|
bit_count += 1;
|
||||||
bitbuf[bitpos] = bit;
|
bitbuf[bitpos] = bit;
|
||||||
|
|
Ładowanie…
Reference in New Issue