Изучение дискретного преобразования Фурье и его свойств

Страницы работы

Содержание работы

НОВОСИБИРСКИЙ  ГОСУДАРСТВЕННЫЙ  ТЕХНИЧЕСКИЙ 
УНИВЕРСИТЕТ

ФАКУЛЬТЕТ  АВТОМАТИКИ  И  ВЫЧИСЛИТЕЛЬНОЙ  ТЕХНИКИ

Кафедра  Систем Сбора и Обработки Данных

Дисциплина  «Теория  и  обработка  сигналов»

ЛАБОРАТОРНАЯ  РАБОТА  № 5

ДИСКРЕТНОЕ И БЫСТРОЕ ПРЕОБРАЗОВАНИЯ ФУРЬЕ

Выполнили:                                                                                             Проверил:

Белых Мария                                                                                           Щетинин Ю.И.

Лысенко Татьяна                                                                                         

Группа: АО-21

Новосибирск2004

Цель работы:Изучение дискретного преобразования Фурье и его свойств, алгоритмов быстрого преобразования Фурье, приобретение практических навыков вычисления и использования дискретного преобразования Фурье в среде Matlab.

2. Используя  функцию dftsum() для вычисления ДПФ по выражению (1)

      ,              (1)
 вычислить ДПФ и построить графики амплитудных спектров следующих сигналов:

          а)    для  N = 10.

          а)  x(n) = 1 для N = 10,

          б)  x(n) = cos(2πn/10) для  N = 10.

Файл-сценарий для вычисления ДПФ дельта-функции и единичной функции.

N=10; % Число отчетов

n=0:1:N;

df=1; Fmax=5;

f=-Fmax:df:Fmax;

k=1:10;

g(k)=1;

g(k+1)=0;%Задаем дельта-функцию

y=dftsum(g);% Вычисление  ДПФ

s(k)=1;%Задаем единичный сигнал

%s(k+1)=0;

y1=dftsum(s);y1p=fftshift(y1)./10;% Вычисление  ДПФ

% Построение графиков сигналов и их амплитудных спектров

subplot(411), stem(n,g); title('Signal')

subplot(412), stem(f,abs(y)); title('Amplitude spectrum')

subplot(413), stem(n,s); title('Signal')

subplot(414), stem(f,abs(y1)); title('Amplitude spectrum')

Рис.1 Графики дельта-функции и единичной функции и их амплитудных спектров

Файл-сценарий для вычисления ДПФ x(n) = cos(2πn/10) для  N = 10

N=10;  % Число отчетов

n=0:1:N;

df=1; Fmax=5;

f=-Fmax:df:Fmax;

x=cos(2*pi*n/10);; % задание сигнала

y1=dftsum(x); y1p=fftshift(y1)./10; % вычисление и сдвиг ДПФ

% Построение графика сигнала и его амплитудного спектра

figure(1), subplot(211), stem(n,x), title('Signal')

subplot(212), stem(f,abs(y1p)),title('Amplitude spectrum')

Рис.2 Графики функции x(n) = cos(2πn/10) и ее амплитудный спектр.

3. Написать Matlab-функцию для вычисления обратного (инверсного) ДПФ по выражению(2 )с форматом x = idftsum(X).

                    ,                    (2)

где XN-точечный вектор ДПФ, x – вектор сигнала во временной области.

Применить функцию idftsum(X) для вычисления обратного ДПФ  вышеприведенных сигналов. Сопоставить графики исходных сигналов и результаты вычисления с помощью idftsum(X).

Файл-функция для вычисления обратного ДПФ

function x=idftsum(X);

N=length(X);

for n=0:1:N-1;

    for k=0:1:N-1;

        Xk(k+1)=(X(k+1).*exp(j.*2.*pi.*k.*n./N))./10;

    end;

    x(n+1)=sum(Xk);

    y=abs(x(n+1));

end;

Файл-сценарий вычисления обратного ДПФ для дельта-функции и единичной функции.

N=10; % Число отчетов

n=0:1:N;

k=1:10;

g(k)=1;

g(k+1)=0;%Задаем дельта-функцию

y=dftsum(g);% Вычисление  ДПФ

y2=idftsum(y);% Вычисление обратного ДПФ

s(k)=1;%Задаем единичный сигнал

y1=dftsum(s);% Вычисление  ДПФ

y3=idftsum(y1);% Вычисление обратного ДПФ

% Построение графиков исходных и полученных с помощью функции

% idftsum сигналов

subplot(411), stem(n,g); title('Delta-function')

subplot(412), stem(n,y2); 

subplot(413), stem(n,s); title('Ones signal')

subplot(414), stem(n,y3);

Рис.3 Графики исходных и полученных с помощью функции

idftsum сигналов дельта-функции и единичной функции

Файл-функция вычисления обратного ДПФ для последовательности x(n) = cos(2πn/10).

N=10;  % Число отчетов

n=0:1:N;

x=cos(2*pi*n/10);; % задание сигнала

y=dftsum(x);% Вычисление ДПФ

h=idftsum(y);% Вычисление обратного ДПФ

% Построение графиков исходного и полученного с помощью функции

% idftsum сигналов

figure(1), subplot(211), stem(n,x)

subplot(212), stem(n,h)

Рис.4 График исходного и полученного с помощью функции

Idftsum сигнала x(n) = cos(2πn/10

Вывод:  Выполнив программу для вычисления ДПФ, мы построили графики амплитудных спектров заданных сигналов. Далее с помощью написанной нами файл-функции idftsum() вычислили обратное ДПФ  используя полученные ранее (в п.2) результаты вычисления ДПФ. Построив графики исходных сигналов и вычисленных в п.3 мы убедились, что оно идентичны.

4. Вычислить с помощью функции dftsum(x)  ДПФ случайной последовательности  длиной 503 точки. Используя функцию randn()для генерирования   последовательности и определить время вычисления функции  dftsum(x) с помощью встроенной в Matlab процедуры  cputime .

 Файл-сценарий для определения времени вычисления ДПФ с использованием        функции dftsum()

t=0:1:502;

% Формирование случайной последовательности

x=2*randn(size(t));

t1=cputime;   %  Начало времени вычисления ДПФ

y=dftsum(x);  % Вычисление  ДПФ

t2=cputime - t1 % Конец времени вычисления

% Построение графиков во временной и частотной области

subplot(211), plot(t,x)

subplot(212), plot(abs(y))

>> zad5_4

t2 =

    0.4910  Время вычисления ДПФ

5.Вычислить ДПФ случайной последовательности длиной 503 точки с помощью встроенной в Matlab функции fft(). Определить (функция cputime) время вычисления  ДПФ и сопоставить его с временем вычисления функции dftsum().

Файл-сценарий для определения времени вычисления ДПФ с использованием        функции fft()

t=0:0.001:0.502;

% Формирование случайной последовательности

x=2*randn(size(t));

t1=cputime;   %  Начало времени вычисления ДПФ

y=fft(x);  % Вычисление  ДПФ

t2=cputime - t1 % Конец времени вычисления

% Построение графиков во временной и частотной области

subplot(211), plot(t,x)

subplot(212), plot(abs(y))



>> zad5_5

t2 =

    0.0200 Время вычисления ДПФ

Вывод: Выполнив программу, предложенную нам в приложении1 мы определили время вычисления ДПФ с помощью функции dftsum() равное t=0,4910. Внеся в программу соответствующие изменения  мы определили время вычисления ДПФ с помощью функции fft() равное t1=0,0200. Вычислив отношение t1/t=24.5 сделали вывод, что функция fft() быстрее определяет время вычисления ДПФ чем функция dftsum().

6.Определить ближайшее сверху к значению 503 число, являющееся степенью 2. Найти время вычисления ДПФ для последовательности такой длины с помощью функций dftsum() и fft(). При вычислении с помощью fft() организовать цикл из 1000 вычислений и разделить общее время вычисления цикла на 1000.
        Объяснить различие времени вычисления для рассматриваемого случая по сравнению с предшествующим пунктом работы.

t=0:1:511;

% Формирование случайной последовательности

x=2*randn(size(t));

t1=cputime;   %  Начало времени вычисления ДПФ

y=dftsum(x);  % Вычисление  ДПФ

t2=cputime - t1 % Конец времени вычисления

% Построение графиков во временной и частотной области

subplot(211), plot(t,x)

subplot(212), plot(abs(y))

t2 =

    0.5300

t=0:0.001:0.511;

% Формирование случайной последовательности

x=2*randn(size(t));

t1=cputime; %  Начало времени вычисления ДПФ

   for k=0:1:1000;

      y=k*fft(x);

   end; % Вычисление  ДПФ

t2=(cputime - t1)./1000 % Конец времени вычисления

% Построение графиков во временной и частотной области

subplot(211), plot(t,x)

subplot(212), plot(abs(y))

t2 =

  1.5000e-004

Похожие материалы

Информация о работе