촬리의늘솔길

드디어~ Convolution 본문

✍~2022/MATLAB

드디어~ Convolution

리촬리 2021. 10. 3. 02:19

LTI시스템에 대해서 배우면서 이게 당최 뭔소리인가.. 싶었는데

마침 매트랩에서 실습했다!

...

conv 함수 (>> help conv)

∙ C = conv(A, B) convolves vectors A and B.

The resulting vector is length(A)+length(B)-1.

∙ 0과 1사이에 sample이 k개일 때, y축 크기는 실제의 k배이다.

0과 1사이를 잘게 나누어서 11111막 이래

적분했을때가아니라, 더하기했을때는 1*100 = 100이나옴

샘플이 100개이면, y축크기는 100개가 된다

 

(∵ MABLAB에서는 discrete signal의 convolution을 수행하기 때문)

∙ [Example 2.3.7]에서 y=conv(x,h)를 y=conv(x,h)*0.01로 바꾸어야 continuous convolution을 한 것으로 그려진다.

100개로 표현했으면 100으로 나누어주거나, 간격을 곱해주면 1/간격 = 가로축 1이라는 폭에서의 샘플의 개수

0과 1사이에 100개 있으니까 0.01 을 곱해줌

 

matlab의 상세한 설명

w = conv(u,v)는 벡터 u와 v의 컨벌루션을 반환합니다. u와 v가 다항식 계수의 벡터인 경우 컨벌루션은 두 다항식의 곱셈과 같습니다.

 

예제

w = conv(u,v,shape)는 컨벌루션에서 shape로 지정되는 하위 섹션을 반환합니다. 예를 들어, conv(u,v,'same')은 크기가 u와 동일한, 컨벌루션의 중앙부만 반환하고, conv(u,v,'valid')는 모서리를 0으로 채우지 않고 계산한 컨벌루션의 부분만 반환합니다.

% Example 2.3.7
A=1 ; T=2 ;
t=0:0.01:5 ; %눈으로 보았을때continuous처럼 보이게
x=A*exp(-t) ;
h=1/T*fn_r(t).*fn_u(T-t) ;
y=conv(x,h)*0.01 ;%x와h가 discrete하게 저장됨 ,x나h길이보다 길어짐
%가로축 시간간격을 곱해서 원하는 값을 얻도록한다.
subplot(311), 
    plot(t,x), grid on
    ylabel('x(t)')
    title('Example 2.3.7')
subplot(312), 
    plot(t,h), grid on
    ylabel('h(t)')
subplot(313), 
    plot(t,y(1:length(t))), grid on 
    ylabel('y(t)=conv(x(t),h(t))')
    xlabel('time (t)')
   
% functions

function y=fn_u(t)
% unit step function
y=zeros(1,length(t));
for i=1:length(t)
    if t(i)==0
        y(i)=0.5; 
    elseif t(i)>0
        y(i)=1;
    end
end
end    

function y=fn_r(t)
% unit ramp function
y=zeros(1,length(t));
for i=1:length(t)
    if t(i)>0
        y(i)=t(i); 
    end
end
end

% Example 2.3.8
a=1 ; 
dt=1 ;
t=-3:dt:3 ;
x=fn_u(t+a).*fn_u(a-t) ;
h=x ;
y=conv(x,h)*dt ;
ty=-6:dt:6 ;%y를 그리기 위한 가로축, 평행이동한 만큼이 컨볼루션의 시작점

subplot(311), 
    plot(t,x), grid on
    axis([-3 3 -0.2 1.2]), 
    ylabel('x(t)')
    title('Example 2.3.8')
subplot(312), 
    plot(t,h), grid on
    axis([-3 3 -0.2 1.2]), 
    ylabel('h(t)');
subplot(313), 
    plot(ty,y(1:length(ty))), grid on
    axis([-3 3 -0.2 2.2]), 
    ylabel('y(t)=x(t)*h(t)')
    xlabel('time (t)')
    
 %사각형두개 컨볼루션하면 삼각형나옴
% functions

function y=fn_u(t)
% unit step function
y=zeros(1,length(t));
for i=1:length(t)
    if t(i)==0
        y(i)=0.5; 
    elseif t(i)>0
        y(i)=1;
    end
end
end    

728x90

'✍~2022 > MATLAB' 카테고리의 다른 글

2. 실습  (0) 2021.09.23
MATLAB 실습 필기(신호 및 시스템)  (0) 2021.09.09