HanningWindow, HammingWindow, BlackmanWindow の各クラスの使用例.
Dependencies: Array_Matrix mbed SerialTxRxIntr Window
main.cpp@0:66a123e21046, 2021-05-23 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun May 23 06:27:45 2021 +0000
- Revision:
- 0:66a123e21046
- Child:
- 1:7ee4d53e01e4
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:66a123e21046 | 1 | //----------------------------------------------------------- |
MikamiUitOpen | 0:66a123e21046 | 2 | // 窓関数のライブラリの使用例 |
MikamiUitOpen | 0:66a123e21046 | 3 | // |
MikamiUitOpen | 0:66a123e21046 | 4 | // 2021/05/20, Copyright (c) 2021 MIKAMI, Naoki |
MikamiUitOpen | 0:66a123e21046 | 5 | //----------------------------------------------------------- |
MikamiUitOpen | 0:66a123e21046 | 6 | |
MikamiUitOpen | 0:66a123e21046 | 7 | #include "Hanning.hpp" |
MikamiUitOpen | 0:66a123e21046 | 8 | #include "Hamming.hpp" |
MikamiUitOpen | 0:66a123e21046 | 9 | #include "Blackman.hpp" |
MikamiUitOpen | 0:66a123e21046 | 10 | #include "SerialRxTxIntr.hpp" |
MikamiUitOpen | 0:66a123e21046 | 11 | using namespace Mikami; |
MikamiUitOpen | 0:66a123e21046 | 12 | #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため |
MikamiUitOpen | 0:66a123e21046 | 13 | |
MikamiUitOpen | 0:66a123e21046 | 14 | int main() |
MikamiUitOpen | 0:66a123e21046 | 15 | { |
MikamiUitOpen | 0:66a123e21046 | 16 | SerialRxTxIntr pc; // ターミナルとの通信用 |
MikamiUitOpen | 0:66a123e21046 | 17 | pc.EchobackEnable(); // ターミナルのエコーバック有効 |
MikamiUitOpen | 0:66a123e21046 | 18 | printf("\r\n窓関数のテスト\r\n"); |
MikamiUitOpen | 0:66a123e21046 | 19 | |
MikamiUitOpen | 0:66a123e21046 | 20 | int nFft, nData; |
MikamiUitOpen | 0:66a123e21046 | 21 | do { |
MikamiUitOpen | 0:66a123e21046 | 22 | pc.TxString("この窓関数を使う際の FFT の点数を入力してください\r\n? "); |
MikamiUitOpen | 0:66a123e21046 | 23 | while(!pc.IsEol()) {} |
MikamiUitOpen | 0:66a123e21046 | 24 | nFft = atoi(pc.GetBuffer().c_str()); |
MikamiUitOpen | 0:66a123e21046 | 25 | } while (nFft == 0); |
MikamiUitOpen | 0:66a123e21046 | 26 | do { |
MikamiUitOpen | 0:66a123e21046 | 27 | pc.TxString("データ数を入力してください(FFT の点数より大きくない数)\r\n? "); |
MikamiUitOpen | 0:66a123e21046 | 28 | while(!pc.IsEol()) {} |
MikamiUitOpen | 0:66a123e21046 | 29 | nData = atoi(pc.GetBuffer().c_str()); |
MikamiUitOpen | 0:66a123e21046 | 30 | } while (nData == 0); |
MikamiUitOpen | 0:66a123e21046 | 31 | |
MikamiUitOpen | 0:66a123e21046 | 32 | Array<float> xn(nFft), yn(nFft); |
MikamiUitOpen | 0:66a123e21046 | 33 | for (int n=0; n<nFft; n++) xn[n] = 1.0f; |
MikamiUitOpen | 0:66a123e21046 | 34 | |
MikamiUitOpen | 0:66a123e21046 | 35 | // FFT の点数とデータ数が違う場合 |
MikamiUitOpen | 0:66a123e21046 | 36 | BlackmanWindow wBlack(nFft, nData); |
MikamiUitOpen | 0:66a123e21046 | 37 | HammingWindow wHamm(nFft, nData); |
MikamiUitOpen | 0:66a123e21046 | 38 | HanningWindow wHann(nFft, nData); |
MikamiUitOpen | 0:66a123e21046 | 39 | /* |
MikamiUitOpen | 0:66a123e21046 | 40 | // FFT の点数とデータ数が同じ場合 |
MikamiUitOpen | 0:66a123e21046 | 41 | BlackmanWindow wBlack(nFft); |
MikamiUitOpen | 0:66a123e21046 | 42 | HammingWindow wHamm(nFft); |
MikamiUitOpen | 0:66a123e21046 | 43 | HanningWindow wHann(nFft); |
MikamiUitOpen | 0:66a123e21046 | 44 | */ |
MikamiUitOpen | 0:66a123e21046 | 45 | // ポインタを使う場合の例 |
MikamiUitOpen | 0:66a123e21046 | 46 | // WindowBase *window = new HammingWindow(nFft, nData); |
MikamiUitOpen | 0:66a123e21046 | 47 | |
MikamiUitOpen | 0:66a123e21046 | 48 | while (true) |
MikamiUitOpen | 0:66a123e21046 | 49 | { |
MikamiUitOpen | 0:66a123e21046 | 50 | printf("窓関数の種類:\r\n"); |
MikamiUitOpen | 0:66a123e21046 | 51 | printf("ハニング: n, ハミング: m, ブラックマン: b\r\n"); |
MikamiUitOpen | 0:66a123e21046 | 52 | while(!pc.IsEol()) {} |
MikamiUitOpen | 0:66a123e21046 | 53 | char ch = pc.GetBuffer()[0]; |
MikamiUitOpen | 0:66a123e21046 | 54 | |
MikamiUitOpen | 0:66a123e21046 | 55 | if (ch == 'n') |
MikamiUitOpen | 0:66a123e21046 | 56 | { yn = wHann.Execute(xn); printf("ハニング窓\r\n"); } |
MikamiUitOpen | 0:66a123e21046 | 57 | if (ch == 'm') |
MikamiUitOpen | 0:66a123e21046 | 58 | { yn = wHamm.Execute(xn); printf("ハミング窓\r\n"); } |
MikamiUitOpen | 0:66a123e21046 | 59 | if (ch == 'b') |
MikamiUitOpen | 0:66a123e21046 | 60 | { yn = wBlack.Execute(xn); printf("ブラックマン窓\r\n"); } |
MikamiUitOpen | 0:66a123e21046 | 61 | |
MikamiUitOpen | 0:66a123e21046 | 62 | // ポインタを使う場合の例 |
MikamiUitOpen | 0:66a123e21046 | 63 | // yn = window->Execute(xn); |
MikamiUitOpen | 0:66a123e21046 | 64 | |
MikamiUitOpen | 0:66a123e21046 | 65 | if ((ch == 'n')||(ch == 'm')||(ch == 'b')) |
MikamiUitOpen | 0:66a123e21046 | 66 | for (int n=0; n<nFft/8; n++) |
MikamiUitOpen | 0:66a123e21046 | 67 | { |
MikamiUitOpen | 0:66a123e21046 | 68 | printf(" "); |
MikamiUitOpen | 0:66a123e21046 | 69 | for (int k=n*8; k<(n+1)*8; k++) printf("%8.5f,", yn[k]); |
MikamiUitOpen | 0:66a123e21046 | 70 | printf("\r\n"); |
MikamiUitOpen | 0:66a123e21046 | 71 | } |
MikamiUitOpen | 0:66a123e21046 | 72 | } |
MikamiUitOpen | 0:66a123e21046 | 73 | } |