?? iir1st.eve
字號:
// 僒儞僾儖僾儘僌儔儉 IIR1st.eve
//
// 堦師偺 IIR 傪幚尰偡傞僾儘僌儔儉偱偡丅
// SDI0 偺 Lch 偵擖椡偝傟偨怣崋偵僇僢僩僆僼廃攇悢 (fc) 偑 100Hz
// (僒儞僾儕儞僌廃攇悢 fs=48kHz 帪) 偺 LPF 傪偐偗 SDO0 偺 Lch 偵
// 弌椡偟偰偄傑偡丅
// SDO0 偺 Lch 埲奜偺僠儍儞僱儖偼偡傋偰 0 弌椡偱偡丅
//
// 堦師偺 IIR 偺學悢惛搙偼丄捠忢 16bit 偱廫暘偱偡偺偱丄IIR2ndLPF.eve
// 偺傛偆側學悢攞惛搙墘嶼偼晄梫偱偡丅
//
// 側偍丄僾儘僌儔儉偱偼 0dBFS 擖椡帪偺墘嶼僆乕僶乕僼儘乕傪夞旔偡傞偨傔
// 擖椡怣崋傪 -6dB 偟丄僼傿儖僞墘嶼屻 +6dB 偟偰尦偺儗儀儖偵栠偟偰偄傑偡丅
// 僨乕僞僶僗偺壖悢晹偼 28bit 偁傝傑偡偺偱丄偙偺庤朄偱傕嵟廔 24bit 弌椡偺
// 惛搙偵塭嬁傪梌偊傞偙偲偼偁傝傑偣傫丅
//
// 僔僌僫儖僼儘乕 IIR1st.pdf 傪嶲徠偟偰偔偩偝偄丅
//
// 偙偺僾儘僌儔儉傪傾僙儞僽儔 EveAsm.exe 偱傾僙儞僽儖偡傞偙偲偵傛傝
// IIR1st.datEve 偑嶌惉偝傟傑偡丅
//
// -----------------------------------------------------------------
//
// Sample program IIR1st.eve
//
// This is the program realizing 1st-order IIR filter.
// LPF of fc(cutoff frequency)=100Hz (at fs=48kHz) is applied to SDI0 Lch
// input signal, and the result is output from SDO0 Lch.
// The other channels except for SDO0 Lch are all zero output.
//
// 16bit is enough for the coefficients of 1st-order IIR, and there is no
// need to calculate by double-precision used in IIR2ndLPF.eve.
//
// In order to prevent digital overflow when the input is 0dBFS, input signal
// is attenuated by 6dB first and boosted after the filter calculation by 6dB
// in this program. This method does not affect at all to 24bit precision output
// because the mantissa (fractional part) of data bus is 28bit.
//
// Refer to the signal flow IIR1st.pdf.
//
// IIR1st.datEve is assemble from this program by executing EveAsm.exe.
// -----------------------------------------------------------------
// -----------------------------------------------------------------
// -----------------------------------------------------------------
#define ERAM_TYPE NO_ERAM //奜晅 RAM 側偟
//============================================================
// EVE Program
// IIR1st
//============================================================
// COEF define
// fs 偵傛偭偰曄壔偡傞學悢
CDat A0 (-1, 0x00D5); // 100Hz LPF (fs=48kHz)
CDat A1 (-1, 0x00D5); //
CDat B1 (-1, 0x7E56); //
// fs 偵傛偭偰曄壔偟側偄學悢
CDat P0.5 (-1, 0x4000); //
// Inner DATA define
DAdr Dtmp (0); // 僥儞億儔儕梡
DAdr DF (1); //
//------------------------------------------------------------
// 幚峴僐儅儞僪僽儘僢僋
// | ERAM | BUS | MAC/JMP
//------------------------------------------------------------
; Dtmp = IN0; ACC0 = Dtmp *P0.5; // SDI0/L (IN0) 傪 Dtmp 傊丅
; ; ; // overflow 夞旔偺偨傔 Dtmp 傪 -6dB 偡傞丅
; ; ;
; ; ;
//---------------------------
; (DF+0) = ACC0F; ACC0 = (DF+0) *A0; // filter 墘嶼丅
; ; ACC0+= (DF+1) *A1; //
; ; ACC0+= (DF+2) *B1; //
; ; ;
; ; ;
; ; ;
; (DF+1) = ACC0F; ACC0 = (DF+1) *P0.5; // RAM 傊偼 Float 偱 save丅
//---------------------------
; ; ; // -6dB 偝傟偰偄偨 data 傪 +6dB 偟丄尦偵栠偡丅
; ; ;
; ; ;
; OUT0 = ACC0Ls2; ; // OUT 傊偼 Linear 偱 save丅
// ----------------------------------------------------------------------
; OUT1 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT2 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT3 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT4 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT5 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT6 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT7 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
// ----------------------------------------------------------------------
; MPEND = $0.5; ; // program 廔椆丅
; ; ;
; ; ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -