不韋 呂 / F746_SD_VarableFilter

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton

Committer:
MikamiUitOpen
Date:
Wed Mar 22 13:42:46 2017 +0000
Revision:
7:044bb5baa1d4
Parent:
5:82b24bd280ce
8

Who changed what in which revision?

UserRevisionLine numberNew 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 }