Спектр Цифрового Сигнала


Спектр сигнала — разложение сигнала на простые функции (исходный сигнал представляется в виде линейной комбинации простых функций). Если в качестве простых функций используются sin/cos, то такое разложение называется преобразование Фурье. Если сигнал цифровой, то это Дискретное Преобразование Фурье (ДПФ). Восстановление сигнала по его спектру называется обратным преобразованием Фурье .

Прямое и обратное ДПФ определяется по следующим формулам.


x(n) — отсчеты цифрового сигнала
X(k) — спектр цифрового сигнала, комплексные значения
N — длина окна анализа. Чем больше окно, тем точнее определяются частотные компоненты и тем больше времени требуется для детектирования сигнала.

Реализация вычислений прямого преобразования на языке Matlab. Входные параметры — отсчеты цифрового сигнала (x) и длина спектра (K). Выходной параметр — комплексный спектр (X) сигнала.

function [X]=dft(x,K)
N=length(x);
n=0:N-1;
X=zeros(1,K);
for k=0:K-1,
X(k+1)=sum(x.*exp(-2*pi*1i*k*n/N));
end;

Обратное преобразование. Входные параметры — комплексный спектр (X) сигнала и длина восстанавливаемого сигнала (N). Выходной параметр — восстановленный сигнал (x).


function [x]=idft(X,N)
K=length(X);
k=0:K-1;
x=zeros(1,N);
for n=0:N-1,
x(n+1)=sum(X.*exp(2*pi*1i*k*n/(K*2)))/K;
end;

Рассмотрим ДПФ на примере. Исходный сигнал 500Гц оцифрован с частотой 10кГц. Рассчитаем спектр до половины частоты дискретизации (5000Гц). После ДПФ мы видим в спектре одну линию на частоте 500Гц.

По формуле прямого преобразования сигнал получается ненормированный. Для нормирования необходимо каждый элемент спектра поделить на N (так сделано при построении графиков). После этого модуль каждого элемента спектра будет означать мощность сигнала на этой частоте. Для проверки можно посчитать мощность исходного сигнала (сумма квадратов отсчетов, поделенных на количество) и получить тоже значение — 0.5

При обратном преобразовании мы можем восстанавливать сигнал произвольной длительности. Для примера восстановили сигнал в 4 раза длиннеее исходного.

Спектр цифрового сигнала циклический. Рассмотрим его внимательней.
Если мы будем вычислять спектр сигнала и после половины частоты дискретизации, то увидим, что он повторяется.

В нашем примере исходный сигнал состоял из кратного количества периодов тонального сигнала с частотой 500Гц. Рассмотрим вариант, когда в сигнале находится некратное количество периодов (наприимер 3.5 периода).

Это явление называется "растекание" спектра и является следствием того, что при преобразовании Фурье, мы считаем, что наш сигнал периодический. Посмотрим, что происходит при восстановлении сигнала. После восстановления, мы видим что в сигнале присутствуют "обрывы" и как следствие спектр сигнала более сложный.

Для борьбы с растеканием спектра применяют окна, которые накладываются на исходный сигнал. Рассмотрим пример с использованием окна Хэмминга. Окно рассчитывется такой же длины, как и исходный сигнал.
Сигнал после восстановления не содержит обрывов, что позволяет применять спектральный анализ к произвольной длине окна, не учитывая кратность периодов.

Программа на Matlab/Octave для получения графиков из заметки под катом.