private ComplexFIR Create_FIR_COMPLEX(int size) { try { ComplexFIR p = new ComplexFIR(); p.coef = new ComplexF[size]; p.size = size; p.cplx = true; p.frq.lo = p.frq.hi = -1.0f; return p; } catch (Exception ex) { ComplexFIR pr = new ComplexFIR(); Debug.Write(ex.ToString()); return pr; } }
private ComplexFIR Create_FIR_Bandpass_COMPLEX(float lofreq, float hifreq, float samplerate, int size) { ComplexFIR p = new ComplexFIR(); ComplexF[] h; float[] w; float fc, ff, midpoint; int i, msize; float pi = 3.14159265358928f; float twopi = 2 * pi; h = new ComplexF[size]; if ((lofreq < -(samplerate / 2.0)) || (hifreq > (samplerate / 2.0)) || (hifreq <= lofreq)) return p; else if (size < 1) return p; else { msize = size - 1; midpoint = (float)(0.5f * msize); p = Create_FIR_COMPLEX(size); p.frq.lo = lofreq; p.frq.hi = hifreq; h = p.coef; w = new float[size]; w = makewindow(size, w); lofreq /= samplerate; hifreq /= samplerate; fc = (float)((hifreq - lofreq) / 2.0f); ff = (float)((lofreq + hifreq) * pi); for (i = 0; i < size; i++) { float k = (float)i - midpoint; float tmp, phs = ff * k; if ((float)i != midpoint) tmp = (float)((Math.Sin(twopi * k * fc) / (pi * k)) * w[i]); else tmp = (float)(2.0f * fc); tmp *= 2.0f; h[i].Re = (float)(tmp * Math.Cos(phs)); h[i].Im = (float)(tmp * Math.Sin(phs)); } return p; } }