public void Create_Pressure() { P = new double[Receiver.Count][]; Pdir = new double[Receiver.Count][][]; double scale = Math.Sqrt(4096); for (int i = 0; i < Receiver.Count; i++) { double[][] ETC = new double[8][]; for (int oct = 0; oct < 8; oct++) ETC[oct] = new double[Io[i][0].Length]; for (int t = 0; t < ETC[0].Length; t++) { for (int oct = 0; oct < 8; oct++) ETC[oct][t] = Math.Sqrt(Io[i][oct][t] * Rho_C[i]); } P[i] = new double[ETC[0].Length + 4096]; Pdir[i] = new double[6][]; for (int j = 0; j < 6; j++) Pdir[i][j] = new double[ETC[0].Length + 4096]; for (int t = 0; t < ETC[0].Length; t++) { Rhino.RhinoApp.CommandPrompt = string.Format("Creating direct sound pressure for receiver {0}. {1}% complete, ", i, Math.Round((double)t / ETC[0].Length * 100)); double[] Pmin = Audio.Pach_SP.Filter.Signal(new double[8] { ETC[0][0], ETC[1][0], ETC[2][0], ETC[3][0], ETC[4][0], ETC[5][0], ETC[6][0], ETC[7][0] }, 44100, 4096, 0); //Audio.Pach_SP.Raised_Cosine_Window(ref Pmin); for (int u = 0; u < Pmin.Length; u++) { P[i][t + u] += Pmin[u];// *scale; } double[][] dir_E = new double[6][]; for (int d = 0; d < 6; d++) dir_E[d] = new double[8]; //double[] totalprms = new double[6]; Vector vpos = new Vector(), vneg = new Vector(); for (int oct = 0; oct < 8; oct++) { vpos += new Vector(Math.Abs(Dir_Rec_Pos[i][oct][t][0]), Math.Abs(Dir_Rec_Pos[i][oct][t][1]), Math.Abs(Dir_Rec_Pos[i][oct][t][2])); vneg += new Vector(Math.Abs(Dir_Rec_Neg[i][oct][t][0]), Math.Abs(Dir_Rec_Neg[i][oct][t][1]), Math.Abs(Dir_Rec_Neg[i][oct][t][2])); } //6th order normalization: double length = Math.Sqrt(+vpos.x * vpos.x + vneg.x * vneg.x + vpos.y * vpos.y + vneg.y * vneg.y + vpos.z * vpos.z + vneg.z * vneg.z); vpos /= length; vneg /= length; for (int j = 0; j < 3; j++) { for (int k = 0; k < 4096; k++) { int j2 = 2 * j; Pdir[i][j2][t + k] += Pmin[k] * vpos.byint(j);//((double.IsNaN(hist_temp[j2][k])) ? 0: hist_temp[j2][k]); Pdir[i][j2 + 1][t + k] += Pmin[k] * vneg.byint(j);//((double.IsNaN(hist_temp[j2 + 1][k])) ? 0 : hist_temp[j2 + 1][k]); } } } } }