kopia lustrzana https://github.com/jamescoxon/dl-fldigi
S/N evaluators
RTTY - added s/n evaluator, decreased metric sensitivity - changed b/w indicator to agree with b/w config slider DOMEX - corrected s/n evaluator.pull/2/head
rodzic
070f84d487
commit
a06bf93546
|
@ -164,22 +164,22 @@ void rtty::restart()
|
|||
symbollen = (int) (samplerate / rtty_baud + 0.5);
|
||||
set_bandwidth(shift);
|
||||
|
||||
rtty_BW = 0.75 * rtty_baud;
|
||||
rtty_BW = 1.5 * rtty_baud;
|
||||
progdefaults.RTTY_BW = rtty_BW;
|
||||
sldrRTTYbandwidth->value(rtty_BW);
|
||||
|
||||
wf->redraw_marker();
|
||||
|
||||
bp_filt_lo = (shift/2.0 - rtty_BW) / samplerate;
|
||||
bp_filt_lo = (shift/2.0 - rtty_BW/2.0) / samplerate;
|
||||
if (bp_filt_lo < 0) bp_filt_lo = 0;
|
||||
bp_filt_hi = (shift/2.0 + rtty_BW) / samplerate;
|
||||
bp_filt_hi = (shift/2.0 + rtty_BW/2.0) / samplerate;
|
||||
|
||||
if (bpfilt)
|
||||
bpfilt->create_filter(bp_filt_lo, bp_filt_hi);
|
||||
else
|
||||
bpfilt = new fftfilt(bp_filt_lo, bp_filt_hi, 1024);
|
||||
|
||||
bflen = symbollen/2;
|
||||
bflen = symbollen/3;///2;
|
||||
if (bitfilt)
|
||||
bitfilt->setLength(bflen);
|
||||
else
|
||||
|
@ -408,16 +408,25 @@ int rtty::rx(bool bit)
|
|||
return flag;
|
||||
}
|
||||
|
||||
char snrmsg[80];
|
||||
void rtty::Metric()
|
||||
{
|
||||
double delta = rtty_baud/4.0;
|
||||
noisepwr = wf->powerDensity(frequency - shift * 1.5, delta) +
|
||||
wf->powerDensity(frequency + shift * 1.5, delta) + 1e-10;
|
||||
sigpwr = wf->powerDensity(frequency - shift/2, delta) +
|
||||
wf->powerDensity(frequency + shift/2, delta) + 1e-10;
|
||||
double snr = sigpwr / noisepwr;
|
||||
metric = decayavg( metric, snr, 8);//16);
|
||||
metric = CLAMP(metric, 0.0, 100.0);
|
||||
double delta = rtty_baud/2.0;
|
||||
double np =
|
||||
wf->powerDensity(frequency - shift * 1.5, delta) +
|
||||
wf->powerDensity(frequency + shift * 1.5, delta) + 1e-10;
|
||||
double sp =
|
||||
wf->powerDensity(frequency - shift/2, delta) +
|
||||
wf->powerDensity(frequency + shift/2, delta) + 1e-10;
|
||||
double snr = 0;
|
||||
|
||||
sigpwr = decayavg( sigpwr, sp, sp - sigpwr > 0 ? 4 : 16);
|
||||
noisepwr = decayavg( noisepwr, np, 64 );
|
||||
snr = 10*log10(sigpwr / ( noisepwr * (2400 / (2*delta))));
|
||||
|
||||
snprintf(snrmsg, sizeof(snrmsg), "s/n %3.0f dB", snr);
|
||||
put_Status1(snrmsg);
|
||||
metric = CLAMP(4 * sigpwr/noisepwr, 0.0, 100.0);
|
||||
display_metric(metric);
|
||||
}
|
||||
|
||||
|
@ -472,9 +481,9 @@ int rtty::rx_process(const double *buf, int len)
|
|||
|
||||
if (progdefaults.RTTY_BW != rtty_BW) {
|
||||
rtty_BW = progdefaults.RTTY_BW;
|
||||
bp_filt_lo = (shift/2.0 - rtty_BW) / samplerate;
|
||||
bp_filt_lo = (shift/2.0 - rtty_BW/2.0) / samplerate;
|
||||
if (bp_filt_lo < 0) bp_filt_lo = 0;
|
||||
bp_filt_hi = (shift/2.0 + rtty_BW) / samplerate;
|
||||
bp_filt_hi = (shift/2.0 + rtty_BW/2.0) / samplerate;
|
||||
bpfilt->create_filter(bp_filt_lo, bp_filt_hi);
|
||||
wf->redraw_marker();
|
||||
}
|
||||
|
|
|
@ -520,7 +520,12 @@ void dominoex::eval_s2n()
|
|||
else
|
||||
s2n = 0;
|
||||
|
||||
metric = 4 * s2n;
|
||||
// metric = 4 * s2n;
|
||||
// To partially offset the increase of noise by (THORNUMTONES -1)
|
||||
// in the noise calculation above,
|
||||
// add 15*log10(THORNUMTONES -1) = 18.4, and multiply by 6
|
||||
metric = 6 * (s2n + 18.4);
|
||||
|
||||
metric = metric < 0 ? 0 : metric > 100 ? 100 : metric;
|
||||
|
||||
display_metric(metric);
|
||||
|
|
|
@ -203,8 +203,8 @@ inline void WFdisp::makeMarker_(int width, const RGB* color, int freq, const RGB
|
|||
if (active_modem->get_mode() == MODE_RTTY) {
|
||||
// rtty has two bandwidth indicators on the waterfall
|
||||
// upper and lower frequency
|
||||
int bw_limit_hi = (int)((_SHIFT[progdefaults.rtty_shift]/2 + progdefaults.RTTY_BW));
|
||||
int bw_limit_lo = (int)((_SHIFT[progdefaults.rtty_shift]/2 - progdefaults.RTTY_BW));
|
||||
int bw_limit_hi = (int)((_SHIFT[progdefaults.rtty_shift]/2 + progdefaults.RTTY_BW / 2.0));
|
||||
int bw_limit_lo = (int)((_SHIFT[progdefaults.rtty_shift]/2 - progdefaults.RTTY_BW / 2.0));
|
||||
int bw_freq = static_cast<int>(freq + 0.5);
|
||||
int bw_lower1 = -bw_limit_hi;
|
||||
int bw_upper1 = -bw_limit_lo;
|
||||
|
|
Ładowanie…
Reference in New Issue