Я просто изучаю Matlab и алгоритм быстрого преобразования Фурье.Как использовать FFT (быстрое преобразование Фурье) в Matlab
В качестве первого шага я попытался повторить этот пример: https://en.wikipedia.org/wiki/Fourier_transform#Example
Я использую следующий код:
t = -6:0.01:6;
s = cos(2 * pi * 3 * t) .* exp(-pi * t.^2);
figure(1);
plot(t, s);
xlim([-2 2]);
r = fft(s);
figure(2);
plot(t, abs(r));
И я получил следующую картину:
Рисунок 2:
Рисунок 1 в порядке, но на рисунке 2 нет. Я вижу, что одна из проблем заключается в том, что на рисунке 2 я должен нарисовать вектор r против частоты, а не во времени. Другая проблема на рисунке 2 - масштаб по оси Y.
Таким образом, у меня есть 2 вопроса для того, чтобы дублировать пример:
- Как можно получить в частотной области (ось Х на фиг.2)?
- Как следует масштабировать вектор r (ось Y на рисунке 2)?
Это не совсем релевантно к вопросу, но причина, имеющей длину сигнала или преобразовать размеры, которые являются степенями 2 не о точности результатов (никакой практический БПФ не будет точным в любом случае), речь идет о скорости. Преобразование размеров с небольшими основными коэффициентами выполняется быстрее, потому что проблему можно легко разделить. – CKT
@CKT Я никогда не говорил, что длина сигнала - это проблема, это было просто предложение для него/нее как стартера. Скорость верна, но точность разрешения частоты напрямую зависит от длины сигнала мощности 2, это имеет место для FFT, а не DFT, вы можете попробовать себя и посмотреть. – Soyol
Да, вы можете попробовать: >> DFT = @ (N) exp (-1j * 2 * pi/N * (0: (N-1)) '* (0: (N-1))); >> x = randn (100,1); >> max (abs (DFT (100) * x-fft (x)) ./ abs (DFT (100) * x)) ans = 1.3516e-13 >> x = [x; нули (28,1)]; >> max (abs (DFT (128) * x-fft (x)) ./ abs (DFT (128) * x)) ans = 1.5653e-13 Таким образом, нет, не имея силы 2, не обязательно будет давать вам худшую точность. Люди не используют силу 2 в БПФ для точности, они используют ее для скорости. В общем, вы не получите худшую точность для размеров без питания. Термины exp (__) не дают вам лучшего округления, когда N является степенью 2. – CKT