/** * Constructs a unit-impulse filter for specified lag1. * By default, all lag2 and lag3 are assumed to be zero. * <p> * For j=0 only, lag1[j] is zero. * All lag1[j] must be non-negative. * @param lag1 array of lags. */ public CausalFilter(int[] lag1) { this(lag1,impulse(lag1.length)); }
/** * Constructs a causal filter for specified lag1 and lag2. * By default, all lag3 are assumed to be zero. * <p> * For j=0 only, lag1[j] and lag2[j] are zero. * All lag2[j] must be non-negative. * If lag2[j] is zero, then lag1[j] must be non-negative. * @param lag1 array of lags in 1st dimension. * @param lag2 array of lags in 2nd dimension. * @param a array of filter coefficients for each lag. */ public CausalFilter(int[] lag1, int[] lag2, float[] a) { initLags(lag1,lag2,a); initA(a); }
public void test1Random() { int[] lag1 = {0,1,2}; final float[] a = { 1.00f, -1.80f, 0.81f}; // (1-0.9z)(1-0.9z) CausalFilter cf = new CausalFilter(lag1,a); int n = 100; float tiny = n*10.0f*FLT_EPSILON; float[] ax = zeros(n); float[] ay = zeros(n); cf.apply(x,ax); cf.applyTranspose(y,ay); float dyx = dot(y,ax); float dxy = dot(x,ay); float[] bx = zeros(n); float[] by = zeros(n); cf.applyInverse(x,bx); cf.applyInverseTranspose(y,by); float dyx = dot(y,bx); float dxy = dot(x,by); cf.apply(y,y); // in-place cf.applyInverse(y,y); // in-place assertEqual(x,y); cf.applyInverseTranspose(y,y); // in-place cf.applyTranspose(y,y); // in-place assertEqual(x,y);
1, 1, 1, 1, 1 }; CausalFilter cf = new CausalFilter(lag1,lag2); cf.factorWilsonBurg(100,FLT_EPSILON,r); float[][] s = new float[3][3]; float[][] t = new float[3][3]; s[1][1] = 1.0f; cf.apply(s,t); cf.applyTranspose(t,s); float emax = 0.01f*r[1][1]; for (int i2=0; i2<3; ++i2) {
this.applyInverseTranspose(s,t); this.applyInverse(t,u); u[k1] += 1.0f; this.apply(u,t); converged = true; for (int j=0; j<_m; ++j) {
public void testFactorFomelExample() { float[] r = {24.0f,242.0f,867.0f,1334.0f,867.0f,242.0f,24.0f}; int[] lag1 = {0,1,2,3}; CausalFilter cf = new CausalFilter(lag1); cf.factorWilsonBurg(10,0.0f,r); float[] a = cf.getA(); assertEquals(24.0f,a[0],10*FLT_EPSILON); assertEquals(26.0f,a[1],10*FLT_EPSILON); assertEquals( 9.0f,a[2],10*FLT_EPSILON); assertEquals( 1.0f,a[3],10*FLT_EPSILON); }
-0.02290331f, -0.04141619f, -0.08457147f, -0.20031442f, -0.55659920f }; CausalFilter cf = new CausalFilter(lag1,lag2,a); int n1 = 19; int n2 = 21; float[][] ax = zeros(n1,n2); float[][] ay = zeros(n1,n2); cf.apply(x,ax); cf.applyTranspose(y,ay); float dyx = dot(y,ax); float dxy = dot(x,ay); float[][] bx = zeros(n1,n2); float[][] by = zeros(n1,n2); cf.applyInverse(x,bx); cf.applyInverseTranspose(y,by); float dyx = dot(y,bx); float dxy = dot(x,by); cf.apply(y,y); // in-place cf.applyInverse(y,y); // in-place assertEqual(x,y); cf.applyInverseTranspose(y,y); // in-place cf.applyTranspose(y,y); // in-place assertEqual(x,y);
1, 1, 1, }; CausalFilter cf = new CausalFilter(lag1,lag2,lag3); cf.factorWilsonBurg(100,FLT_EPSILON,r); float[][][] s = new float[3][3][3]; float[][][] t = new float[3][3][3]; s[1][1][1] = 1.0f; cf.apply(s,t); cf.applyTranspose(t,s); float emax = 0.01f*r[1][1][1]; for (int i3=0; i3<3; ++i3) {
this.applyInverseTranspose(s,t); this.applyInverse(t,u); u[k2][k1] += 1.0f; this.apply(u,t); converged = true; for (int j=0; j<_m; ++j) {
-0.0213786f, -0.0898909f, -0.4322719f }; CausalFilter cf = new CausalFilter(lag1,lag2,lag3,a); int n1 = 11; int n2 = 13; float[][][] ax = zeros(n1,n2,n3); float[][][] ay = zeros(n1,n2,n3); cf.apply(x,ax); cf.applyTranspose(y,ay); float dyx = dot(y,ax); float dxy = dot(x,ay); float[][][] bx = zeros(n1,n2,n3); float[][][] by = zeros(n1,n2,n3); cf.applyInverse(x,bx); cf.applyInverseTranspose(y,by); float dyx = dot(y,bx); float dxy = dot(x,by); cf.apply(y,y); // in-place cf.applyInverse(y,y); // in-place assertEqual(x,y); cf.applyInverseTranspose(y,y); // in-place cf.applyTranspose(y,y); // in-place assertEqual(x,y);
float dtheta = FLT_PI/4.0f; float ftheta = -FLT_PI/8.0f; CausalFilter cf = new CausalFilter(lag1,lag2); for (int itheta=0; itheta<ntheta; ++itheta) { float theta = ftheta+itheta*dtheta; { -p12*p12, -2.0f*m12*p12, -m12*m12} }; cf.factorWilsonBurg(maxiter,epsilon,r); dump(r); zero(s); int k2 = (s.length-1)/2; s[k2][k1] = 1.0f; cf.apply(s,t); cf.applyTranspose(t,s); dump(s); dump(t);
this.applyInverseTranspose(s,t); this.applyInverse(t,u); u[k3][k2][k1] += 1.0f; this.apply(u,t); converged = true; for (int j=0; j<_m; ++j) {
/** * Constructs a causal filter for specified lag1. * By default, all lag2 and lag3 are assumed to be zero. * <p> * For j=0 only, lag1[j] is zero. * All lag1[j] must be non-negative. * @param lag1 array of lags. * @param a array of filter coefficients for each lag. */ public CausalFilter(int[] lag1, float[] a) { initLags(lag1,a); initA(a); }
/** * Constructs a unit-impulse filter for specified lag1 and lag2. * By default, all lag3 are assumed to be zero. * <p> * For j=0 only, lag1[j] and lag2[j] are zero. * All lag2[j] must be non-negative. * If lag2[j] is zero, then lag1[j] must be non-negative. * @param lag1 array of lags in 1st dimension. * @param lag2 array of lags in 2nd dimension. */ public CausalFilter(int[] lag1, int[] lag2) { this(lag1,lag2,impulse(lag1.length)); }
CausalFilter cf = new CausalFilter(lag1,lag2,lag3); for (int iphi=0; iphi<nphi; ++iphi) { float phi = fphi+iphi*dphi; { 0.0f, -m23*m23, 0.0f} }}; cf.factorWilsonBurg(maxiter,epsilon,r); float[] a = cf.getA(); for (int j=0; j<m; ++j) { if (abs(a[j])>amax[j]) int k3 = (s.length-1)/2; s[k3][k2][k1] = 1.0f; cf.apply(s,t); cf.applyTranspose(t,s);
/** * Constructs a causal filter for specified lag1, lag2, and lag3. * <p> * For j=0 only, lag1[j] and lag2[j] and lag3[j] are zero. * All lag3[j] must be non-negative. * If lag3[j] is zero, then lag2[j] must be non-negative. * If lag3[j] and lag2[j] are zero, then lag1[j] must be non-negative. * @param lag1 array of lags in 1st dimension. * @param lag2 array of lags in 2nd dimension. * @param lag3 array of lags in 3rd dimension. * @param a array of filter coefficients for each lag. */ public CausalFilter(int[] lag1, int[] lag2, int[] lag3, float[] a) { initLags(lag1,lag2,lag3,a); initA(a); }
/** * Constructs a unit-impulse filter for specified lag1, lag2, and lag3. * <p> * For j=0 only, lag1[j] and lag2[j] and lag3[j] are zero. * All lag3[j] must be non-negative. * If lag3[j] is zero, then lag2[j] must be non-negative. * If lag3[j] and lag2[j] are zero, then lag1[j] must be non-negative. * @param lag1 array of lags in 1st dimension. * @param lag2 array of lags in 2nd dimension. * @param lag3 array of lags in 3rd dimension. */ public CausalFilter(int[] lag1, int[] lag2, int[] lag3) { this(lag1,lag2,lag3,impulse(lag1.length)); }