public double[] TimeFiltration(int filterLength = 1025, double cutFreq = 550, int windowType = 2) { // d³ugoœæ sygna³u wynikowego bêdzie wynosi³a K(iloœæ próbek) + L(d³ugoœæ odpowiedzi impulsowej) - 1 double[] result = new double[dataNormalized.Length + filterLength - 1]; // obliczenie wspó³czynników filtra double[] filterFactors = SoundUtil.LowPassFilterFactors(cutFreq, sampleRate, filterLength); // wymno¿enie wspó³czynników przez funkcjê okna double[] filtered = SoundUtil.Windowing(filterFactors, windowType); List <float> data = dataNormalized.ToList(); float[] zeros = new float[filterLength - 1]; // uzupe³nienie okna zerami na pocz¹tku i koñcu data.InsertRange(0, zeros); data.AddRange(zeros); // wykonanie operacji splotu for (int i = filterLength - 1; i < data.Count; i++) { for (int j = 0; j < filtered.Length; j++) { result[i - filterLength + 1] += data[i - j] * filtered[j]; } } return(result); }