CW Decoder (Morse code decoder) 1st release version. mbed = 131 revision (Not latest) is used. Only run on DISCO-F746NG mbed board.

Dependencies:   BSP_DISCO_F746NG F746_GUI F746_SAI_IO LCD_DISCO_F746NG TS_DISCO_F746NG UIT_FFT_Real mbed

Base on F746_Spectrogram program created by 不韋 呂-san.
/users/MikamiUitOpen/code/F746_Spectrogram/
Thanks 不韋 呂-san to use fundamental parts such as FFT, SAI, GUI and other useful subroutines.
You do NOT need any modification for mbed hardware and NO additional circuits.
The mbed board read CW tone from your receiver speaker via MEMES microphone (on board) and show it on the screen.

Committer:
kenjiArai
Date:
Sun Feb 05 07:49:54 2017 +0000
Revision:
0:e608fc311e4e
CW Decoder (Morse code decoder) 1st release version. mbed = 131 revision (Not latest) is used. Only run on DISCO-F746NG mbed board.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:e608fc311e4e 1 //-------------------------------------------------------------------
kenjiArai 0:e608fc311e4e 2 // Hamming windowing with zero-padding
kenjiArai 0:e608fc311e4e 3 //
kenjiArai 0:e608fc311e4e 4 // 2016/07/23, Copyright (c) 2016 MIKAMI, Naoki
kenjiArai 0:e608fc311e4e 5 //-------------------------------------------------------------------
kenjiArai 0:e608fc311e4e 6
kenjiArai 0:e608fc311e4e 7 #ifndef HAMMING_WINDOW_HPP
kenjiArai 0:e608fc311e4e 8 #define HAMMING_WINDOW_HPP
kenjiArai 0:e608fc311e4e 9
kenjiArai 0:e608fc311e4e 10 #include "mbed.h"
kenjiArai 0:e608fc311e4e 11 #include "Array.hpp"
kenjiArai 0:e608fc311e4e 12
kenjiArai 0:e608fc311e4e 13 namespace Mikami
kenjiArai 0:e608fc311e4e 14 {
kenjiArai 0:e608fc311e4e 15 class HammingWindow
kenjiArai 0:e608fc311e4e 16 {
kenjiArai 0:e608fc311e4e 17 public:
kenjiArai 0:e608fc311e4e 18 // Constructor
kenjiArai 0:e608fc311e4e 19 HammingWindow(uint16_t nData, uint16_t nFft)
kenjiArai 0:e608fc311e4e 20 : N_(nData), NFFT_(nFft), w_(nData)
kenjiArai 0:e608fc311e4e 21 {
kenjiArai 0:e608fc311e4e 22 float pi2L = 6.283185f/(float)nData;
kenjiArai 0:e608fc311e4e 23 for (int k=0; k<nData; k++)
kenjiArai 0:e608fc311e4e 24 w_[k] = 0.54f - 0.46f*cosf(k*pi2L);
kenjiArai 0:e608fc311e4e 25 }
kenjiArai 0:e608fc311e4e 26
kenjiArai 0:e608fc311e4e 27 // Destructor
kenjiArai 0:e608fc311e4e 28 virtual ~HammingWindow() {}
kenjiArai 0:e608fc311e4e 29
kenjiArai 0:e608fc311e4e 30 // Windowing
kenjiArai 0:e608fc311e4e 31 void Execute(const float x[], float y[])
kenjiArai 0:e608fc311e4e 32 {
kenjiArai 0:e608fc311e4e 33 for (int n=0; n<N_; n++) y[n] = x[n]*w_[n];
kenjiArai 0:e608fc311e4e 34 for (int n=N_; n<NFFT_; n++) y[n] = 0;
kenjiArai 0:e608fc311e4e 35 }
kenjiArai 0:e608fc311e4e 36
kenjiArai 0:e608fc311e4e 37 private:
kenjiArai 0:e608fc311e4e 38 const int N_;
kenjiArai 0:e608fc311e4e 39 const int NFFT_;
kenjiArai 0:e608fc311e4e 40
kenjiArai 0:e608fc311e4e 41 Array<float> w_;
kenjiArai 0:e608fc311e4e 42
kenjiArai 0:e608fc311e4e 43 // disallow copy constructor and assignment operator
kenjiArai 0:e608fc311e4e 44 HammingWindow(const HammingWindow& );
kenjiArai 0:e608fc311e4e 45 HammingWindow& operator=(const HammingWindow& );
kenjiArai 0:e608fc311e4e 46 };
kenjiArai 0:e608fc311e4e 47 }
kenjiArai 0:e608fc311e4e 48 #endif // HAMMING_WINDOW_HPP