/// <summary> /// Takes ETC, and extrapolates a pressure domain impulse response. /// </summary> /// <param name="DirectIn"></param> /// <param name="SpecularIn"></param> /// <param name="DiffuseIn"></param> /// <param name="CutOffTime"></param> /// <param name="sample_frequency_out">The desired sample frequency.</param> /// <param name="Rec_ID">The index of the receiver.</param> /// <returns></returns> public static double[] Expand_Dir_Response(Direct_Sound[] DirectIn, ImageSourceData[] SpecularIn, Environment.Receiver_Bank[] DiffuseIn, double CutOffTime, int sample_frequency_out, int Rec_ID, List <int> SrcID, double alt, double azi, bool degrees) { Random Rnd = new Random(); int length = (int)Math.Pow(2, 11); int sample_frequency_in = DiffuseIn[0].SampleRate; //fftwlib.fftw. FFT = new MathNet.Numerics.IntegralTransforms.Algorithms.DiscreteFourierTransform(); double[] IR = new double[(int)Math.Floor(sample_frequency_out * CutOffTime) + 2 * (int)length]; double[][] Octave_ETC = new double[8][]; double BW = (double)sample_frequency_out / (double)sample_frequency_in; //Convert to Pressure & Interpolate full resolution IR for (int oct = 0; oct < 8; oct++) { Octave_ETC[oct] = AcousticalMath.ETCurve_Directional(DirectIn, SpecularIn, DiffuseIn, CutOffTime, sample_frequency_in, oct, Rec_ID, SrcID, false, alt, azi, degrees); } return(ETCToPTC(Octave_ETC, CutOffTime, sample_frequency_in, sample_frequency_out, DirectIn[0].Rho_C[Rec_ID])); }