Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton
MyVariableFilter/VariableIirFilter.cpp@7:044bb5baa1d4, 2017-03-22 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Mar 22 13:42:46 2017 +0000
- Revision:
- 7:044bb5baa1d4
- Parent:
- 5:82b24bd280ce
8
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MikamiUitOpen | 0:92078e38d79f | 1 | //-------------------------------------------------------------- |
| MikamiUitOpen | 0:92078e38d79f | 2 | // 可変フィルタ用のクラス |
| MikamiUitOpen | 0:92078e38d79f | 3 | // (SD_PlayerSkeleton の派生クラス) |
| MikamiUitOpen | 0:92078e38d79f | 4 | // |
| MikamiUitOpen | 7:044bb5baa1d4 | 5 | // 2017/03/22, Copyright (c) 2017 MIKAMI, Naoki |
| MikamiUitOpen | 0:92078e38d79f | 6 | //-------------------------------------------------------------- |
| MikamiUitOpen | 0:92078e38d79f | 7 | |
| MikamiUitOpen | 0:92078e38d79f | 8 | #include "VariableIirFilter.hpp" |
| MikamiUitOpen | 0:92078e38d79f | 9 | |
| MikamiUitOpen | 0:92078e38d79f | 10 | namespace Mikami |
| MikamiUitOpen | 0:92078e38d79f | 11 | { |
| MikamiUitOpen | 7:044bb5baa1d4 | 12 | VariableIirFilter::VariableIirFilter(string str, |
| MikamiUitOpen | 2:dcaee06f6ccb | 13 | BtwthDesignerDrawer &obj) |
| MikamiUitOpen | 7:044bb5baa1d4 | 14 | : SD_PlayerSkeleton(str), |
| MikamiUitOpen | 0:92078e38d79f | 15 | lpHp_(BG_LEFT_, 197, BG_WIDTH_/2, BG_HEIGHT_, |
| MikamiUitOpen | 0:92078e38d79f | 16 | 2, (string[]){"LPF", "HPF"}, 0, 0, 2, 0), |
| MikamiUitOpen | 0:92078e38d79f | 17 | onOff_(BG_LEFT_, 235, BG_WIDTH_/2, BG_HEIGHT_, |
| MikamiUitOpen | 0:92078e38d79f | 18 | 2, (string[]){"ON", "OFF"}, 0, 0, 2, 1), |
| MikamiUitOpen | 0:92078e38d79f | 19 | drawerObj_(obj), |
| MikamiUitOpen | 0:92078e38d79f | 20 | ORDER2_(drawerObj_.GetOrder()/2), |
| MikamiUitOpen | 0:92078e38d79f | 21 | ck_(ORDER2_), hn_(ORDER2_) |
| MikamiUitOpen | 0:92078e38d79f | 22 | { |
| MikamiUitOpen | 0:92078e38d79f | 23 | // 周波数特性の描画 |
| MikamiUitOpen | 0:92078e38d79f | 24 | drawerObj_.DrawResponse(); |
| MikamiUitOpen | 0:92078e38d79f | 25 | |
| MikamiUitOpen | 0:92078e38d79f | 26 | // フィルタの準備 |
| MikamiUitOpen | 0:92078e38d79f | 27 | drawerObj_.GetCoefficients(ck_, g0_); |
| MikamiUitOpen | 0:92078e38d79f | 28 | for (int k=0; k<ORDER2_; k++) hn_[k] = Biquad(ck_[k]); |
| MikamiUitOpen | 0:92078e38d79f | 29 | |
| MikamiUitOpen | 0:92078e38d79f | 30 | on_ = false; |
| MikamiUitOpen | 0:92078e38d79f | 31 | } |
| MikamiUitOpen | 0:92078e38d79f | 32 | |
| MikamiUitOpen | 7:044bb5baa1d4 | 33 | // 1ブロック分の信号処理の実行 |
| MikamiUitOpen | 0:92078e38d79f | 34 | void VariableIirFilter::SignalProcessing() |
| MikamiUitOpen | 0:92078e38d79f | 35 | { |
| MikamiUitOpen | 7:044bb5baa1d4 | 36 | // 1ブロック分のデータを SD から読み込む |
| MikamiUitOpen | 0:92078e38d79f | 37 | sdReader_.ReadAndToMono(sn_); |
| MikamiUitOpen | 0:92078e38d79f | 38 | |
| MikamiUitOpen | 0:92078e38d79f | 39 | while (!mySai_.IsXferred()) {} // データの転送が終わるまで待つ |
| MikamiUitOpen | 0:92078e38d79f | 40 | //-------------------------------------------------------------- |
| MikamiUitOpen | 7:044bb5baa1d4 | 41 | // 1ブロック分の信号処理を行い,その結果を出力する |
| MikamiUitOpen | 7:044bb5baa1d4 | 42 | for (int n=0; n<BUFF_SIZE_; n++) |
| MikamiUitOpen | 0:92078e38d79f | 43 | { |
| MikamiUitOpen | 0:92078e38d79f | 44 | // 縦続形の IIR フィルタ |
| MikamiUitOpen | 0:92078e38d79f | 45 | float yn = g0_*sn_[n]; |
| MikamiUitOpen | 0:92078e38d79f | 46 | for (int k=0; k<ORDER2_; k++) yn = hn_[k].Execute(yn); |
| MikamiUitOpen | 0:92078e38d79f | 47 | |
| MikamiUitOpen | 0:92078e38d79f | 48 | int16_t value = on_ ? (int16_t)yn : sn_[n]; |
| MikamiUitOpen | 0:92078e38d79f | 49 | |
| MikamiUitOpen | 2:dcaee06f6ccb | 50 | // 音響信号の出力,左右チャンネルに同じものを出力する |
| MikamiUitOpen | 2:dcaee06f6ccb | 51 | mySai_.Output(value, value); |
| MikamiUitOpen | 0:92078e38d79f | 52 | } |
| MikamiUitOpen | 0:92078e38d79f | 53 | //-------------------------------------------------------------- |
| MikamiUitOpen | 0:92078e38d79f | 54 | } |
| MikamiUitOpen | 0:92078e38d79f | 55 | |
| MikamiUitOpen | 7:044bb5baa1d4 | 56 | // 可変フィルタの遮断周波数変更 |
| MikamiUitOpen | 0:92078e38d79f | 57 | void VariableIirFilter::Modefy() |
| MikamiUitOpen | 0:92078e38d79f | 58 | { |
| MikamiUitOpen | 0:92078e38d79f | 59 | // フィルタ処理の有効/無効切り替え |
| MikamiUitOpen | 0:92078e38d79f | 60 | int sw = 0; |
| MikamiUitOpen | 0:92078e38d79f | 61 | if (onOff_.GetTouchedNumber(sw)) |
| MikamiUitOpen | 0:92078e38d79f | 62 | on_ = (sw == 0) ? true : false; |
| MikamiUitOpen | 0:92078e38d79f | 63 | |
| MikamiUitOpen | 0:92078e38d79f | 64 | // フィルタの周波数特性の変更 |
| MikamiUitOpen | 0:92078e38d79f | 65 | static int num = 0; |
| MikamiUitOpen | 0:92078e38d79f | 66 | lpHp_.GetTouchedNumber(num); |
| MikamiUitOpen | 0:92078e38d79f | 67 | BilinearDesign::Type typeLH = (BilinearDesign::Type)num; |
| MikamiUitOpen | 0:92078e38d79f | 68 | if (drawerObj_.ReDesignAndDraw(ck_, g0_, typeLH)) |
| MikamiUitOpen | 0:92078e38d79f | 69 | for (int k=0; k<ORDER2_; k++) |
| MikamiUitOpen | 0:92078e38d79f | 70 | hn_[k].SetCoefficients(ck_[k]); |
| MikamiUitOpen | 0:92078e38d79f | 71 | } |
| MikamiUitOpen | 0:92078e38d79f | 72 | } |