Ejemplo n.º 1
0
 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;
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }