SD card player with variable cotoff frequency lowpass and highpass IIR filter. SD カードの *.wav ファイルのオーディオ信号を,遮断周波数可変 IIR 低域通過および高域通過フィルタを通して,ボードに搭載されているCODEC で出力する.このプログラムについては,CQ出版社インターフェース誌 2018年8月号で解説している.

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton

MyVariableFilter/BilinearDesignLH.hpp

Committer:
MikamiUitOpen
Date:
2017-04-10
Revision:
11:399670d24ed9
Parent:
10:3532c05aa1a9

File content as of revision 11:399670d24ed9:

//------------------------------------------------------------------------
//  Design of Butterworth LPF and HPF using bilinear transform -- Header
//
//   2017/03/25, Copyright (c) 2017 MIKAMI, Naoki
//------------------------------------------------------------------------

#ifndef BILINEAR_BUTTERWORTH_HPP
#define BILINEAR_BUTTERWORTH_HPP

#include "mbed.h"
#include <complex>  // requisite
#include "Array.hpp"

namespace Mikami
{
    typedef complex<float> Complex; // define "Complex"

    class BilinearDesign
    {
    public:
        struct Coefs { float a1, a2, b1, b2; };
        enum Type { LPF, HPF };

        // Constructor
        BilinearDesign(int order, float fs)
            : PI_FS_(PI_/fs), ORDER_(order),
              sP_(order/2), zP_(order/2), ck_(order/2) {}

        // Destractor
        virtual ~BilinearDesign() {}

        // Execution of design
        void Execute(float fc, Type pb, Coefs c[], float& g);

    private:
        static const float PI_ = 3.1415926536f;
        const float PI_FS_;
        const int ORDER_;

        Array<Complex> sP_; // Poles on s-plane
        Array<Complex> zP_; // Poles on z-plane
        Array<Coefs> ck_;   // Coefficients of transfer function for cascade form
        float gain_;        // Gain factor for cascade form

        void Butterworth();
        void Bilinear(float fc);
        void ToCascade(Type pb);
        void GetGain(Type pb);
        void GetCoefs(Coefs c[], float& gain);
    };
}
#endif  // BILINEAR_BUTTERWORTH_HPP