From dd0f54d3bc783eda8af59155f995f333bf2c5601 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 19 Jul 2014 07:44:42 +0000 Subject: [PATCH] Initial import git-svn-id: http://moon:8086/svn/software/trunk/libsrc/iir@1 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- Audio-EQ-Cookbook.txt | 280 +++++++++++++++++++++++++++++++++++ Debug/iir.obj | Bin 0 -> 22926 bytes Debug/iir.pch | Bin 0 -> 251096 bytes Debug/vc60.idb | Bin 0 -> 41984 bytes Debug/vc60.pdb | Bin 0 -> 53248 bytes Iir.c | 301 ++++++++++++++++++++++++++++++++++++++ Iir.c.double | 225 +++++++++++++++++++++++++++++ Iir.cpp | 329 ++++++++++++++++++++++++++++++++++++++++++ Iir.h | 91 ++++++++++++ Iir.h.double | 69 +++++++++ Iir.opt | Bin 0 -> 48640 bytes Iir2.c | 295 +++++++++++++++++++++++++++++++++++++ Iir2.h | 97 +++++++++++++ Iir_h.bak | 68 +++++++++ Release/iir.obj | Bin 0 -> 10604 bytes Release/iir.pch | Bin 0 -> 251544 bytes Release/vc60.idb | Bin 0 -> 33792 bytes iir.dsp | 100 +++++++++++++ iir.dsw | 29 ++++ iir.ncb | Bin 0 -> 50176 bytes iir.plg | 28 ++++ 21 files changed, 1912 insertions(+) create mode 100755 Audio-EQ-Cookbook.txt create mode 100755 Debug/iir.obj create mode 100755 Debug/iir.pch create mode 100755 Debug/vc60.idb create mode 100755 Debug/vc60.pdb create mode 100755 Iir.c create mode 100755 Iir.c.double create mode 100755 Iir.cpp create mode 100755 Iir.h create mode 100755 Iir.h.double create mode 100755 Iir.opt create mode 100755 Iir2.c create mode 100755 Iir2.h create mode 100755 Iir_h.bak create mode 100755 Release/iir.obj create mode 100755 Release/iir.pch create mode 100755 Release/vc60.idb create mode 100755 iir.dsp create mode 100755 iir.dsw create mode 100755 iir.ncb create mode 100755 iir.plg diff --git a/Audio-EQ-Cookbook.txt b/Audio-EQ-Cookbook.txt new file mode 100755 index 0000000..9ecb0c2 --- /dev/null +++ b/Audio-EQ-Cookbook.txt @@ -0,0 +1,280 @@ + + Cookbook formulae for audio EQ biquad filter coefficients +---------------------------------------------------------------------------- + by Robert Bristow-Johnson + + +All filter transfer functions were derived from analog prototypes (that +are shown below for each EQ filter type) and had been digitized using the +Bilinear Transform. BLT frequency warping has been taken into account for +both significant frequency relocation (this is the normal "prewarping" that +is necessary when using the BLT) and for bandwidth readjustment (since the +bandwidth is compressed when mapped from analog to digital using the BLT). + +First, given a biquad transfer function defined as: + + b0 + b1*z^-1 + b2*z^-2 + H(z) = ------------------------ (Eq 1) + a0 + a1*z^-1 + a2*z^-2 + +This shows 6 coefficients instead of 5 so, depending on your architechture, +you will likely normalize a0 to be 1 and perhaps also b0 to 1 (and collect +that into an overall gain coefficient). Then your transfer function would +look like: + + (b0/a0) + (b1/a0)*z^-1 + (b2/a0)*z^-2 + H(z) = --------------------------------------- (Eq 2) + 1 + (a1/a0)*z^-1 + (a2/a0)*z^-2 + +or + + 1 + (b1/b0)*z^-1 + (b2/b0)*z^-2 + H(z) = (b0/a0) * --------------------------------- (Eq 3) + 1 + (a1/a0)*z^-1 + (a2/a0)*z^-2 + + +The most straight forward implementation would be the "Direct Form 1" +(Eq 2): + + y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2] + - (a1/a0)*y[n-1] - (a2/a0)*y[n-2] (Eq 4) + +This is probably both the best and the easiest method to implement in the +56K and other fixed-point or floating-point architechtures with a double +wide accumulator. + + + +Begin with these user defined parameters: + + Fs (the sampling frequency) + + f0 ("wherever it's happenin', man." Center Frequency or + Corner Frequency, or shelf midpoint frequency, depending + on which filter type. The "significant frequency".) + + dBgain (used only for peaking and shelving filters) + + Q (the EE kind of definition, except for peakingEQ in which A*Q is + the classic EE Q. That adjustment in definition was made so that + a boost of N dB followed by a cut of N dB for identical Q and + f0/Fs results in a precisely flat unity gain filter or "wire".) + + _or_ BW, the bandwidth in octaves (between -3 dB frequencies for BPF + and notch or between midpoint (dBgain/2) gain frequencies for + peaking EQ) + + _or_ S, a "shelf slope" parameter (for shelving EQ only). When S = 1, + the shelf slope is as steep as it can be and remain monotonically + increasing or decreasing gain with frequency. The shelf slope, in + dB/octave, remains proportional to S for all other values for a + fixed f0/Fs and dBgain. + + + +Then compute a few intermediate variables: + + A = sqrt( 10^(dBgain/20) ) + = 10^(dBgain/40) (for peaking and shelving EQ filters only) + + w0 = 2*pi*f0/Fs + + cos(w0) + sin(w0) + + alpha = sin(w0)/(2*Q) (case: Q) + = sin(w0)*sinh( ln(2)/2 * BW * w0/sin(w0) ) (case: BW) + = sin(w0)/2 * sqrt( (A + 1/A)*(1/S - 1) + 2 ) (case: S) + + FYI: The relationship between bandwidth and Q is + 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) (digital filter w BLT) + or 1/Q = 2*sinh(ln(2)/2*BW) (analog filter prototype) + + The relationship between shelf slope and Q is + 1/Q = sqrt((A + 1/A)*(1/S - 1) + 2) + + 2*sqrt(A)*alpha = sin(w0) * sqrt( (A^2 + 1)*(1/S - 1) + 2*A ) + is a handy intermediate variable for shelving EQ filters. + + +Finally, compute the coefficients for whichever filter type you want: + (The analog prototypes, H(s), are shown for each filter + type for normalized frequency.) + + +LPF: H(s) = 1 / (s^2 + s/Q + 1) + + b0 = (1 - cos(w0))/2 + b1 = 1 - cos(w0) + b2 = (1 - cos(w0))/2 + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + + +HPF: H(s) = s^2 / (s^2 + s/Q + 1) + + b0 = (1 + cos(w0))/2 + b1 = -(1 + cos(w0)) + b2 = (1 + cos(w0))/2 + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + + +BPF: H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q) + + b0 = sin(w0)/2 = Q*alpha + b1 = 0 + b2 = -sin(w0)/2 = -Q*alpha + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + +BPF: H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain) + + b0 = alpha + b1 = 0 + b2 = -alpha + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + + +notch: H(s) = (s^2 + 1) / (s^2 + s/Q + 1) + + b0 = 1 + b1 = -2*cos(w0) + b2 = 1 + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + + +APF: H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1) + + b0 = 1 - alpha + b1 = -2*cos(w0) + b2 = 1 + alpha + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + + +peakingEQ: H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1) + + b0 = 1 + alpha*A + b1 = -2*cos(w0) + b2 = 1 - alpha*A + a0 = 1 + alpha/A + a1 = -2*cos(w0) + a2 = 1 - alpha/A + + + +lowShelf: H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) + + b0 = A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha ) + b1 = 2*A*( (A-1) - (A+1)*cos(w0) ) + b2 = A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha ) + a0 = (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha + a1 = -2*( (A-1) + (A+1)*cos(w0) ) + a2 = (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha + + + +highShelf: H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) + + b0 = A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha ) + b1 = -2*A*( (A-1) + (A+1)*cos(w0) ) + b2 = A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha ) + a0 = (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha + a1 = 2*( (A-1) - (A+1)*cos(w0) ) + a2 = (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha + + + + + +FYI: The bilinear transform (with compensation for frequency warping) +substitutes: + + 1 1 - z^-1 + (normalized) s <-- ----------- * ---------- + tan(w0/2) 1 + z^-1 + + and makes use of these trig identities: + + sin(w0) 1 - cos(w0) + tan(w0/2) = ------------- (tan(w0/2))^2 = ------------- + 1 + cos(w0) 1 + cos(w0) + + + resulting in these substitutions: + + + 1 + cos(w0) 1 + 2*z^-1 + z^-2 + 1 <-- ------------- * ------------------- + 1 + cos(w0) 1 + 2*z^-1 + z^-2 + + + 1 + cos(w0) 1 - z^-1 + s <-- ------------- * ---------- + sin(w0) 1 + z^-1 + + 1 + cos(w0) 1 - z^-2 + = ------------- * ------------------- + sin(w0) 1 + 2*z^-1 + z^-2 + + + 1 + cos(w0) 1 - 2*z^-1 + z^-2 + s^2 <-- ------------- * ------------------- + 1 - cos(w0) 1 + 2*z^-1 + z^-2 + + + The factor: + + 1 + cos(w0) + ------------------- + 1 + 2*z^-1 + z^-2 + + is common to all terms in both numerator and denominator, can be factored + out, and thus be left out in the substitutions above resulting in: + + + 1 + 2*z^-1 + z^-2 + 1 <-- ------------------- + 1 + cos(w0) + + + 1 - z^-2 + s <-- ------------------- + sin(w0) + + + 1 - 2*z^-1 + z^-2 + s^2 <-- ------------------- + 1 - cos(w0) + + + In addition, all terms, numerator and denominator, can be multiplied by a + common (sin(w0))^2 factor, finally resulting in these substitutions: + + + 1 <-- (1 + 2*z^-1 + z^-2) * (1 - cos(w0)) + + s <-- (1 - z^-2) * sin(w0) + + s^2 <-- (1 - 2*z^-1 + z^-2) * (1 + cos(w0)) + + 1 + s^2 <-- 2 * (1 - 2*cos(w0)*z^-1 + z^-2) + + + The biquad coefficient formulae above come out after a little + simplification. diff --git a/Debug/iir.obj b/Debug/iir.obj new file mode 100755 index 0000000000000000000000000000000000000000..5bd165011f9d2b419f7335da8295e66097888824 GIT binary patch literal 22926 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 D=ntA& literal 0 HcmV?d00001 diff --git a/Debug/iir.pch b/Debug/iir.pch new file mode 100755 index 0000000000000000000000000000000000000000..c99853a9788354f24c9539dc92366c2afe92c13b GIT binary patch literal 251096 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

l#3NUhL83 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 literal 0 HcmV?d00001 diff --git a/Debug/vc60.idb b/Debug/vc60.idb new file mode 100755 index 0000000000000000000000000000000000000000..5cdb0160fa28c8f0664a61c2ae4a34bb8ba5a9cd GIT binary patch literal 41984 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 = 1.0f; + pCoeff->ak1 = (1 - K/Qi)/a0; + pCoeff->ak2 = 0.0; + + pCoeff->bk0 = 1.0f/a0; + pCoeff->bk1 = 1.0f/a0; + pCoeff->bk2 = 0.0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = (1 - K/Qi) /a0; + pCoeff->ak2 = 0.0; + + pCoeff->bk0 = 1.0f*K /a0; + pCoeff->bk1 = -1.0f*K /a0; + pCoeff->bk2 = 0.0; + + break; + + default: + error = -1; + break; + } + return error; +} + +int IIRCalcPartFilterCoeff2(struct _sIIRCoeff *pCoeff, iir_float_t A, iir_float_t fa, iir_float_t fg, iir_float_t qp, unsigned filterType) +{ + iir_float_t a0; + iir_float_t alpha, omega, ks, kc; + unsigned error; + + omega = (iir_float_t)(2*iir_pi*fg/fa); + ks = (iir_float_t)sin(omega); + kc = (iir_float_t)cos(omega); + alpha = 0.5f*ks /qp; + + error = 0; + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 0.5f*(1 - kc) /a0; + pCoeff->bk1 = (1 - kc) /a0; + pCoeff->bk2 = 0.5f*(1 - kc) /a0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 0.5f*(1 + kc) /a0; + pCoeff->bk1 = -(1 + kc) /a0; + pCoeff->bk2 = 0.5f*(1 + kc) /a0; + + break; + + case IIR_FILTERTYPE_BANDPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = alpha /a0; + pCoeff->bk1 = 0; + pCoeff->bk2 = -alpha /a0; + + break; + + case IIR_FILTERTYPE_BANDSTOP: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 1.0f /a0; + pCoeff->bk1 = -2.0f*kc /a0; + pCoeff->bk2 = 1.0f /a0; + + break; + + case IIR_FILTERTYPE_PEAKING: + + a0 = 1 + (alpha/A); + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - (alpha/A)) /a0; + + pCoeff->bk0 = (1 + (alpha*A)) /a0; + pCoeff->bk1 = -2.0f*kc /a0; + pCoeff->bk2 = (1 - (alpha*A)) /a0; + + break; + + default: + error = -1; + break; + } + return error; +} + +void IIR(struct _sIIRCoeff *pCoeff, iir_float_t *xn, iir_float_t *yn, unsigned order, unsigned numPoints) +{ + iir_float_t xp, yp; + unsigned i, p; + unsigned numSec = order/2; + + for (i=0; iorder = order; + pObj->pX = (iir_float_t*)malloc((order+1)*sizeof(iir_float_t)); + pObj->pY = (iir_float_t*)malloc((order+1)*sizeof(iir_float_t)); + memset(pObj->pX, 0, (order+1)*sizeof(iir_float_t)); + memset(pObj->pY, 0, (order+1)*sizeof(iir_float_t)); +} + +void IIR_lin_free(iir_lin_t *pObj) +{ + if (pObj->pX) + free(pObj->pX); + + if (pObj->pY) + free(pObj->pY); + + pObj->order = 0; + +} + +iir_float_t IIR_lin_process(iir_lin_t *pObj, iir_float_t *pB, iir_float_t *pA, iir_float_t x) +{ + unsigned i; + iir_float_t y; + + if (!pObj->order) + return 0; + + for (i=pObj->order; i >= 1; i--) + pObj->pX[i] = pObj->pX[i-1]; + + for (i=pObj->order; i >= 1; i--) + pObj->pY[i] = pObj->pY[i-1]; + + pObj->pX[0] = x; + + y = 0; + for (i=0; i <= pObj->order; i++) + y += pObj->pX[i]*pB[i]; + + for (i=1; i <= pObj->order; i++) + y -= pObj->pY[i]*pA[i]; + + pObj->pY[0] = y; + + return y; + +} + diff --git a/Iir.c.double b/Iir.c.double new file mode 100755 index 0000000..129e24d --- /dev/null +++ b/Iir.c.double @@ -0,0 +1,225 @@ +/*************************************************************************/ +/* iir.c +/*************************************************************************/ +#include "stdio.h" +#include "math.h" +#include "iir.h" + +/*************************************************************************/ +/* Global Variables +/*************************************************************************/ +const char *filterTypeString[] = +{ + "Unknown filter type", + "Butterworth-Lowpass", + "Butterworth-Highpass", + "Butterworth-Bandpass", + "Butterworth-Bandstop", + "Peaking-EQ", + "Low Shelving-EQ", + "High Shelving-EQ" +}; + +/******************************************************************************/ +void IIRCalcFilterCoeff(struct _sIIRCoeff *pCoeff, double fa, double fg, double q, unsigned order, unsigned filterType) +{ + unsigned p; + double qp; + + IIRInit(pCoeff, order); + + for(p=0; p < order/2;p++) + { + qp = q * IIRCalcQp(p+1, order); + IIRCalcPartFilterCoeff2(&pCoeff[p], 1.0, fa, fg, qp, filterType); + } +} + +int IIRCalcPartFilterCoeff1(struct _sIIRCoeff *pCoeff, double fa, double fg, double Qi, unsigned filterType) +{ + double K, a0; + double alpha, omega, ks, kc; + unsigned error; + + omega = 2*pi*fg/fa; + ks = sin(omega); + kc = cos(omega); + alpha = 0.5*ks /Qi; + + K = IIRBilTrans(fg, fa); + a0 = K/Qi + 1; + + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + pCoeff->ak0 = 1.0; + pCoeff->ak1 = (1 - K/Qi)/a0; + pCoeff->ak2 = 0.0; + + pCoeff->bk0 = 1.0/a0; + pCoeff->bk1 = 1.0/a0; + pCoeff->bk2 = 0.0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + pCoeff->ak0 = 1.0; + pCoeff->ak1 = (1 - K/Qi) /a0; + pCoeff->ak2 = 0.0; + + pCoeff->bk0 = 1.0*K /a0; + pCoeff->bk1 = -1.0*K /a0; + pCoeff->bk2 = 0.0; + + break; + + default: + error = -1; + break; + } + return error; +} + +int IIRCalcPartFilterCoeff2(struct _sIIRCoeff *pCoeff, double A, double fa, double fg, double qp, unsigned filterType) +{ + double a0; + double alpha, omega, ks, kc; + unsigned error; + + omega = 2*pi*fg/fa; + ks = sin(omega); + kc = cos(omega); + alpha = 0.5*ks /qp; + + error = 0; + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0; + pCoeff->ak1 = -2.0*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 0.5*(1 - kc) /a0; + pCoeff->bk1 = (1 - kc) /a0; + pCoeff->bk2 = 0.5*(1 - kc) /a0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0; + pCoeff->ak1 = -2.0*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 0.5*(1 + kc) /a0; + pCoeff->bk1 = -(1 + kc) /a0; + pCoeff->bk2 = 0.5*(1 + kc) /a0; + + break; + + case IIR_FILTERTYPE_BANDPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0; + pCoeff->ak1 = -2.0*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = alpha /a0; + pCoeff->bk1 = 0; + pCoeff->bk2 = -alpha /a0; + + break; + + case IIR_FILTERTYPE_BANDSTOP: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0; + pCoeff->ak1 = -2.0*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 1.0 /a0; + pCoeff->bk1 = -2.0*kc /a0; + pCoeff->bk2 = 1.0 /a0; + + break; + + case IIR_FILTERTYPE_PEAKING: + + a0 = 1 + (alpha/A); + pCoeff->ak0 = 1.0; + pCoeff->ak1 = -2.0*kc /a0; + pCoeff->ak2 = (1 - (alpha/A)) /a0; + + pCoeff->bk0 = (1 + (alpha*A)) /a0; + pCoeff->bk1 = -2.0*kc /a0; + pCoeff->bk2 = (1 - (alpha*A)) /a0; + + break; + + default: + error = -1; + break; + } + return error; +} + +void IIR(struct _sIIRCoeff *pCoeff, double *xn, double *yn, unsigned order, unsigned numPoints) +{ + double xp, yp; + unsigned i, p; + unsigned numSec = order/2; + + for (i=0; i +#include +#include +#include +#include +#include "iir.h" + +/******************************************************************************/ +const char *filterTypeString[] = +{ + "Unknown filter type", + "Butterworth-Lowpass", + "Butterworth-Highpass", + "Butterworth-Bandpass", + "Butterworth-Bandstop" +}; + +/******************************************************************************/ +int IIRCalcPartFilterCoeff1(CIIRCoeff *pCoeff, double fg, double fa, double Qi, unsigned filterType) +{ + double K, A0; + unsigned error; + + error = 0; + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + K = IIRBilTrans(fg, fa); + A0 = 1.0 /(K/Qi + 1); + + pCoeff->m_pak[0] = 1.0; + pCoeff->m_pak[1] = (1 - K/Qi) * A0; + + pCoeff->m_pbk[0] = 1.0;// * A0; + pCoeff->m_pbk[1] = 1.0;// * A0; + pCoeff->m_aScale = A0; + break; + + case IIR_FILTERTYPE_HIGHPASS: + + K = IIRBilTrans(fg, fa); + A0 = 1.0 /(K/Qi + 1); + + pCoeff->m_pak[0] = 1.0; + pCoeff->m_pak[1] = (1 - K/Qi) * A0; + + pCoeff->m_pbk[0] = 1.0*K;// * A0; + pCoeff->m_pbk[1] = -1.0*K;// * A0; + pCoeff->m_aScale = A0; + break; + + default: + error = -1; + break; + } + return error; +} + +int IIRCalcPartFilterCoeff2(CIIRCoeff *pCoeff, double fg, double fa, double Qi, unsigned filterType) +{ + double K, KK, A0,B0; + double alpha, omega, sn, cs; + unsigned error; + + K = IIRBilTrans(fg, fa); + KK = K*K; + A0 = 1.0 /(1 + KK + K/Qi); + + omega = 2*pi*fg/fa; + sn = sin(omega); + cs = cos(omega); + alpha = 0.5*sn /Qi; + + error = 0; + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + pCoeff->m_pak[0] = 1.0 ; + pCoeff->m_pak[1] = 2 *(1 - KK) * A0; + pCoeff->m_pak[2] = (1 + KK - K/Qi) * A0; + + pCoeff->m_pbk[0] = 1.0*A0; + pCoeff->m_pbk[1] = 2.0*A0; + pCoeff->m_pbk[2] = 1.0*A0; + + pCoeff->m_aScale = A0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + pCoeff->m_pak[0] = 1.0; + pCoeff->m_pak[1] = 2 *(1 - KK) * A0; + pCoeff->m_pak[2] = (KK - K/Qi + 1) * A0; + + pCoeff->m_pbk[0] = 1.0*KK * A0; + pCoeff->m_pbk[1] = -2.0*KK * A0; + pCoeff->m_pbk[2] = 1.0*KK * A0; + pCoeff->m_aScale = A0; + break; + + default: + error = -1; + break; + } + return error; +} + +double IIRBilTrans(double fg, double fa) +{ + return 1.0/(tan(pi*fg/fa)); +} + +void IIR(double *xn, double *yn, CIIRCoeff *pCoeff, unsigned numPoints) +{ + unsigned n, k; + double y1, y2; + + for (n=0; n < numPoints; n++) + { + y1 = 0; + y2 = 0; + for (k=0; k <= pCoeff->m_Nb; k++) + { + y1 = y1 + (pCoeff->m_pbk[k] * xn[pCoeff->m_Nb-k+n]); + if (!_finite(y1)) + printf("\nException: MATH ERROR!\n"); + } +// y1 = y1 *pCoeff->m_aScale; + + for (k=1; k <= pCoeff->m_Na; k++) + { + y2 = y2 - (pCoeff->m_pak[k] * yn[pCoeff->m_Na-k+n]); + if (!_finite(y2)) + printf("\nException: MATH ERROR!\n"); + } +// y2 = y2 *pCoeff->m_bScale; + + yn[pCoeff->m_Nb+n] = (y1 + y2); + if (!_finite(yn[pCoeff->m_Nb+n])) + printf("\nException: MATH ERROR!\n"); + + } +} + +int IIRCalcFilterCoeff(double fg, double fa, double Qi, unsigned N, CIIRCoeff *pCoeff, unsigned filterType) +{ + unsigned p, order_ap, order_bp; + div_t result; + unsigned numEvenFilterParts, filterCnt; + + CIIRCoeff Temp(N, N); + CIIRCoeff Coeff1(1,1); + CIIRCoeff Coeff2(2,2); + + double Qp; + FILE *pFile; + + pFile = fopen("filter.out","w"); + fprintf(pFile,"IIR-Filter Version 1.0\n"); + fprintf(pFile,"Filter Coefficients for %u-Order-%s, Qi = %4.2f\n",N, filterTypeString[filterType],Qi); + fprintf(pFile,"fg = %9.2f Hz\nfa = %9.2f Hz\n",fg, fa); + + p = 1; + filterCnt = 1; + + switch (N) + { + case 0: + break; + + default: + order_ap = 2; + order_bp = 2; + result = div(N,2); + numEvenFilterParts = result.quot; + + if (result.rem != 0) + { + IIRCalcPartFilterCoeff1(&Coeff1, fg, fa, 1.0*Qi, filterType); + fprintf(pFile,"\n1.Partfilter Np = 1, Qp = 1.00\n"); + IIRPrintCoeff(pFile,&Coeff1, 1); + filterCnt++; + } + + while (p <= numEvenFilterParts) + { + Qp = IIRCalcQp(p, N); + if (p == 1) + { + IIRCalcPartFilterCoeff2(&Temp, fg, fa, Qp*Qi, filterType); + fprintf(pFile,"\n%u.Partfilter Np = 2, Qp = %4.2f\n", filterCnt, Qp); + IIRPrintCoeff(pFile, &Temp, 2); + filterCnt++; + p++; + if (numEvenFilterParts > 1) + continue; + memcpy(pCoeff->m_pak, Temp.m_pak, (order_ap+1)*sizeof(double)); + memcpy(pCoeff->m_pbk, Temp.m_pbk, (order_bp+1)*sizeof(double)); + continue; + } + + IIRCalcPartFilterCoeff2(&Coeff2, fg, fa, Qp*Qi, filterType); + fprintf(pFile,"\n%u.Partfilter Np = 2, Qp = %4.2f\n", filterCnt, Qp); + IIRPrintCoeff(pFile,&Coeff2, 2); + order_ap = IIRMulPolynom(Coeff2.m_pak, 2, Temp.m_pak, order_ap, pCoeff->m_pak); + order_bp = IIRMulPolynom(Coeff2.m_pbk, 2, Temp.m_pbk, order_bp, pCoeff->m_pbk); + memcpy(Temp.m_pak, pCoeff->m_pak, (order_ap+1)*sizeof(double)); + memcpy(Temp.m_pbk, pCoeff->m_pbk, (order_bp+1)*sizeof(double)); + filterCnt++; + p++; + } + + if (result.rem != 0) + { + if (result.quot == 0) + { + memcpy(pCoeff->m_pak, Coeff1.m_pak, 2*sizeof(double)); + memcpy(pCoeff->m_pbk, Coeff1.m_pbk, 2*sizeof(double)); + } + else + { + order_ap = IIRMulPolynom(Coeff1.m_pak, 1, Temp.m_pak, order_ap, pCoeff->m_pak); + order_bp = IIRMulPolynom(Coeff1.m_pbk, 1, Temp.m_pbk, order_bp, pCoeff->m_pbk); + } + } + + fprintf(pFile,"\n\nResulted Filter N = %u\n",N); + IIRPrintCoeff(pFile,pCoeff, N); +// ScaleCoeff(pCoeff); + fprintf(pFile,"\n\nNormalized Filterkernel N = %u\n",N); + IIRPrintCoeff(pFile,pCoeff, N); + break; + } + + fclose(pFile); +return 0; +} + + +unsigned IIRMulPolynom(double *pA, unsigned orderA, double *pB, unsigned orderB, double *pProduct) +{ + unsigned cntA, cntB, newOrder; + + newOrder = orderA+orderB; + memset(pProduct, 0, (newOrder+1)*sizeof(double)); + + for (cntA=0; cntA <= orderA; cntA++) + { + for (cntB=0; cntB <= orderB; cntB++) + pProduct[cntA+cntB] += pA[cntA] * pB[cntB]; + } + + return newOrder; +} + +double IIRCalcQp(unsigned p, unsigned N) +{ + return 1.0/(2*sin(pi*(2*p-1)/(2*N))); +} + +void IIRPrintCoeff(FILE *pFile, CIIRCoeff *pCoeff, unsigned N) +{ + unsigned k; + + + for (k=0; k <= N; k++) + { + fprintf(pFile,"a[%2u] = %9.6g, b[%2u] = %9.6g\n",k,pCoeff->m_pak[k],k,pCoeff->m_pbk[k]); + } + fprintf(pFile,"aScale = %9.6g, bScale = %9.6g\n\n",pCoeff->m_aScale, pCoeff->m_bScale); + + fprintf(pFile,";DSP Coefficients\ncoef\n"); + for (k=N; k > 0; k--) + { + fprintf(pFile,"\tdc\t%9.7g\t; a%u\n",pCoeff->m_pak[k]/2.0,k); + } + for (k=N; k > 0; k--) + { + fprintf(pFile,"\tdc\t%9.7g\t; b%u\n",pCoeff->m_pbk[k]/2.0,k); + } + +} + + +void ScaleCoeff(CIIRCoeff *pCoeff) +{ + unsigned i; + double val; + + val=0; + for(i=0; i <= pCoeff->m_Na; i++) + val=MaxMag(val, pCoeff->m_pak[i]); + + for(i=0; i <= pCoeff->m_Na; i++) + pCoeff->m_pak[i] /= val; + + pCoeff->m_aScale = val; + + val=0; + for(i=0; i <= pCoeff->m_Nb; i++) + val=MaxMag(val, pCoeff->m_pbk[i]); + + for(i=0; i <= pCoeff->m_Nb; i++) + pCoeff->m_pbk[i] /= val; + + pCoeff->m_bScale = val; + +} + + +double MinMag(double val1, double val2) +{ + if(fabs(val1) < fabs(val2)) + return fabs(val1); + + return fabs(val2); +} + +double MaxMag(double val1, double val2) +{ + if(fabs(val1) > fabs(val2)) + return fabs(val1); + + return fabs(val2); +} diff --git a/Iir.h b/Iir.h new file mode 100755 index 0000000..b997844 --- /dev/null +++ b/Iir.h @@ -0,0 +1,91 @@ +/******************************************************************************/ +/* iir.h */ +/******************************************************************************/ +#ifndef IIR_H +#define IIR_H + +#include + +#ifndef iir_pi +#define iir_pi 3.1415926535897932384626433832795 +#endif + +#define IIR_FILTERTYPE_UNKNOWN 0x00000000 +#define IIR_FILTERTYPE_LOWPASS 0x00000001 +#define IIR_FILTERTYPE_HIGHPASS 0x00000002 +#define IIR_FILTERTYPE_BANDPASS 0x00000003 +#define IIR_FILTERTYPE_BANDSTOP 0x00000004 +#define IIR_FILTERTYPE_PEAKING 0x00000005 +#define IIR_FILTERTYPE_LOWSHELF 0x00000006 +#define IIR_FILTERTYPE_HIGHSHELF 0x00000007 + + +/******************************************************************************/ +#ifndef iir_float_t +#define iir_float_t float +#endif + +typedef struct _sComplex +{ + iir_float_t pRealData, pImagData; +} Complex; + +typedef struct _sIIRCoeff +{ + + iir_float_t ak0, ak1, ak2; + iir_float_t bk0, bk1, bk2; + iir_float_t xn1, xn2; + iir_float_t yn1, yn2; + +}IIRCOEFF; + +typedef struct _sIIRParam +{ + /* General Params */ + iir_float_t fg, Qf; + + /* for shelving EQs */ + iir_float_t beta; + + /* for peaking and shelving EQs */ + iir_float_t A; +}IIRPARAM; + +typedef struct _siir_lin_t +{ + unsigned order; + iir_float_t *pX, *pY; +} iir_lin_t; + + +/******************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +void IIRInit(struct _sIIRCoeff *pCoeff, unsigned order); +int IIRCalcPartFilterCoeff1(struct _sIIRCoeff *pCoeff, iir_float_t fa, iir_float_t fg, iir_float_t qp, unsigned filterType); +int IIRCalcPartFilterCoeff2(struct _sIIRCoeff *pCoeff, iir_float_t A, iir_float_t fa, iir_float_t fg, iir_float_t qp, unsigned filterType); +void IIRCalcFilterCoeff(struct _sIIRCoeff *pCoeff, iir_float_t fa, iir_float_t fg, iir_float_t q, unsigned order, unsigned filterType); + +iir_float_t IIRBilTrans(iir_float_t fg, iir_float_t fa); +iir_float_t IIRCalcQp(unsigned p, unsigned N); +void IIR(struct _sIIRCoeff *pCoeff, iir_float_t *xn, iir_float_t *yn, unsigned order, unsigned numPoints); +iir_float_t IIRS(struct _sIIRCoeff *pCoeff, iir_float_t xn, unsigned order); + +void IIRSSE(struct _sIIRCoeff *pCoeff, iir_float_t *xn, iir_float_t *yn, unsigned order, unsigned numPoints); +void IIRPrintCoeff(FILE *pFile, struct _sIIRCoeff *pCoeff, unsigned N); +void ScaleCoeff(struct _sIIRCoeff *pCoeff); +iir_float_t MinMag(iir_float_t val1, iir_float_t val2); +iir_float_t MaxMag(iir_float_t val1, iir_float_t val2); + +void IIR_lin_init(iir_lin_t *pObj, unsigned order); +void IIR_lin_free(iir_lin_t *pObj); +iir_float_t IIR_lin_process(iir_lin_t *pObj, iir_float_t *pB, iir_float_t *pA, iir_float_t x); + +#ifdef __cplusplus +} +#endif +#endif // IIR_H +/******************************************************************************/ diff --git a/Iir.h.double b/Iir.h.double new file mode 100755 index 0000000..e90ed61 --- /dev/null +++ b/Iir.h.double @@ -0,0 +1,69 @@ +/******************************************************************************/ +/* iir.h +/******************************************************************************/ +#ifndef IIR_H +#define IIR_H + +#define pi 3.1415926535897932384626433832795 + +#define IIR_FILTERTYPE_UNKNOWN 0x00000000 +#define IIR_FILTERTYPE_LOWPASS 0x00000001 +#define IIR_FILTERTYPE_HIGHPASS 0x00000002 +#define IIR_FILTERTYPE_BANDPASS 0x00000003 +#define IIR_FILTERTYPE_BANDSTOP 0x00000004 +#define IIR_FILTERTYPE_PEAKING 0x00000005 +#define IIR_FILTERTYPE_LOWSHELF 0x00000006 +#define IIR_FILTERTYPE_HIGHSHELF 0x00000007 + + +/******************************************************************************/ +typedef struct _sComplex +{ + double pRealData, pImagData; +} Complex; + +typedef struct _sIIRCoeff +{ + + double ak0, ak1, ak2; + double bk0, bk1, bk2; + double xn1, xn2; + double yn1, yn2; + +}IIRCOEFF; + +typedef struct _sIIRParam +{ + /* General Params */ + double fg, Qf; + + /* for shelving EQs */ + double beta; + + /* for peaking and shelving EQs */ + double A; +}IIRPARAM; + +/******************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +void IIRInit(struct _sIIRCoeff *pCoeff, unsigned order); +int IIRCalcPartFilterCoeff1(struct _sIIRCoeff *pCoeff, double fa, double fg, double qp, unsigned filterType); +int IIRCalcPartFilterCoeff2(struct _sIIRCoeff *pCoeff, double A, double fa, double fg, double qp, unsigned filterType); +void IIRCalcFilterCoeff(struct _sIIRCoeff *pCoeff, double fa, double fg, double q, unsigned order, unsigned filterType); + +double IIRBilTrans(double fg, double fa); +double IIRCalcQp(unsigned p, unsigned N); +void IIR(struct _sIIRCoeff *pCoeff, double *xn, double *yn, unsigned order, unsigned numPoints); +void IIRPrintCoeff(FILE *pFile, struct _sIIRCoeff *pCoeff, unsigned N); +void ScaleCoeff(struct _sIIRCoeff *pCoeff); +double MinMag(double val1, double val2); +double MaxMag(double val1, double val2); + +#ifdef __cplusplus +} +#endif +#endif // IIR_H +/******************************************************************************/ diff --git a/Iir.opt b/Iir.opt new file mode 100755 index 0000000000000000000000000000000000000000..d73589b96180146e47d3c127d09df8c506fc8778 GIT binary patch literal 48640 zcmeI5T~iy^8OIl6Y`jh#+o5iozMU$qZ5s3jHm+5d8m$D84K_hGIF2%@UXIb4WmmIW znb?`k^r9c27j37P?R76Y{RX|vUHbuYkz~?~<|`yE{XZ)$gMfe_V;7kJ!T)_ZdiFf$ z{Pswmd1jxp|NO_fkN^C)S3fZ}l?kKY`0v^&N~hXx?I=O>{-=oDl^ry;q|-@yJ1^fH7gV4Q=_L$5$X&^IBm`xf@!hQ0&6 z3Vj#)9`t?a2ha~8u`6I7gI?fftWI;J74^2VS&>N80iEiU~2AYNLKzE@z=uK!I zDnep+ANvJp5qbc<1wDk`hDy*okk}oRGH-bJ3k-#kyV(22Q}nR+ase|Y8q2X=F8laj ztJZk>?|m}<$aE3jePh{Z8V#dtR1J-u6w!||q$8sp_R2UG&QqDY(vKZX*FOsTDU%f? z3-6w>3jZ2MdoO2=V}0`7k>AB${l6q`I{x!U&9E_6p|GEF2L9#yD!!%k(#8cb>iF-& z{gb};+qQpcI#XKp{N++kKhciYD9siZtkO&&Tb#E_g~EIZHi=rZA@=dD<+kTOvX@$Z zIj}u9qhPG!YSDJbMpaH%T1#86h{w$v$@|lQex&P8^O?3C?Y67)elySxPE}3& zD$pwp&;QKFX|5b-Td7z+Q(7$Cxqh{DFF!k1nlH{>868U{?#<4{)QTObf?F>;fp*Qe z&7|u&-jb)1vokf7TpUx$=@saKN#*~xMNq;Ix4RfWWc0^ zf2c3j^ zkw};V3d1s&IZR-6g>-;#v{NPq-LfCNZ@ z1W14cNPq+m7J=XV>Ai#1A@+s@NZ^GM=$Gi}CfO1cQ6C6I*GM@jpb#82^*_ zGvj~qrC=ce5+DH*AOR8}0TLhq5;&R!82>w(_m!g}fnEs=A_O-(b4wm=-5g(I{EyH7 z@%cYK|JUnJ3GGOL1W14cNPq-LfCNZ@1P(9(#{UlR&0*I_-~|xaF8_KF8Obiffsz-! zTZtk6Sk?+?XCL>LfBYk9w3B~aKo)($co!b+ePuu+|9ahbuldifZ{uI8_EXG#_`fQS zI^(wt2f6M|{4Ich262V81NOv!&*T5)2LJtd^iy)bPu_OQNPTq&ZshOIPn<@L>ZW)v`>_lXY3F?Jv0e@?>*278&P8Y6Y$4&h>eX~j zQoOZ$<_%p&@^`$e(UX#!iQQoH}k*u^E=3ENPq-LfCNZ@ z1W14cNPq+mHUY+e5BB|G??~Wz6ZqBV?L_Ev67lO=t}zU&g{wUd8deyss|H)GUfFov zymoZCsU-=!@7L0EIr@A+60POviveuHvbCMBzDBN=a$<0(Sj^5NZTqxg-790YzMz05 zA-6WQ!FWqJu@8&chJ%^*y;h^sFoz5)ryJU>X}9{+^4y?| zr5OFLCfg0Sw_N{`>pzC`m>Uux0TLhq5+DH*AOR8}0TOue1Q`E&@yzLw1P&5`DE`+M zJ_U%L^=`09l7iQV&iG&Z;X}s%`2J_U|9Smqfd?c&0wh2J zBtQZrKmsH{0*8hG<9~A5 zb{4qoH;*Fq{>XHuwCefGrJR1E9j{TEZ9b`%X6#DSua*k7FOuaLM?O$D)1%`%HJ02{ zW7opAq7EHL!!Lb=g(O$Y)q2ZaN_U@*cAt)QpI(t(Ns)ANEIrBm??<}sJkvJc|81Hk z-~SzcH@G1I5+DH*AOR8}0TLhq5;(F182>%8x0VAVfu0DQKtK%fzvD)KpYg}8E3BmT zdibWCuG;5!auH1rcbbp(k+;{jL?DX`R;h5unz^6LOZag#QNQ^9=wyEM+T>U+p1wA9 zHJ(oAQt`>DbT*z!O{T2tsj2I^{P+ikG16&OB7srp^h+H48!<8rhzfj}_ zOuvJq{Jy~{oj25H|7Kj36KB@ ekN^pg011!)36Q{HC&2jMVZVdyKM8z20{;UW312P% literal 0 HcmV?d00001 diff --git a/Iir2.c b/Iir2.c new file mode 100755 index 0000000..a887245 --- /dev/null +++ b/Iir2.c @@ -0,0 +1,295 @@ +/*************************************************************************/ +/* iir.c */ +/*************************************************************************/ +#include "stdio.h" +#include "stdlib.h" +#include "math.h" +#include "iir2.h" + +/*************************************************************************/ +/* Global Variables */ +/*************************************************************************/ +const char *filterTypeString[] = +{ + "Unknown filter type", + "Butterworth-Lowpass", + "Butterworth-Highpass", + "Butterworth-Bandpass", + "Butterworth-Bandstop", + "Peaking-EQ", + "Low Shelving-EQ", + "High Shelving-EQ" +}; + +/******************************************************************************/ +void IIRCalcFilterCoeff(iir_coef_t *pCoeff, iir_float_t fa, iir_float_t fg, iir_float_t q, unsigned order, unsigned filterType) +{ + unsigned p; + iir_float_t qp; + +// IIRInit(pCoeff, order); + + for(p=0; p < order/2;p++) + { + qp = q * IIRCalcQp(p+1, order); + IIRCalcPartFilterCoeff2(&pCoeff[p], 1.0, fa, fg, qp, filterType); + } +} + +int IIRCalcPartFilterCoeff1(iir_coef_t *pCoeff, iir_float_t fa, iir_float_t fg, iir_float_t Qi, unsigned filterType) +{ + iir_float_t K, a0; + iir_float_t alpha, omega, ks, kc; + unsigned error; + + omega = (iir_float_t)(2*pi*fg/fa); + ks = (iir_float_t)sin(omega); + kc = (iir_float_t)cos(omega); + alpha = 0.5f*ks /Qi; + + K = IIRBilTrans(fg, fa); + a0 = K/Qi + 1; + + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = (1 - K/Qi)/a0; + pCoeff->ak2 = 0.0; + + pCoeff->bk0 = 1.0f/a0; + pCoeff->bk1 = 1.0f/a0; + pCoeff->bk2 = 0.0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = (1 - K/Qi) /a0; + pCoeff->ak2 = 0.0; + + pCoeff->bk0 = 1.0f*K /a0; + pCoeff->bk1 = -1.0f*K /a0; + pCoeff->bk2 = 0.0; + + break; + + default: + error = (unsigned)-1; + break; + } + return error; +} + +int IIRCalcPartFilterCoeff2(iir_coef_t *pCoeff, iir_float_t A, iir_float_t fa, iir_float_t fg, iir_float_t qp, unsigned filterType) +{ + iir_float_t a0; + iir_float_t alpha, omega, ks, kc; + unsigned error; + + omega = (iir_float_t)(2*pi*fg/fa); + ks = (iir_float_t)sin(omega); + kc = (iir_float_t)cos(omega); + alpha = 0.5f*ks /qp; + + error = 0; + switch(filterType) + { + case IIR_FILTERTYPE_LOWPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 0.5f*(1 - kc) /a0; + pCoeff->bk1 = (1 - kc) /a0; + pCoeff->bk2 = 0.5f*(1 - kc) /a0; + + break; + + case IIR_FILTERTYPE_HIGHPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 0.5f*(1 + kc) /a0; + pCoeff->bk1 = -(1 + kc) /a0; + pCoeff->bk2 = 0.5f*(1 + kc) /a0; + + break; + + case IIR_FILTERTYPE_BANDPASS: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = alpha /a0; + pCoeff->bk1 = 0; + pCoeff->bk2 = -alpha /a0; + + break; + + case IIR_FILTERTYPE_BANDSTOP: + + a0 = 1 + alpha; + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - alpha) /a0; + + pCoeff->bk0 = 1.0f /a0; + pCoeff->bk1 = -2.0f*kc /a0; + pCoeff->bk2 = 1.0f /a0; + + break; + + case IIR_FILTERTYPE_PEAKING: + + a0 = 1 + (alpha/A); + pCoeff->ak0 = 1.0f; + pCoeff->ak1 = -2.0f*kc /a0; + pCoeff->ak2 = (1 - (alpha/A)) /a0; + + pCoeff->bk0 = (1 + (alpha*A)) /a0; + pCoeff->bk1 = -2.0f*kc /a0; + pCoeff->bk2 = (1 - (alpha*A)) /a0; + + break; + + default: + error = -1; + break; + } + return error; +} + +void IIR(iir_state_t *pState, iir_coef_t *pCoeff, iir_float_t *xn, iir_float_t *yn, unsigned order, unsigned numPoints) +{ + iir_float_t xp, yp; + unsigned i, p; + unsigned numSec = order/2; + + for (i=0; iorder = order; + pObj->pX = (iir_float_t*)malloc((order+1)*sizeof(iir_float_t)); + pObj->pY = (iir_float_t*)malloc((order+1)*sizeof(iir_float_t)); + memset(pObj->pX, 0, (order+1)*sizeof(iir_float_t)); + memset(pObj->pY, 0, (order+1)*sizeof(iir_float_t)); +} + +void IIR_lin_free(iir_lin_t *pObj) +{ + if (pObj->pX) + free(pObj->pX); + + if (pObj->pY) + free(pObj->pY); + + pObj->order = 0; + +} + +iir_float_t IIR_lin_process(iir_lin_t *pObj, iir_float_t *pB, iir_float_t *pA, iir_float_t x) +{ + unsigned i; + iir_float_t y; + + if (!pObj->order) + return 0; + + for (i=pObj->order; i >= 1; i--) + pObj->pX[i] = pObj->pX[i-1]; + + for (i=pObj->order; i >= 1; i--) + pObj->pY[i] = pObj->pY[i-1]; + + pObj->pX[0] = x; + + y = 0; + for (i=0; i <= pObj->order; i++) + y += pObj->pX[i]*pB[i]; + + for (i=1; i <= pObj->order; i++) + y -= pObj->pY[i]*pA[i]; + + pObj->pY[0] = y; + + return y; + +} + diff --git a/Iir2.h b/Iir2.h new file mode 100755 index 0000000..9718dcd --- /dev/null +++ b/Iir2.h @@ -0,0 +1,97 @@ +/******************************************************************************/ +/* iir.h */ +/******************************************************************************/ +#ifndef IIR_H +#define IIR_H + +#include + +#ifndef pi +#define pi 3.1415926535897932384626433832795 +#endif + +#define IIR_FILTERTYPE_UNKNOWN 0x00000000 +#define IIR_FILTERTYPE_LOWPASS 0x00000001 +#define IIR_FILTERTYPE_HIGHPASS 0x00000002 +#define IIR_FILTERTYPE_BANDPASS 0x00000003 +#define IIR_FILTERTYPE_BANDSTOP 0x00000004 +#define IIR_FILTERTYPE_PEAKING 0x00000005 +#define IIR_FILTERTYPE_LOWSHELF 0x00000006 +#define IIR_FILTERTYPE_HIGHSHELF 0x00000007 + + +/******************************************************************************/ +#ifndef iir_float_t +#define iir_float_t float +#endif + +typedef struct _sComplex +{ + iir_float_t pRealData, pImagData; +} Complex; + +typedef struct _siir_coef_t +{ + + iir_float_t ak0, ak1, ak2; + iir_float_t bk0, bk1, bk2; + +} iir_coef_t; + +typedef struct _siir_state_t +{ + + iir_float_t xn1, xn2; + iir_float_t yn1, yn2; + +} iir_state_t; + +typedef struct _sIIRParam +{ + /* General Params */ + iir_float_t fg, Qf; + + /* for shelving EQs */ + iir_float_t beta; + + /* for peaking and shelving EQs */ + iir_float_t A; +}IIRPARAM; + +typedef struct _siir_lin_t +{ + unsigned order; + iir_float_t *pX, *pY; +} iir_lin_t; + + +/******************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +void IIRInit(iir_state_t *pState, unsigned order); +int IIRCalcPartFilterCoeff1(iir_coef_t *pCoeff, iir_float_t fa, iir_float_t fg, iir_float_t qp, unsigned filterType); +int IIRCalcPartFilterCoeff2(iir_coef_t *pCoeff, iir_float_t A, iir_float_t fa, iir_float_t fg, iir_float_t qp, unsigned filterType); +void IIRCalcFilterCoeff(iir_coef_t *pCoeff, iir_float_t fa, iir_float_t fg, iir_float_t q, unsigned order, unsigned filterType); + +iir_float_t IIRBilTrans(iir_float_t fg, iir_float_t fa); +iir_float_t IIRCalcQp(unsigned p, unsigned N); +void IIR(iir_state_t *pState, iir_coef_t *pCoeff, iir_float_t *xn, iir_float_t *yn, unsigned order, unsigned numPoints); +iir_float_t IIRS(iir_state_t *pState, iir_coef_t *pCoeff, iir_float_t xn, unsigned order); + +void IIRSSE(iir_coef_t *pCoeff, iir_float_t *xn, iir_float_t *yn, unsigned order, unsigned numPoints); +void IIRPrintCoeff(FILE *pFile, iir_coef_t *pCoeff, unsigned N); +void ScaleCoeff(iir_coef_t *pCoeff); +iir_float_t MinMag(iir_float_t val1, iir_float_t val2); +iir_float_t MaxMag(iir_float_t val1, iir_float_t val2); + +void IIR_lin_init(iir_lin_t *pObj, unsigned order); +void IIR_lin_free(iir_lin_t *pObj); +iir_float_t IIR_lin_process(iir_lin_t *pObj, iir_float_t *pB, iir_float_t *pA, iir_float_t x); + +#ifdef __cplusplus +} +#endif +#endif // IIR_H +/******************************************************************************/ diff --git a/Iir_h.bak b/Iir_h.bak new file mode 100755 index 0000000..b67dea7 --- /dev/null +++ b/Iir_h.bak @@ -0,0 +1,68 @@ +/******************************************************************************/ + +/******************************************************************************/ +#define pi 3.1415926535897932384626433832795 + +#define IIR_FILTERTYPE_UNKNOWN 0x00000000 +#define IIR_FILTERTYPE_LOWPASS 0x00000001 +#define IIR_FILTERTYPE_HIGHPASS 0x00000002 +#define IIR_FILTERTYPE_BANDPASS 0x00000003 +#define IIR_FILTERTYPE_BANDSTOP 0x00000004 + +/******************************************************************************/ +typedef struct _sComplex +{ + double pRealData, pImagData; +} Complex; + +class CIIRCoeff +{ +public: + CIIRCoeff(unsigned Na=0, unsigned Nb=0) + { + Init(Na, Nb); + } + ~CIIRCoeff() + { + if(m_pak!=0) + delete [] m_pak; + + if(m_pbk!=0) + delete [] m_pbk; + } + void Init(unsigned Na=0, unsigned Nb=0) + { + m_pak= 0; + m_pbk= 0; + m_Na = Na; + m_Nb = Nb; + m_aScale = 1.0; + m_bScale = 1.0; + + if(Na!=0) + m_pak = new double[Na+1]; + + if(Nb!=0) + m_pbk = new double[Nb+1]; + } + + double *m_pak, m_aScale; + unsigned m_Na; + double *m_pbk, m_bScale; + unsigned m_Nb; +}; + +/******************************************************************************/ +int IIRCalcPartFilterCoeff1(CIIRCoeff *pCoeff, double fg, double fa, double Qi, unsigned filterType); +int IIRCalcPartFilterCoeff2(CIIRCoeff *pCoeff, double fg, double fa, double Qi, unsigned filterType); +int IIRCalcFilterCoeff(double fg, double fa, double Qi, unsigned N, CIIRCoeff *pCoeff, unsigned filterType); +double IIRBilTrans(double fg, double fa); +double IIRCalcQp(unsigned p, unsigned N); +unsigned IIRMulPolynom(double *pA, unsigned orderA, double *pB, unsigned orderB, double *pProduct); +void IIR(double *xn, double *yn, CIIRCoeff *pCoeff, unsigned numPoints); +void IIRPrintCoeff(FILE *pFile, CIIRCoeff *pCoeff, unsigned N); +void ScaleCoeff(CIIRCoeff *pCoeff); +double MinMag(double val1, double val2); +double MaxMag(double val1, double val2); + +/******************************************************************************/ diff --git a/Release/iir.obj b/Release/iir.obj new file mode 100755 index 0000000000000000000000000000000000000000..911fe348d36a06bc9961584321c53529889ae278 GIT binary patch literal 10604 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 ^URT>VxUXKh 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 YAOR8}0TLhq5+DH*AOR8}fqz5b7k=ZVIsgCw literal 0 HcmV?d00001 diff --git a/iir.dsp b/iir.dsp new file mode 100755 index 0000000..f7d98fc --- /dev/null +++ b/iir.dsp @@ -0,0 +1,100 @@ +# Microsoft Developer Studio Project File - Name="iir" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=iir - Win32 Debug +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "iir.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "iir.mak" CFG="iir - Win32 Debug" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "iir - Win32 Release" (basierend auf "Win32 (x86) Static Library") +!MESSAGE "iir - Win32 Debug" (basierend auf "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "iir - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\lib\release\iir.lib" + +!ELSEIF "$(CFG)" == "iir - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\lib\debug\iir.lib" + +!ENDIF + +# Begin Target + +# Name "iir - Win32 Release" +# Name "iir - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\iir.cpp +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\Include\Iir.h +# End Source File +# End Group +# End Target +# End Project diff --git a/iir.dsw b/iir.dsw new file mode 100755 index 0000000..34721a7 --- /dev/null +++ b/iir.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "iir"=.\iir.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/iir.ncb b/iir.ncb new file mode 100755 index 0000000000000000000000000000000000000000..c1763753ab4cddbe6bd26a491063cbe656a6ae58 GIT binary patch literal 50176 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 Q5l{pa0YyL&xatx3KdN~9DgXcg literal 0 HcmV?d00001 diff --git a/iir.plg b/iir.plg new file mode 100755 index 0000000..dc251bf --- /dev/null +++ b/iir.plg @@ -0,0 +1,28 @@ + + +

+

Erstellungsprotokoll

+

+--------------------Konfiguration: iir - Win32 Debug-------------------- +

+

Befehlszeilen

+Erstellen der temporären Datei "E:\WIN95\TEMP\RSP4230.TMP" mit Inhalten +[ +/nologo /MLd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"Debug/iir.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"G:\work\Develop\MSVC\LIBSRC\IIR\iir.cpp" +] +Creating command line "cl.exe @E:\WIN95\TEMP\RSP4230.TMP" +Erstellen der Befehlzeile "link.exe -lib /nologo /out:"..\..\lib\debug\iir.lib" .\Debug\iir.obj " +

Ausgabefenster

+Kompilierung läuft... +iir.cpp +g:\work\develop\msvc\libsrc\iir\iir.cpp(63) : warning C4101: 'B0' : Unreferenzierte lokale Variable +Bibliothek wird erstellt... + + + +

Ergebnisse

+iir.lib - 0 Fehler, 1 Warnung(en) +
+ +