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

3.2. Вычисление дпф с помощью пакета matlab

В MATLAB вычисление ДПФ выполняется на основе БПФ и ОБПФ с помощью соответствующих функций:

X=fft(x)

x=ifft(X)

где:

х – N-точечная последовательность; в общем случае это вектор комплексных чисел;

X – N-точечное ДПФ; в общем случае это вектор комплексных чисел.

В MATLAB нижняя граница элементов массива равна единице, соответствие между элементами последовательностей x(n) и X(k) в (3.3.1) - (3.3.2), с одной стороны, и элементами векторов x и X в функциях fft и ifft, с другой будет следующим:

(3.3.1)

Это рекомендуется учитывать при построении в Matlab графиков последовательностей x(n), а так же модулей и аргументов ДПФ X(k).

Пример использования функций fft и ifft:

Задана N-точечная последовательность – вектор х. Вычислить N-точечное ДПФ – вектор Х – и убедиться во взаимной однозначности формул (3.3.1) - (3.3.2):

>> x=[1 2 3 4 5 6 7 8];

>> X=fft(x);

>> x=ifft(X)

x = 1 2 3 4 5 6 7 8

Рассчитанная с помощью ОДПФ последовательность совпала с исходной.

3.2.1. Внешняя функция fft_e1

Создание внешней функции fft_e1, для выбора значений ДПФ |X(k)|, которые, согласно критерию , относятся к сигналу:

Function-файлом называют создаваемый пользователем M-файл, представляющий собой внешнюю функцию.

По существу, внешняя функция – это подпрограмма, к которой можно обратиться из script-файла или непосредственно в режиме прямых вычислений.

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

% Определение значений модуля ДПФ, соответствующих сигналу

% е1 - заданный порог

% NX - длина ДПФ

% MODX - вектор значений модуля ДПФ

% MODm - вектор значений модуля ДПФ, соответствующих сигналу

% m - вектор значений частот, соответствующих MODm

% Цикл для определения векторов MODm и m

i=1;

MAX=max(MODX);

for k=1:NX

if (MODX(k)/MAX)>e1

MODm(i)=MODX(k);

m(i)=k;

i=i+1;

end

end

ПРИЛОЖЕНИЕ 3.4

Пример 3.1.

Вычислить модуль спектра вещественной периодической последовательности:

x(n) = 0.7sin(2πf1nT) + 0.5sin(2πf2nT) (3.4.1)

с периодом N=1024 и следующими значениями частот:

частота дискретизации fд=2000 Гц (период дискретизации T=1/2000 с);

f1 = 500 Гц;

f2 = 750 Гц.

Запишем последовательность x(n) (3.4.1), подставив исходные данные:

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

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

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

>> x=0.7*sin(0.5*pi.*n)+0.5*sin(0.75*pi.*n);

>> X=fft(x);

>> MOD=(2/N)*abs(X); MOD(1)=(1/N)*abs(X(1));

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

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

Построим график модуля спектра 1024-точечной периодической вещественной последовательности (рис. 3.4.1)

>> stem (k,MOD,'fill','MarkerSize',5), grid, xlabel('k'), title('fft N=1024')

Рис. 3.4.1. Модуль спектра 1024-точечной периодической вещественной последовательности

Для определения значений дискретных нормированных частот k, соответствующим гармоникам с амплитудами 0.7 и 0.5 (Рис.3.4.1), воспользуемся внешней функцией fft_e1. В данном случае шум отсутствует, поэтому значение порога ε1 можно выбрать малым, сравнимым с нулем, например, ε1=10-7:

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

e1=1e-7;

[MODm,m]=fft_e1(N,MOD,e1)

MODm =

0.7000 0.5000 0.5000 0.7000

m =

257 385 641 769

Пример 3. 2

Вычислить спектральную плотность 1024-точечной последовательности, представляющей собой смесь вещественной периодической последовательности x(n) с нормальным белым шумом. Построить графики последовательности и модуля ее спектральной плотности.

Сформируем 1024-точечную последовательность (вектор s) – сумму последовательности x(n) (3.4.1) (вектора х) и нормального белого шума (вектора noise).

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

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

>> x=0.7*sin(0.5*pi.*n)+0.5*sin(0.75*pi.*n);

>> noise=randn(1,length(x));

>> s=x+noise;

>> subplot(2,1,1), stem(n,s,'MarkerSize',3), grid, xlabel('n'), title ('s=x+rand N=1024')

Вычислим модуль спектральной плотности на основе ДПФ с учетом постоянных множителей.

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

>> S=fft(s);

>> MODS=(2/N)*abs(S); MODS(1)=(1/N)*abs(S(1));

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

>> subplot(2,1,2), stem(k,MODS, 'MarkerSize',3), grid, xlabel('k'), title('fft N=1024')

Для определения значений дискретных нормированных частот k, соответствующих гармоникам сигнала (рис. 3.4.2), можно воспользоваться внешней функцией fft_e1.

При использовании функции fft_e1 значение порога ε1 следует выбирать из условия:

При обработке реальных сигналов значение ε1, как правило, задается и зависит от конкретной задачи. Для обоснованного выбора ε1 в данном примере вычисляется числитель и знаменатель – MAX_NOISE и MAXS – и находится их отношение:

Рис. 3.4.2. 1024-точечная последовательность – смесь вещественной периодической последовательности с нормальным белым шумом и модуль ее спектральной плотности.

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

>> NOISE=fft(noise);

>> MODNOISE=(2/N)*abs(NOISE); MODNOISE(1)=(1/N)*abs(NOISE(1));

>> MAX_NOISE=max(MODNOISE);

>> MAXS=max(MODS)

>> [MAX_NOISE MAXS MAX_NOISE/MAXS]

ans =

0.1659 0.7514 0.2208

Таким образом, диапазон возможных значений ε1 равен:

0.2207< ε1<1.

Выберем ε1=0.5 и определим амплитуды и частоты гармоник, которые, относятся к сигналу:

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

>> e1=0.5;

>> [MODm,m]=fft_e1(N,MODS,e1)

MODm =

0.7514 0.4879 0.4879 0.7514

m =

257 385 641 769

Получились значения k1 и k2, такие же, как в примере 3.1.