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.
MySpectrogram/Hamming.hpp@0:e608fc311e4e, 2017-02-05 (annotated)
- 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?
User | Revision | Line number | New 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 |