Demo program of digital signal processing: Variable LPF/HPF, Vocal canceller, Pitch shifter, Reverbrator. ディジタル信号処理のデモプログラム. 遮断周波数可変 LPF/HPF,ボーカルキャンセラ,ピッチシフタ,残響生成器.
Dependencies: Array_Matrix F446_AD_DA UIT_AQM1602 mbed
Diff: SignalProcessing/VariableLpHp.hpp
- Revision:
- 0:fa74b1130cc3
- Child:
- 4:2f06a5893e4a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SignalProcessing/VariableLpHp.hpp Sun Jan 29 09:11:30 2017 +0000 @@ -0,0 +1,50 @@ +//-------------------------------------------------------------- +// 遮断周波数可変フィルタ,LPF と HPF +// +// 2017/01/26, Copyright (c) 2017 MIKAMI, Naoki +//-------------------------------------------------------------- + +#ifndef VARIABLE_LOWPASS_HIGHPASS_FILTER_HPP +#define VARIABLE_LOWPASS_HIGHPASS_FILTER_HPP + +#include "IIR_Cascade.hpp" +#include "SignalProcessing.hpp" +#include "BilinearDesignLH.hpp" +#include "Array.hpp" +using namespace Mikami; + +class VariableLpHp : public SignalProcessing +{ +public: + VariableLpHp(int order, float fs) + : ORDER2_(order/2), coefs_(order/2), coefsIir_(order/2), + designer_(order, fs), filter_(order) {} + + virtual float Execute(float xn1, float xn2) + { return filter_.Execute((xn1 + xn2)*0.5f); } + + void Design(float fc, BilinearDesign::Type passBand) + { + float g0; + designer_.Execute(fc, passBand, coefs_, g0); + for (int n=0; n<ORDER2_; n++) + { + coefsIir_[n].a1 = coefs_[n].a1; + coefsIir_[n].a2 = coefs_[n].a2; + coefsIir_[n].b1 = coefs_[n].b1; + coefsIir_[n].b2 = 1.0f; + } + filter_.SetCoefs(g0, coefsIir_); + filter_.Clear(); + } + +private: + const int ORDER2_; + + Array<BilinearDesign::Coefs> coefs_; + Array<Biquad::Coefs> coefsIir_; + + BilinearDesign designer_; + IirCascade filter_; +}; +#endif // VARIABLE_LOWPASS_HIGHPASS_FILTER_HPP \ No newline at end of file