Morse code(CW) decoder program. Original source is made by Hjalmar Skovholm Hansen OZ1JHM. The program uses the Goertzel Algorithm.
Original information is follow.
http://skovholm.com/cwdecoder
DEMO
configuration.h@0:166e0710d217, 2017-01-27 (annotated)
- 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?
User | Revision | Line number | New 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 |