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