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; }
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); }
//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); }