morse-wip/README

120 wiersze
3.0 KiB
Plaintext

MORSE - PROJECT IDEAS
0. To build/install from scratch
aclocal
autoconf
autoheader
automake --add-missing
./configure
make
http://inti.sourceforge.net/tutorial/libinti/autotoolsproject.html
1. Build a simple to use C/C++ advanced Bayesian Morse decoder library
Basic use case example:
#include "morse.h"
...
morse_init(modelparams);
...
...
decode_process(double value) {
char *morsechr;
...
// detected signal value after AGC and filtering
if ( morse_decode(value, morsechr) )
printf("%s", morsechr);
...
}
This can be integrated to any system, even as embedded code.
FLDIGI as the first integration target.
2. Build an automated test framework and a test gallery of datasets.
Input
Wav or MP3 files and transcript files
- resampling code from here http://www.mega-nerd.com/SRC/index.html
Synthetic test datasets (known SNR, timing, speed)
Real world datasets
Model parameters
Output
SER vs. SNR graphs DONE
- can be created using OpenOffice (LibreOffice Calc)
- plot for different filter widths (aka -spd parameter)
- run through different parameter values using automated TCL script
-> automate CSV file generation
-> capture best values & corresponding software versions in SQLITE3 database
<SW version> < date> <parameters,like filter bw> <CER vs. SNR value pairs>
SER vs. timing variations
- need to create morse.m version with timing variability functionality
-
SER vs. speed variations
- need to create morse.m version with speed variability functionality
SER per character
-
Misrecognition distribution (input chr vs. output chr)
- i.e. A recognized as U
- confusion matrix
Symbol Error Rate (SER)
- print recognized symbols ". - ~ ^ w p"
- use Levenshtein distance calculation as error metric
-
Path length vs. SNR
-
Estimated speed vs. actual speed distribution
-
examples:
http://www.yorku.ca/mack/IWC99.html
Test cases repository
regression testing
test results by software version
http://orgmode.org/worg/org-contrib/babel/examples/data-collection-analysis.html
3. CW Skimmer type functionality
Automatically detect CW signals in the baseband
- initialize
do
- get input buffer (512 samples * 1/Fs) (Fs=4000 Hz)
- calculate FFT
- find peaks in power spectrum Ps
- Fpeak = peak_detect(Ps,delta)
- integrate Fpeak over N timeslots (64 .. 128 ms ? )
- calculate noise floor level
- noisemax => frequency bins from 1 to first detected peak
- fbin => freq bin size
- Pxx => power spectrum
=> Nrms = sqrt(sum(Pxx(1:noisemax)*fbin)) / sqrt(f(noisemax));
- update delta & threshold
- calculate SNR of found Fpeak
- integrate Srms = sqrt(sum(Fpeak +/- 10 Hz)*fbin))
- SNR = Srms / Nrms
if (SNR > threshold )
Run decoder instance on detected signal frequency
while (timer >