x1,x2,x3
имеют соответственно 1,2 и 3 гармоники на 3 разных частотах, и все гармоники имеют 10
амплитуду. Когда вы изучаете эти сигналы в частотной области, вы ожидаете, что x1,x2,x3
представит соответственно 1, 2 и 3 пика, и все пики будут иметь одинаковую амплитуду. Таким образом, x1
имеет 1 пик на частоте 3Hz
(при условии, что мы говорим здесь о времени), а x3
имеет 3 пика на частотах 3,20,50Hz
.
Несмотря на то, что я только что сказал, если вы построите абсолютное значение преобразования Фурье, не выбирая конкретное окно наблюдения, вы обнаружите, например, для x3
, что высоты 3 пиков на 3 частотах различаются. Это видно на верхнем правом рисунке для x3
, а также в ответе @hbaderts, который на самом деле не отвечает на ваш вопрос. Это происходит потому, что ваш вектор времени t
не кратен периоду сигнала, и это приводит вас к сигналу x3
(или x1,x2
, если на то пошло), который НЕ является периодическим (или, по крайней мере, не является периодическим в том смысле, в каком вы думали). было бы), и вы больше не можете ожидать, что вышеизложенное будет соблюдаться, потому что гораздо больше частотных составляющих испортит эту картину.
Поскольку вы генерируете сигнал, а не загружаете его с датчика, вы можете изменить окно наблюдения t
так, чтобы сигнал в этом окне был периодическим. Требуемое окно наблюдения в этом случае составляет 1
секунд (чтобы каждый из периодов t1,t2,t3
содержался в 1s
целое число раз). Затем вы можете выбрать количество равноотстоящих точек между t=0
и t=1
, исключая последнюю точку, то есть в диапазоне [0,1)
.
Осталось обсудить только частоту дискретизации, которая должна быть более чем в два раза выше самой высокой частоты вашего сигнала. В этом случае самая высокая частота. равно fmax = 50
, так что нам нужно семплировать выше fs=100Hz
, чтобы разрешить все гармоники. Нам также нужно, чтобы частота дискретизации была натуральным числом, иначе дискретные точки между 0
и 1
не будут равноотстоящими, и сигнал не будет периодическим.
Ниже приведен пример на python, который вы можете настроить в Matlab:
from numpy import arange, cos
from numpy.fft import rfft, rfftfreq
import matplotlib.pyplot as plt
f1, f2, f3 = 3., 20., 50. # in Hz
T1, T2, T3 = 1 / f1, 1 / f2, 1 / f3
T_all = 1
# From Shanon theoreom we must use a sampling freq. larger than this:
f_sample = 2 * max([f1, f2, f3])
# we also need to use an integer sampling frequency, or the
# points will not be equispaced between 0 and 1. We then add +1 to f_sample:
dt = 1 / (f_sample + 1)
t = arange(0, T_all, dt)
# another way of generating the points, without fixing the sampling frequency
# follows. In this case one must check that 1 / dt > f_sample afterwards
# t, dt = linspace(0, T_all, 2000, endpoint=False, retstep=True)
x3 = 1 * cos(2 * pi * f1 * t) + 2 * cos(2 * pi * f2 * t) + 3 * cos(2 * pi * f3 * t)
y = rfft(x3)
freqs = rfftfreq(t.size, d=dt) # in Hz
fig, ax = plt.subplots() # we plot the abs. value of the fft:
# the factor 2/t.size is the normalizing factor between peaks
# of the DFT and original amplitudes in time domain.
ax.plot(freqs, 2 * abs(y) / t.size, 'o')
ax.set_ylim(0, 3.5)
ax.set_xlabel('f [Hz]')
ax.grid()
fig.show()
Мы обнаруживаем, что дискретное ДПФ фактически показывает ненулевое значение только на обозначенных частотах. Соответствующим образом масштабируя результат, мы также восстанавливаем точную амплитуду гармоник, выбранную в этом примере как 1,2,3
. Для справки я сообщаю исходный временной сигнал с минимальной частотой дискретизации, как в коде выше, т.е. на частоте f_sample+1
Гц. Кроме того, частота дискретизации должна быть 1) больше f_sample
, чтобы избежать недостаточной дискретизации и соблюдать теорему Шеннона; 2) целое число, чтобы иметь равномерно распределенные дискретные отсчеты между 0s
и 1s
, т.е. чтобы иметь периодический сигнал.
Обратите внимание, что отсутствует последняя точка в точке t=1:
person
gg349
schedule
29.12.2014
x3
состоит из трех косинусоидальных сигналов с одинаковой амплитудой (10), но с разными частотами (3, 20 и 50 Гц). Я думаю, что различия в амплитуде на спектрограмме связаны с дискретностью данных. - person buzjwa   schedule 29.12.2014