示例#1
0
        private void FIR_calculation(List <Complex> filter, ref List <Complex> resultL, ref List <Complex> resultR)
        {
            int            n       = this.dataSampleL.Count - 1 + filter.Count;
            String         bin     = Convert.ToString(n, 2);
            int            ftpoint = (int)Math.Pow(2.0, bin.Length);
            List <short>   xL      = appendArray(this.dataSampleL, ftpoint - this.dataSampleL.Count);
            List <short>   xR      = appendArray(this.dataSampleR, ftpoint - this.dataSampleR.Count);
            List <Complex> y1      = appendArray(filter, ftpoint - filter.Count);
            List <Complex> XL      = Fft.Fft_Ifft(xL, ftpoint, true);
            List <Complex> XR      = Fft.Fft_Ifft(xR, ftpoint, true);

            y1 = Fft.Fft_Ifft(y1, ftpoint, true);

            List <Complex> power_spectrum1 = new List <Complex>();
            List <Complex> power_spectrum2 = new List <Complex>();

            for (int i = 0; i < ftpoint; i++)
            {
                power_spectrum1.Add(y1[i] * XL[i]);
                power_spectrum2.Add(y1[i] * XR[i]);
            }
            power_spectrum1 = Fft.Fft_Ifft(power_spectrum1, ftpoint, false);
            power_spectrum2 = Fft.Fft_Ifft(power_spectrum2, ftpoint, false);
            resultL         = power_spectrum1;
            resultR         = power_spectrum2;
        }
示例#2
0
        public void FIR(List <Complex> filter)
        {
            List <Complex> resL = null;
            List <Complex> resR = null;

            this.FIR_calculation(filter, ref resL, ref resR);
            this.dataSampleL = Fft.ToShort(resL);
            this.dataSampleR = Fft.ToShort(resR);
        }
示例#3
0
        //Do FFT : IFFT,true:false
        public static List <Complex> Fft_Ifft(List <Complex> target, int dftpoint, Boolean mode)
        {
            Fft result = new Fft(target);

            int[]          bit = new int[dftpoint];
            List <Complex> wnk = new List <Complex> ();

            bit = bitReverse(dftpoint);
            result.data_replacement(bit, dftpoint);
            wnk = twiddleFactor(dftpoint, mode);
            result.butterfly(wnk, dftpoint, mode);
            return(result.value);
        }