====
[ ] FreeDV 700 mode
- [ ] integrate freedv API
+ [X] interp of 8k to 7500Hz for analog bypass.
+ [X] integrate freedv API
[X] varicode, codec, modem states
[X] tx and rx freq shifts
- [ ] generic, mode indep, sync, snr, scatter?
+ [X] generic, mode indep, sync, snr, scatter?
+ [ ] text working on 700
[ ] add 700 to freedv API
- [ ] modem signal spectrum and stats consistent with fdmdv
+ [X] modem signal spectrum and stats consistent with fdmdv
+ [X] rx from file works
+ [ ] tx works
[ ] clipper a check box, so we can see difference in spectrum
[ ] cohpsk snr est
- [ ] freedv api
- [ ] normalise output pwr across modes?
- + or maybe peak output?
- + option?
- [X] support for both varicodes
[ ] test mode
- + get error patterns working again, both modes
- + how to plot error histogram
+ [ ] get error patterns working again, both 700 and 1600
+ [ ] how to plot error histogram
[ ] file sample replay at 7500Hz work OK?
- [X] interp of 8k to 7500Hz for analog bypass.
[ ] interp 7500 to 8k for spectrum plotting
- [ ] filter around clipping
- + to tcohpsk first
+ [ ] bpf filter after clipping
+ [ ] tcohpsk first
[ ] Small fixes
[X] Playfile bug
[X] running again
g_snr = m_snrBeta*g_snr + (1.0 - m_snrBeta)*g_stats.snr_est;
float snr_limited = g_snr;
+ if (snr_limited < -5.0) snr_limited = -5.0;
+ if (snr_limited > 20.0) snr_limited = 20.0;
- if (snr_limited < -9.0) snr_limited = -9.0; // stop text box overflow
char snr[15];
- if (wxGetApp().m_snrSlow)
- sprintf(snr, "%4.1f", snr_limited);
- else
- sprintf(snr, "%d", (int)(snr_limited+0.5)); // round to nearest dB
+ sprintf(snr, "%d", (int)(snr_limited+0.5)); // round to nearest dB
+
+ //printf("snr_est: %f m_snrBeta: %f g_snr: %f snr_limited: %f\n", g_stats.snr_est, m_snrBeta, g_snr, snr_limited);
+
wxString snr_string(snr);
m_textSNR->SetLabel(snr_string);
+ m_gaugeSNR->SetValue((int)(snr_limited+5));
- if (snr_limited < 0.0) snr_limited = 0;
- if (snr_limited > 20.0) snr_limited = 20.0;
- m_gaugeSNR->SetValue((int)(snr_limited));
- //printf("snr_limited: %f\n", snr_limited);
-
+
// Level Gauge -----------------------------------------------------------------------
float tooHighThresh;
{
if(snrSlow)
{
- m_snrBeta = 0.9; // make this closer to 1.0 to smooth SNR est further
+ m_snrBeta = 0.95; // make this closer to 1.0 to smooth SNR est further
}
else
{
)
{
SRC_DATA src_data;
- float input[N48*2];
- float output[N48*2];
+ float input[N48*4];
+ float output[N48*4];
int ret;
assert(src != NULL);
- assert(length_input_short <= N48*2);
- assert(length_output_short <= N48*2);
+ assert(length_input_short <= N48*4);
+ assert(length_output_short <= N48*4);
src_short_to_float_array(input_short, input, length_input_short);
// signals in in48k/out48k are at a maximum sample rate of 48k, could be 44.1kHz
// depending on sound hardware.
- short in8k_short[N8];
- short in48k_short[N48];
- short out8k_short[N8];
- short out48k_short[N48];
+ short in8k_short[4*N8];
+ short in48k_short[4*N48];
+ short out8k_short[4*N8];
+ short out48k_short[4*N48];
int nout;
//wxLogDebug("start infifo1: %5d outfifo1: %5d\n", fifo_n(cbData->infifo1), fifo_n(cbData->outfifo1));
g_mutexProtectingCallbackData.Unlock();
int nsam = g_soundCard2SampleRate * g_pfreedv->n_speech_samples/FS;
- assert(nsam <= 2*N48);
+ assert(nsam <= 4*N48);
// infifo2 is written to by another sound card so it may
// over or underflow, but we don't realy care. It will
nin = freedv_nin(g_pfreedv);
g_State = g_pfreedv->sync;
- g_snr = g_pfreedv->snr_est;
// compute rx spectrum & get demod stats, and update GUI plot data
//------------------------------
// S/N ratio Guage (vert. bargraph)
//------------------------------
- m_gaugeSNR = new wxGauge(this, wxID_ANY, 20, wxDefaultPosition, wxSize(15,135), wxGA_SMOOTH|wxGA_VERTICAL);
+ m_gaugeSNR = new wxGauge(this, wxID_ANY, 25, wxDefaultPosition, wxSize(15,135), wxGA_SMOOTH|wxGA_VERTICAL);
m_gaugeSNR->SetToolTip(_("Displays signal to noise ratio in dB."));
snrSizer->Add(m_gaugeSNR, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 10);