public BluesteinTransformlet(int R, int N, ScalarValue[] u) : base(R, N, u) { // figure out the right Bluestein length and create a transformer for it Nb = SetBluesteinLength(2 * R - 1); ft = new Fourier(Nb); // compute the Bluestein coeffcients and compute the FT of the filter based on them b = ComputeBluesteinCoefficients(R); var c = new ScalarValue[Nb]; c[0] = ScalarValue.One; for (int i = 1; i < R; i++) { c[i] = b[i].Conjugate(); c[Nb - i] = c[i]; } for (int i = R; i <= Nb - R; i++) c[i] = ScalarValue.Zero; bt = ft.Transform(c); }
public MatrixValue Function(MatrixValue M) { var transpose = false; if (M.DimensionX > M.DimensionY) { transpose = true; M = M.Transpose(); } var fft = new Fourier(M.DimensionY); for (var i = 1; i <= M.DimensionX; i++) { var values = new ScalarValue[M.DimensionY]; for (var j = 1; j <= M.DimensionY; j++) { values[j - 1] = M[j, i]; } values = fft.Transform(values); for (var j = 1; j <= M.DimensionY; j++) { M[j, i] = values[j - 1]; } } if (transpose) { return M.Transpose(); } return M; }