Что с этим не так реализация преобразования Фурье

Я пытаюсь реализовать дискретное преобразование Фурье, но оно не работает. Я, вероятно, где-то написал ошибку, но я ее еще не нашел.

На основе следующей формулы:

terere

Эта функция выполняет первый цикл, перебирая X0 - Xn-1 ... enter image description here

    public Complex[] Transform(Complex[] data, bool reverse)
    {
        var transformed = new Complex[data.Length];
        for(var i = 0; i < data.Length; i++)
        {
            //I create a method to calculate a single value
            transformed[i] = TransformSingle(i, data, reverse);
        }
        return transformed;
    }

И собственно вычисления, вероятно, в этом и заключается ошибка.

    private Complex TransformSingle(int k, Complex[] data, bool reverse)
    {
        var sign = reverse ? 1.0: -1.0;
        var transformed = Complex.Zero;
        var argument = sign*2.0*Math.PI*k/data.Length;
        for(var i = 0; i < data.Length; i++)
        {
            transformed += data[i]*Complex.FromPolarCoordinates(1, argument*i);
        }
        return transformed;
    }

Затем объяснение остальной части кода:

var sign = reverse? 1.0: -1.0; Обратное ДПФ не будет иметь -1 в аргументе, в то время как обычное ДПФ имеет в аргументе -1 .

enter image description here

var arguments = sign * 2.0 * Math.PI * k / data.Length; - аргумент алгоритма. Эта часть:

enter image description here

, затем последняя часть

преобразована + = data [i] * Complex.FromPolarCoordinates (1, аргумент * i);

Я думаю, что тщательно скопировал алгоритм, поэтому я не вижу, где Я совершил ошибку ...

Дополнительная информация

Как показал в своем ответе Адам Гритт, AForge.net предлагает прекрасную реализацию этого алгоритма. Я, наверное, смогу решить эту проблему за 30 секунд, просто скопировав их код. Однако я все еще не Я не знаю, что я сделал неправильно в своей реализации.

Мне действительно любопытно, в чем мой недостаток и что я неправильно интерпретировал.

12
задан Timo Willemsen 20 April 2011 в 06:52
поделиться