HanningWindow, HammingWindow, BlackmanWindow の各クラスの使用例.

Dependencies:   Array_Matrix mbed SerialTxRxIntr Window

Committer:
MikamiUitOpen
Date:
Wed Nov 10 05:47:49 2021 +0000
Revision:
1:7ee4d53e01e4
Parent:
0:66a123e21046
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:66a123e21046 1 //-----------------------------------------------------------
MikamiUitOpen 0:66a123e21046 2 // 窓関数のライブラリの使用例
MikamiUitOpen 0:66a123e21046 3 //
MikamiUitOpen 1:7ee4d53e01e4 4 // 2021/11/10, 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 }