public void ComputeTest_Shifted_Impulse() { data[0] = new Complex(0, 0); data[1] = new Complex(1, 0); data[2] = new Complex(0, 0); data[3] = new Complex(0, 0); var output = FFT.Compute(data); for (int i = 0; i < data.Length; i++) { Assert.AreEqual(1.0 / data.Length, output[i].Magnitude); } }
public void ComputeTest_Impulse() { data[0] = new Complex(1, 0); data[1] = new Complex(0, 0); data[2] = new Complex(0, 0); data[3] = new Complex(0, 0); var output = FFT.Compute(data); for (int i = 0; i < data.Length; i++) { Assert.AreEqual(1.0 / data.Length, output[i].Real); Assert.AreEqual(0, output[i].Imaginary); } }
private void OnAudioFilterRead(float[] data, int channels) { try { float[] sdata = new float[data.Length / channels]; for (int i = 0; i < sdata.Length; i++) { sdata[i] = data[i * channels]; } float[] realout = new float[sdata.Length]; float[] imagout = new float[sdata.Length]; float[] pamlout = new float[sdata.Length]; FFT.Compute((uint)sdata.Length, sdata, null, realout, imagout, false); FFT.Norm((uint)sdata.Length, realout, imagout, pamlout); float[] odata = new float[freqLength]; int centerFreq = 22050; for (int i = 0; i < freqLength; ++i) { if (FREQUENCY[i] > centerFreq) { odata[i] = 0; } else { int indice = (int)((float)FREQUENCY[i] * (float)pamlout.Length / (float)44100); if (indice >= pamlout.Length) { indice = pamlout.Length - 1; } float v = Mathf.Sqrt(pamlout[indice]); v = Mathf.Sqrt(v); odata[i] = v; } } SetDataSafe(odata); } catch { print("FFT err."); } }