kopia lustrzana https://github.com/ag1le/morse-wip
120 wiersze
3.0 KiB
Plaintext
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 >
|
|
|
|
|
|
|
|
|
|
|
|
|