Ответ 1
Отношение частоты (масштабирование по оси x)
Частота каждого значения, полученного БПФ, линейно связана с индексом выходного значения через:
f(i) = (i-1)*sampling_frequency/N
Где N - число точек FFT (т.е. N=length(y)
). В вашем случае N=2001
.
Можно вычесть частоту дискретизации из вашего определения t
как 1/T, где T - временной интервал выборки (T = 0,001 в вашем случае).
Таким образом, частота дискретизации составляет 1000 Гц.
Заметим, что поскольку значение t(i)
также линейно связано с индексом i
, через
t(i) = (i-1)*0.001
можно (хотя не обязательно советовать, так как это просто заслонит ваш код), чтобы определить f = 1000*t*sampling_frequency/N
.
Обратите внимание, что вам не хватает члена sampling_frequency/N
, который соответственно приводил к отображению тонов с неправильной частотой
(из определения x
должны быть пики с частотой 10 Гц и 50 Гц и соответствующие алиасы на частотах 990 Гц и 950 Гц).
Отношение амплитуды (масштабирование по оси Y)
Обратите внимание, что наблюдаемое соотношение является только приблизительным, поэтому следующее не является математическим доказательством, а просто интуитивным способом визуализации взаимосвязи между амплитудами тона во временной области и пиковыми значениями частотной области.
Упрощение проблемы до одного тона:
x = A*sin(2*pi*f*t)
Приблизительная амплитуда соответствующего пика может быть получена с помощью Теорема Парсеваля:
Во временной области (левая часть уравнения) выражение приблизительно равно 0.5*N*(A^2)
.
В частотной области (правая часть уравнения), делая следующие предположения:
- эффекты спектральной утечки являются незначительными.
- спектральное содержание тона содержится всего в 2 булавках (на частоте
f
и соответствующей частоте сглаживанияsampling_frequency-f
) учитывается суммирование (все остальные бины равны ~ 0). Обратите внимание, что это обычно выполняется только в том случае, если частота тона является точным (или почти точным) кратнымsampling_frequency/N
.
выражение в правой части приблизительно равно 2*(1/N)*abs(X(k))^2
для некоторого значения k
, соответствующего пику на частоте f
.
Полагая два вместе, получаем abs(X(k)) ~ 0.5*A*N
. Другими словами, выходная амплитуда показывает коэффициент масштабирования 0.5*N
(или приблизительно 1000 в вашем случае) относительно амплитуды во временной области, как вы это заметили.
Идея по-прежнему применяется с более чем одним тоном (хотя пренебрежимо малое предположение о спектральной утечке в конечном итоге ломается).