Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DSP_PC / Лабораторная работа #2.docx
Скачиваний:
129
Добавлен:
27.04.2015
Размер:
337.16 Кб
Скачать

X(2) X(1) X(0) X(3)

3 2 1 N 0

, здесь :.

По формуле рассчитаем:

, для различных значений k при 0 ≤ k ≤ N-1 получим:

;

;

.

Процесс вычисления сумм в квадратных скобках можно представить в виде направленного графа «бабочки»:

Для того чтобы вычислить x-катое нужно построить такую схему:

Х(0)=А+С; Х(1)=B+W-1 D; X(2)=A-C; X(3)=B- W-1 D.

ПРИЛОЖЕНИЕ 4.3

Функция fftshift

Данная функция является встроенной в MATLAB и используется при выполнении лабораторной работы.

Элементы вектора, возвращаемого функцией fft, соответствуют частотам, равномерно распределенным в диапазоне от нуля и почти до частоты дискретизации. Первый элемент, таким образом, соответствует нулевой частоте, а последующий – частоте, меньшей частоты дискретизации на fд/N, где N – размер входного и выходного векторов. При выводе спектральных графиков иногда желательно, чтобы нулевая частота находилась в центре, а диапазон отображаемых частот простирался от - fд/2 до fд/2. Сделать это позволяет функция fftshift, которая меняет местами половины переданного ей вектора:

y = fftshift (x)

Продемонстрируем действие функции fftshift на примере двух коротких векторов четной и нечетной длины:

>> fftshift([1 2 3 4 5 6 7 8 9 10])

ans =

6 7 8 9 10 1 2 3 4 5

>> fftshift([1 2 3 4 5 6 7 8 9 10 11])

ans =

7 8 9 10 11 1 2 3 4 5 6

Как видно, в случае четной длины действительно происходит перестановка половин входного вектора. В случае нечетной длины перестановка выполняется так, чтобы первый элемент, соответствующий нулевой частоте, стал средним элементом результирующего вектора.

ПРИЛОЖЕНИЕ 4.4

Пример 4.1

Вычислить модуль спектра вещественной периодической последовательности с периодом N=32 (N-четное) и центрировать его относительно дискретной нормированной частоты k=0.

Сформируем 32-точечную последовательность – вектор х и выполним расчет модуля спектра. При построении графиков будем учитывать постоянные множители

и соответствие

Выполнение пункта задания 2 на Matlab

>> N=32;

>> n=0:(N-1);

>> x=1+0.7*sin((pi*n)/32);

>> X=fft(x);

>> MOD2=(2/N)*abs(X);

>> MOD2(1)=(1/N)*abs(X(1));

Выполнение пункта задания 3 на Matlab

>> subplot(3,1,1), stem(MOD2, 'fill','MarkerSize',3),...

grid, xlabel('k'), title ('fftshift N=32 X(k), k=1,2,...,N')

>> Xs=fftshift(X);

>> MOD2s=(2/N)*abs(Xs);

>> MOD2s(N/2+1)=(1/N)*abs(Xs(N/2+1));

>> subplot(3,1,2), stem(MOD2s, 'fill','MarkerSize', 3),...

grid, title('fftshift N=32 Xs(k), k=1,2,...,N')

>> k=-N/2:N/2-1;

>> subplot(3,1,3), stem(k,MOD2s,'fill','MarkerSize',3),...

grid, xlabel('k'), title('fftshift N=32 Xs(k), k=-N/2:N/2-1')

Рис.4.4.1 Модуль спектра 32-точечной периодической вещественной последовательности: вычисленный с помощью функции fft;

смещенный с помощью функции fftshift;

центрированный относительно k=0

Пример 4.2

Для вещественной периодической последовательности х(n) с периодом N=31 (N-нечетное), вычислить и построить график модуля спектра, центрированный относительно дискретной нормированной частоты k=0.

Выполнение пункта задания 4 на Matlab

>> N=31;

>> n=0:(N-1);

>> x=1+0.7*sin((pi*n)/8);

>> X=fft(x);

>> MOD2=(2/N)*abs(X);

>> MOD2(1)=(1/N)*abs(X(1));

>> subplot(3,1,1), stem(MOD2,'fill','MarkerSize',3),...

grid, xlabel('k'), title('fftshift N=31 X(k), k=1,2,...,N')

>> Xs=fftshift(X);

>> MOD2s=(2/N)*abs(Xs);

>> MOD2s((N-1)/2+1)=(1/N)*abs(Xs((N-1)/2+1));

>> subplot(3,1,2), stem(MOD2s, 'fill','MarkerSize',3),...

grid, title('fftshift N=31 Xs(k), k=1,2,...,N')

>> k=-(N-1)/2:(N-1)/2;

>> subplot(3,1,3), stem(k,MOD2s,'fill','MarkerSize',3),...

grid, xlabel('k'), title('fftshift N=31 Xs(k), k=-(N-1)/2:(N-1)/2')

Рис.4.4.2 Модуль спектра 31-точечной периодической вещественной последовательности: вычисленный с помощью функции fft;

смещенный с помощью функции fftshift; центрированный относительно k=0.