Автор: Пользователь скрыл имя, 14 Декабря 2010 в 00:40, лабораторная работа
Цель работы: Изучение понятия и свойств непрерывной и дискретной свертки, приобретение практических навыков вычисления свертки в среде Matlab.
Последовательность
комманд для построения
графиков:
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)
и
их свертка
Восстановление
сигнала
из свертки с
помощью функции 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]
Последовательность
комманд для построения
графиков:
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 раз быстрее