Неожиданный результат с DFT в MATLAB

У меня есть проблема, когда вычисление дискретного преобразования Фурье в MATLAB, по-видимому, дает правильный результат, но при построении амплитуды полученных частот вы можете увидеть значения, очень близкие к нулю, которые должны быть точно равны нулю. Я использую свою собственную реализацию:

function [y] = Discrete_Fourier_Transform(x)
    N=length(x);
    y=zeros(1,N);
    for k = 1:N
        for n = 1:N
            y(k) = y(k) + x(n)*exp( -1j*2*pi*(n-1)*(k-1)/N );
        end;
    end;
end

Я знаю, что лучше использовать fft из MATLAB, но мне нужно использовать свою собственную реализацию, как для колледжа.

Код, который я использовал для генерации прямоугольной волны:

x = [ones(1,8), -ones(1,8)];
for i=1:63
    x = [x, ones(1,8), -ones(1,8)];
end

Версия MATLAB: R2013a(8.1.0.604) 64 бит

Я перепробовал все, что случилось со мной, но у меня нет большого опыта использования MATLAB, и я не нашел информации, имеющей отношение к этой проблеме, на форумах. Я надеюсь, что кто-то может помочь мне.

Заранее спасибо.

1 ответ

Решение

Это будет численная проблема. Значения находятся в диапазоне 1e-15в то время как ДПФ вашего сигнала имеет значения в диапазоне 1e+02, Скорее всего, это не приведет к ошибкам при дальнейшей обработке. Вы можете рассчитать общую квадратическую ошибку между вашим DFT и MATLAB fft функция по

y = fft(x);
yh = Discrete_Fourier_Transform(x);
sum(abs(yh - y).^2)
ans = 
    3.1327e-20

который в основном равен нулю. Поэтому я бы пришел к выводу: ваша функция DFT работает просто отлично.

Одно небольшое замечание: вы можете легко векторизовать DFT.

n = 0:1:N-1;
k = 0:1:N-1;
y = exp(-1j*2*pi/N * n'*k) * x(:);

С n'*k Вы создаете матрицу со всеми комбинациями n а также k, Затем вы берете exp(...) каждого из этих матричных элементов. С x(:) ты уверен x является вектором столбца, так что вы можете сделать умножение матрицы (...)*x которая автоматически суммирует все k"S. На самом деле, я просто замечаю, что это точно известная матричная форма ДПФ.

Другие вопросы по тегам