Morse code(CW) decoder program. Original source is made by Hjalmar Skovholm Hansen OZ1JHM. The program uses the Goertzel Algorithm.

Dependencies:   TextLCD

Original information is follow.
http://skovholm.com/cwdecoder

DEMO

Committer:
kenjiArai
Date:
Fri Jan 27 04:07:01 2017 +0000
Revision:
0:166e0710d217
Morse code (CW) decoder program. Original source is made by Hjalmar Skovholm Hansen OZ1JHM. The program uses the Goertzel Algorithm.
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:166e0710d217 1 /*
kenjiArai 0:166e0710d217 2 * mbed program / cwdecoder
kenjiArai 0:166e0710d217 3 * using the Goertzel Algorithm
kenjiArai 0:166e0710d217 4 * tested on Nucleo-F411RE, F446RE, L476RG mbed board
kenjiArai 0:166e0710d217 5 *
kenjiArai 0:166e0710d217 6 * Copyright (c) 2016,'17 Kenji Arai / JH1PJL
kenjiArai 0:166e0710d217 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:166e0710d217 8 * http://mbed.org/users/kenjiArai/
kenjiArai 0:166e0710d217 9 * Started: January 19th, 2017
kenjiArai 0:166e0710d217 10 * Revised: January 27th, 2017
kenjiArai 0:166e0710d217 11 *
kenjiArai 0:166e0710d217 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
kenjiArai 0:166e0710d217 13 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
kenjiArai 0:166e0710d217 14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
kenjiArai 0:166e0710d217 15 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:166e0710d217 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
kenjiArai 0:166e0710d217 17 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
kenjiArai 0:166e0710d217 18 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:166e0710d217 19 */
kenjiArai 0:166e0710d217 20 ///////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 21 // CW Decoder made by Hjalmar Skovholm Hansen OZ1JHM VER 1.01 //
kenjiArai 0:166e0710d217 22 // Feel free to change, copy or what ever you like but respect //
kenjiArai 0:166e0710d217 23 // that license is http://www.gnu.org/copyleft/gpl.html //
kenjiArai 0:166e0710d217 24 // Discuss and give great ideas on //
kenjiArai 0:166e0710d217 25 // https://groups.yahoo.com/neo/groups/oz1jhm/conversations/messages //
kenjiArai 0:166e0710d217 26 ///////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 27
kenjiArai 0:166e0710d217 28 // Definition -----------------------------------------------------------------
kenjiArai 0:166e0710d217 29 //////////// Sampling Conditions ///////////////////////////////////////////////
kenjiArai 0:166e0710d217 30 #define SAMPLE_RATE 8000.0f // 8KHz
kenjiArai 0:166e0710d217 31 #define TARGET_FREQ 750.0f // 750Hz
kenjiArai 0:166e0710d217 32 #define SAMPLE_NUM 100 // 100 samples
kenjiArai 0:166e0710d217 33 ////////////////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 34
kenjiArai 0:166e0710d217 35 //////////// Operating condition ///////////////////////////////////////////////
kenjiArai 0:166e0710d217 36 // Use Virtual COM line to PC
kenjiArai 0:166e0710d217 37 #if 1 // 1: use, 0: Not use
kenjiArai 0:166e0710d217 38 #define USE_COM // use Communication with PC(UART)
kenjiArai 0:166e0710d217 39 #endif
kenjiArai 0:166e0710d217 40 // Output debug information
kenjiArai 0:166e0710d217 41 #if 0 // 1: use, 0: Not use
kenjiArai 0:166e0710d217 42 #define USE_DEBUG
kenjiArai 0:166e0710d217 43 #endif
kenjiArai 0:166e0710d217 44 ////////////////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 45
kenjiArai 0:166e0710d217 46 //////////// Fixed condition ///////////////////////////////////////////////////
kenjiArai 0:166e0710d217 47 #define HIGH 1
kenjiArai 0:166e0710d217 48 #define LOW 0
kenjiArai 0:166e0710d217 49 #define PI 3.141592653f
kenjiArai 0:166e0710d217 50 #define MILLIS() t.read_ms()
kenjiArai 0:166e0710d217 51
kenjiArai 0:166e0710d217 52
kenjiArai 0:166e0710d217 53 #ifdef USE_COM
kenjiArai 0:166e0710d217 54 #define BAUD(x) pc.baud(x)
kenjiArai 0:166e0710d217 55 #define GETC(x) pc.getc(x)
kenjiArai 0:166e0710d217 56 #define PUTC(x) pc.putc(x)
kenjiArai 0:166e0710d217 57 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 0:166e0710d217 58 #define READABLE(x) pc.readable(x)
kenjiArai 0:166e0710d217 59 #else
kenjiArai 0:166e0710d217 60 #define BAUD(x) {;}
kenjiArai 0:166e0710d217 61 #define GETC(x) {;}
kenjiArai 0:166e0710d217 62 #define PUTC(x) {;}
kenjiArai 0:166e0710d217 63 #define PRINTF(...) {;}
kenjiArai 0:166e0710d217 64 #define READABLE(x) {;}
kenjiArai 0:166e0710d217 65 #endif
kenjiArai 0:166e0710d217 66
kenjiArai 0:166e0710d217 67 #ifdef USE_DEBUG
kenjiArai 0:166e0710d217 68 #define DEBUG(...) pc.printf(__VA_ARGS__)
kenjiArai 0:166e0710d217 69 #else
kenjiArai 0:166e0710d217 70 #define DEBUG(...) {;}
kenjiArai 0:166e0710d217 71 #endif
kenjiArai 0:166e0710d217 72 ////////////////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 73
kenjiArai 0:166e0710d217 74 //------------------------------------------------------------------------------
kenjiArai 0:166e0710d217 75 // Old configuration
kenjiArai 0:166e0710d217 76 //------------------------------------------------------------------------------
kenjiArai 0:166e0710d217 77 #if 0
kenjiArai 0:166e0710d217 78 //////////// Sampling Conditions ///////////////////////////////////////////////
kenjiArai 0:166e0710d217 79 #define SAMPLE_RATE 8000.0f // 8KHz
kenjiArai 0:166e0710d217 80 #define TARGET_FREQ 1000.0f // 1KHz
kenjiArai 0:166e0710d217 81 #define SAMPLE_NUM 100 // 100 samples
kenjiArai 0:166e0710d217 82 ////////////////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 83 #endif
kenjiArai 0:166e0710d217 84 #if 0
kenjiArai 0:166e0710d217 85 //////////// Sampling Conditions ///////////////////////////////////////////////
kenjiArai 0:166e0710d217 86 #define SAMPLE_RATE 12000.0f // 12KHz
kenjiArai 0:166e0710d217 87 #define TARGET_FREQ 750.0f // 750Hz
kenjiArai 0:166e0710d217 88 #define SAMPLE_NUM 50 // 50 samples
kenjiArai 0:166e0710d217 89 ////////////////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 90 #endif
kenjiArai 0:166e0710d217 91 #if 0
kenjiArai 0:166e0710d217 92 //////////// Sampling Conditions ///////////////////////////////////////////////
kenjiArai 0:166e0710d217 93 #define SAMPLE_RATE 48000.0f // 48KHz
kenjiArai 0:166e0710d217 94 #define TARGET_FREQ 800.0f // 800Hz
kenjiArai 0:166e0710d217 95 #define SAMPLE_NUM 100 // 100 samples
kenjiArai 0:166e0710d217 96 ////////////////////////////////////////////////////////////////////////////////
kenjiArai 0:166e0710d217 97 #endif
kenjiArai 0:166e0710d217 98