Непрерывная и дискретная свертки

Автор: Пользователь скрыл имя, 14 Декабря 2010 в 00:40, лабораторная работа

Описание работы

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

Работа содержит 1 файл

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ.doc

— 210.50 Кб (Скачать)

Последовательность  комманд для построения графиков: 

    clear();

    h1=[ones(1,3)];

    s=sqgen(50, 10);

    c=conv(h1,s);

    subplot(311), stem(h1);

    set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)

    title ('h1')

     

    subplot(312), stem(s);

    set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)

    title ('square')

     

    subplot(313), stem(c);

    set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)

    title ('conv')

     

рис.6. Графики h1=[ones(1,3)] и sqgen(50, 10) и их свертка 

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

Амплитудные значения свертки увеличатся вдвое, так как свертка вычисляется .

Рис.7 Графики h1=[ones(1,8)], sqgen(50, 10) и их свертка 

    1. Построение  графиков сигналов и  их свертки.

      Восстановление  сигнала  из свертки с помощью функции deconvn()  

 

Последовательность  комманд для построения графиков: 

        function u=stupfun(t)

        for i=1:length(t)

            if t(i)>=0

                u(i)=1;

            end

            if t(i)<0

                u(i)=0;

            end

        end 
         

    T=5;

    t=-T:T; %определение временного интервала

    tt=0:T;

    t1=tt-5;

    t2=tt+5;

    u=stupfun(tt); %определение функции u(t)

    u1=stupfun(t1); %определение функции u(t-5)

    u2=stupfun(t2); %определение функции u(t+5)

    figure(1);

    subplot(311), stem(tt,u); title('u(t)');

    subplot(312), stem(tt,u1); title('u(t-5)');

    subplot(313), stem(tt,u2); title('u(t+5)');

    t1=0:T;

    x1=sinc(t/pi); %определение сигналов

    x2=u-u1;

    x=conv(x1,x2); %вычисление свертки сигналов

    figure(2);

    subplot(411), stem(t,x1),title('x1');

    subplot(412), stem(t1,x2),title('x2');

    subplot(413), stem(x), title('convn')

    x3=deconv(x,x2); %выделение сигнала х1 из свертки

    subplot(414), stem(t,x3), title('deconv') 
     
     

Рис.8. Сигналы u[t], u[t+5], u[t-5] 

Рис.9. Входные сигналы, свёртка, восстановленые сигналы 
 

Восстановленный сигнал совпал с x1[n] 
 

    1.   Генерирование экспоненциального дискретного сигнала длительностью 401 отсчетов и прямоугольного сигнала из 200 отсчетов. Выполнение свёртки.
 
 
 

Последовательность комманд для построения графиков: 

      clear();

      n=0:0.01:4;

      y1=exp(-n); 

      n2=0:0.01:1.99;

      for i=1:200

          y2(i)=1;

      end

       

      n1=length(y1)

      n2=length(y2)

       

      t1 = cputime();

      for  n=1:n1+n2-1,

          y(n)=0;

         for k=max(1,n+1-n1):min(n,n2),

            y(n)=y(n)+sum(y1(n+1-k)*y2(k));

         end

      y(n)=y(n)*1/200;  

      end

       

      t2 = cputime() - t1

       

      subplot(211), stem(y1)

      hold on

      stem(y2,'r'),grid

      set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10);

      title('Экспотенциальный и прямоугольный сигнал');

      subplot(212), stem(y),grid

      set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10);

      title('Свёртка'); 
       
       

Рис. 11. Свёртка сигналов 

Время выполнения t = 0.002c 

     Выполнение  свёртки в частотной  области, с помощью  БПФ 

Последовательность  комманд для построения графиков: 

    clear();

    %генерирование  экспоненциального  сигнала

    n=0:0.01:4;

    y1=exp(-n);

    %генерирование  экспоненциального  сигнала

    for i=1:200

        y2(i)=1;

    end

     

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

    y1z=[y1 zeros(1,1024-401)];

    y2z=[y2 zeros(1,1024-200)];

     

     

    t1=cputime()

    %вычисление ДПФ последовательностей

    for ii=1:1000000

    y1f=fft(y1z);

    y2f=fft(y2z);

    yf=y1f.*y2f; %произведение ДПФ последовательностей

    x=fft(yf); %ОДПФ произведения

    end

    t2=(cputime()-t1)/1000000

    figure;

    n1=0:1023;

    n2=0:1023;

     

    length(y1z)

    length(y2z)

    length(n1)

    length(n2)

     

    subplot(211),

    stem(n1,y1z)

    hold on

    stem(n2,y2z,'g');

    subplot(212), stem(abs(x));

    set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10);

    title('Круговая свертка')

 

 

Время выполнения t2=0.00005c

 

Вычисление с  использованием ДПФ оказалось в 40 раз быстрее

Информация о работе Непрерывная и дискретная свертки