sh123 2022-08-03 21:45:40 +03:00
rodzic 8484dab0eb
commit 320f1dc152
5 zmienionych plików z 18 dodań i 25 usunięć

Wyświetl plik

@ -111,9 +111,8 @@ public class Hdlc implements Protocol {
int packetCrc = ((int)packetBytes[packetBytes.length - 2] & 0xff) | (((int)packetBytes[packetBytes.length - 1] & 0xff) << 8);
//Log.i(TAG, "checksum: " + calculatedCrc + " " + packetCrc);
if (calculatedCrc == packetCrc) {
Log.i(TAG, DebugTools.byteBitsToString(packetBits));
Log.v(TAG, DebugTools.byteBitsToString(packetBits));
Log.i(TAG, "RX: " + DebugTools.bytesToHex(packetBytes));
Log.i(TAG, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
_parentProtocolCallback.onReceiveCompressedAudio(null, null, -1, contentBytes);
}
}

Wyświetl plik

@ -203,7 +203,6 @@ public class SoundModem implements Transport, Runnable {
} catch (InterruptedException e) {
e.printStackTrace();
}
// TODO, take readCnt into account, do not read if playback is active
if (_isLoopback) {
synchronized (_sampleBuffer) {
if (_sampleBuffer.position() / 2 >= nin) {

Wyświetl plik

@ -35,10 +35,6 @@
/* This needs square roots, may take more cpu time than it's worth */
#define EST_EBNO
/* This is a flag to make the mod/demod allocate their memory on the stack instead of the heap */
/* At large sample rates, there's not enough stack space to run the demod */
#define DEMOD_ALLOC_STACK
/* This is a flag for the freq. estimator to use a precomputed/rt computed hann window table
On platforms with slow cosf, this will produce a substantial speedup at the cost of a small
amount of memory
@ -472,14 +468,8 @@ void fsk_demod_freq_est(struct FSK *fsk, COMP fsk_in[], float *freqs, int M) {
int freqi[M];
int st,en,f_zero;
/* Array to do complex FFT from using kiss_fft */
#ifdef DEMOD_ALLOC_STACK
kiss_fft_cpx *fftin = (kiss_fft_cpx*)alloca(sizeof(kiss_fft_cpx)*Ndft);
kiss_fft_cpx *fftout = (kiss_fft_cpx*)alloca(sizeof(kiss_fft_cpx)*Ndft);
#else
kiss_fft_cpx *fftin = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx)*Ndft);
kiss_fft_cpx *fftout = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx)*Ndft);
#endif
st = (fsk->est_min*Ndft)/Fs + Ndft/2; if (st < 0) st = 0;
en = (fsk->est_max*Ndft)/Fs + Ndft/2; if (en > Ndft) en = Ndft;
@ -605,14 +595,13 @@ void fsk_demod_freq_est(struct FSK *fsk, COMP fsk_in[], float *freqs, int M) {
//fprintf(stderr, "fsk->tone_spacing: %d\n",fsk->tone_spacing);
for (int m=0; m<M; m++)
fsk->f2_est[m] = foff + m*fsk->tone_spacing;
#ifdef MODEMPROBE_ENABLE
modem_probe_samp_f("t_f2_est",fsk->f2_est,M);
#endif
#ifndef DEMOD_ALLOC_STACK
free(fftin);
free(fftout);
#endif
}
/* core demodulator function */
@ -777,7 +766,7 @@ void fsk_demod_core(struct FSK *fsk, uint8_t rx_bits[], float rx_filt[], COMP fs
/* resample at ideal sampling instant */
int st = (i+1)*P;
for( m=0; m<M; m++) {
t[m] = fcmult(1-fract,f_int[m][st+ low_sample]);
t[m] = fcmult(1-fract,f_int[m][st+low_sample]);
t[m] = cadd(t[m],fcmult( fract,f_int[m][st+high_sample]));
/* Figure mag^2 of each resampled fx_int */
tmax[m] = (t[m].real*t[m].real) + (t[m].imag*t[m].imag);
@ -830,8 +819,8 @@ void fsk_demod_core(struct FSK *fsk, uint8_t rx_bits[], float rx_filt[], COMP fs
#endif
}
rx_sig_pow = rx_sig_pow/nsym;
rx_nse_pow = rx_nse_pow/nsym;
fsk->rx_sig_pow = rx_sig_pow = rx_sig_pow/nsym;
fsk->rx_nse_pow = rx_nse_pow = rx_nse_pow/nsym;
fsk->v_est = sqrt(rx_sig_pow-rx_nse_pow);
fsk->SNRest = rx_sig_pow/rx_nse_pow;
@ -878,7 +867,7 @@ void fsk_demod_core(struct FSK *fsk, uint8_t rx_bits[], float rx_filt[], COMP fs
/* due to oversample rate P, we have too many samples for eye
trace. So lets output a decimated version. We use 2P
as we want two symbols worth of samples in trace */
#ifndef __EMBEDDED__
int neyesamp_dec = ceil(((float)P*2)/MODEM_STATS_EYE_IND_MAX);
neyesamp = (P*2)/neyesamp_dec;
assert(neyesamp <= MODEM_STATS_EYE_IND_MAX);
@ -899,8 +888,9 @@ void fsk_demod_core(struct FSK *fsk, uint8_t rx_bits[], float rx_filt[], COMP fs
j*neweyesamp_dec: For 2*P>MODEM_STATS_EYE_IND_MAX advance through integrated
samples newamp_dec at a time so we dont overflow rx_eye[][]
*/
ind = 2*P*i + neyeoffset + j*neyesamp_dec;
ind = 2*P*(i+1) + neyeoffset + j*neyesamp_dec;
assert((i*M+m) < MODEM_STATS_ET_MAX);
assert(ind >= 0);
assert(ind < (nsym+1)*P);
fsk->stats->rx_eye[i*M+m][j] = cabsolute(f_int[m][ind]);
}
@ -925,7 +915,8 @@ void fsk_demod_core(struct FSK *fsk, uint8_t rx_bits[], float rx_filt[], COMP fs
for(i=0; i<M; i++)
fsk->stats->f_est[i] = f_est[i];
#endif // !__EMBEDDED__
/* Dump some internal samples */
modem_probe_samp_f("t_EbNodB",&(fsk->EbNodB),1);
modem_probe_samp_f("t_ppm",&(fsk->ppm),1);
@ -966,7 +957,7 @@ static void stats_init(struct FSK *fsk) {
/* asserts below as we found some problems over-running eye matrix */
/* TODO: refactor eye tracing code here and in fsk_demod */
#ifndef __EMBEDDED__
int neyesamp_dec = ceil(((float)P*2)/MODEM_STATS_EYE_IND_MAX);
int neyesamp = (P*2)/neyesamp_dec;
assert(neyesamp <= MODEM_STATS_EYE_IND_MAX);
@ -983,6 +974,7 @@ static void stats_init(struct FSK *fsk) {
}
}
}
#endif // !__EMBEDDED__
fsk->stats->rx_timing = fsk->stats->snr_est = 0;
@ -1016,12 +1008,13 @@ void fsk_get_demod_stats(struct FSK *fsk, struct MODEM_STATS *stats){
stats->snr_est = fsk->stats->snr_est; // TODO: make this SNR not Eb/No
stats->rx_timing = fsk->stats->rx_timing;
stats->foff = fsk->stats->foff;
#ifndef __EMBEDDED__
stats->neyesamp = fsk->stats->neyesamp;
stats->neyetr = fsk->stats->neyetr;
memcpy(stats->rx_eye, fsk->stats->rx_eye, sizeof(stats->rx_eye));
memcpy(stats->f_est, fsk->stats->f_est, fsk->mode*sizeof(float));
#endif // !__EMBEDDED__
/* these fields not used for FSK so set to something sensible */
stats->sync = 0;

Wyświetl plik

@ -85,6 +85,8 @@ struct FSK {
float ppm; /* Estimated PPM clock offset */
float SNRest; /* used for LLRs */
float v_est; /* used for LLRs */
float rx_sig_pow;
float rx_nse_pow;
/* Parameters used by mod/demod and driving code */
int nin; /* Number of samples to feed the next demod cycle */

Wyświetl plik

@ -60,7 +60,7 @@ namespace Java_com_ustadmobile_codec2_Codec2 {
struct ContextFsk *conFsk;
conFsk = (struct ContextFsk *) malloc(sizeof(struct ContextFsk));
struct FSK *fsk;
fsk = fsk_create_hbr(sampleFrequency, symbolRate, MODE_2FSK, sampleFrequency/symbolRate, FSK_DEFAULT_NSYM, toneFreq, toneSpacing);
fsk = fsk_create_hbr(sampleFrequency, symbolRate, MODE_2FSK, 10, FSK_DEFAULT_NSYM, toneFreq, toneSpacing);
conFsk->fsk = fsk;
conFsk->Nbits = fsk->Nbits;