Относительно понимания амплитуды, содержащейся в сигнале

Я просто хочу знать и понять, почему сигнал x1 имеет самую высокую амплитуду, а сигнал x2 имеет самую низкую, как показано ниже на изображении?

когда я запускал код, я ожидал увидеть x1 с наименьшей амплитудой, x2 со средней амплитудой и x3 с наибольшей амплитудой, потому что, как показано в приведенных ниже уравнениях, x1 умножается на 10, а x2 равняется x1 плюс еще одна амплитуда 10 и так далее.

пожалуйста, уточните эти моменты.

введите здесь описание изображения


person LetsamrIt    schedule 29.12.2014    source источник
comment
x3 состоит из трех косинусоидальных сигналов с одинаковой амплитудой (10), но с разными частотами (3, 20 и 50 Гц). Я думаю, что различия в амплитуде на спектрограмме связаны с дискретностью данных.   -  person buzjwa    schedule 29.12.2014


Ответы (2)


Сигнал x3 содержит три косинуса с одинаковой амплитудой, но разными частотами. Поэтому в идеале спектр должен содержать три импульса Дирака с одинаковой амплитудой. Это было бы так только в том случае, если бы у нас было бесконечно долгое наблюдение за сигналами. У нас есть "оконный" сигнал, состоящий из числа L=8000 отсчетов. Вы «вырезаете» 8000 сэмплов, что похоже на умножение сигнала на прямоугольный сигнал. Спектр одного прямоугольника представляет собой синусоидальный импульс, состоящий из главного лепестка и нескольких меньших боковых лепестков.

Таким образом, спектр, который вы получите для x3, будет сверткой трех дираков с импульсом sinc. Это именно то, что вы получаете при построении DTFT:

введите здесь описание изображения

ДПФ — это выборочная версия ДВПФ. Частоты k DFT введите здесь описание изображенияопределяются как

введите здесь описание изображения

где N — длина ДПФ. Вот где ваша проблема: вы вычисляете ДПФ с N=8192 и fs=8000. Таким образом, вы не попадете в точные частоты f1, f2, f3. Ближайшие точки к «настоящим» вершинам будут

f1 = 2.9297 Hz
f2 = 19.5313 Hz
f3 = 49.8047 Hz

Следовательно, пики, которые вы видите в ДПФ, меньше, чем должны быть.

введите здесь описание изображения

Вы также видите, что самая большая разница между реальной и измеренной частотой, которая составляет f2, приводит к наименьшему пику в ДПФ. Ошибка округления по частотам остается меньше, чем введите здесь описание изображения, т.е. уменьшается с увеличением длины ДПФ.

Короче говоря: для периодического сигнала вы можете настроить длину ДПФ, чтобы убедиться, что ДПФ соответствует реальным частотам (как предложил @gg349 в своем ответе). В общем, вы можете увеличить длину ДПФ на N, чтобы получить меньшую ошибку округления и приблизиться к ДПФ. Чтобы получить лучший DTFT и, следовательно, увеличить разрешение по частоте, вы должны увеличить длину данных L.

person hbaderts    schedule 29.12.2014
comment
Это было бы так только в том случае, если бы у нас были бесконечные выборки сигналов. Это в корне неверно. Пока сигнал является периодическим, ДПФ является хорошим инструментом для работы, и он будет точно извлекать амплитуды гармоник. Я думаю, что это не лучшая идея использовать прямоугольное окно для обсуждения амплитуд гармоник. И последнее предложение — не лучший вариант, так как вам не нужно много образцов. - person gg349; 29.12.2014
comment
Если вы ограничитесь только периодическими сигналами, ваши комментарии и ваш ответ будут правильными и обоснованными. Утверждения из моего ответа должны работать для любых произвольных сигналов. Для пояснения, под бесконечными выборками я подразумеваю бесконечно долгое наблюдение, а не бесконечную частоту выборки. - person hbaderts; 29.12.2014
comment
Вопрос касается периодического сигнала. Вы можете уточнить это - person gg349; 29.12.2014

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