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 > 
	





