728x90

 0. [matlab] - Discrete-time Convolution





 1. 풀이


컨볼루션의 개념을 이산시간으로 바꾸어 대입을 해주었다. 이러한 방법은 컴퓨터에서 컨볼루션을 수행할 수 있게 한다.

이때, 시간 간격을 작게 할 수록 실제 컨볼루션의 계산과 매우 근접하게 된다.



 2. 소스코드


1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
clear;
1) cos함수와 unit step function함수의 convolution 알고리즘 구현
= 0:1:19;
= cos(3*pi*n/4);          % x[n] = cos(a*n)의 배열을 만든다.
 
= 0:1:9;
= heaviside(m);
 
y_1 = convolution(x,h);     % 직접 구현한 알고리즘을 활용해 연산 결과를 y_1[n+m-1]에 담는다.
figure(1);
stem(y_1);
xlabel('n');                % x축 이름
ylabel('y_1[n]');           % y축 이름
 
2) conv과 stem 함수를 활용해 1)의 결과를 증명
y_2 = conv(x,h);
figure(2);
stem(y_2);
xlabel('n');                % x축 이름
ylabel('y_2[n]');           % y축 이름
 
 
% 결과를 배열에 담아 return 하는 convolution 함수
% x,h를 배열로 입력
function con = convolution(x, h)
    % 추후에 이 배열이 결과로 return
    % 배열의 길이는 '(x,h의 길이 총합) - 1'
    con = zeros(1, length(x) + length(h) - 1);
    
    % 이중 for문을 활용해 일정 영역 내부의 x*h를 전부 더한다.
    for n = 1 : 1 :length(con)
        for k =  max(1,n+1-length(x)):1:min(n,length(h))
            con(n) = con(n) + x(n-+ 1)*h(k);
        end
    end
end
cs



2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
clear;
1) sin함수와 지수함수의 convolution 알고리즘 구현
= 0:1:49;
= sin(3*pi*n/4);          % x[n] = sin(a*n)
 
= 0:1:19;
= exp(0.1*m);             % h[m] = exp(0.1*m)
 
y_1 = convolution(x,h);     % 직접 구현한 알고리즘을 활용해 연산 결과를 y_1[n+m-1]에 담는다.
figure(1);
stem(y_1);
xlabel('n');                % x축 이름
ylabel('y_1[n]');           % y축 이름
 
2) conv과 stem 함수를 활용해 1)의 결과를 증명
y_2 = conv(x,h);
figure(2);
stem(y_2);
xlabel('n');                % x축 이름
ylabel('y_2[n]');           % y축 이름
 
 
% 결과를 배열에 담아 return 하는 convolution 함수
% x,h를 배열로 입력
function con = convolution(x, h)
    % 추후에 이 배열이 결과로 return
    % 배열의 길이는 '(x,h의 길이 총합) - 1'
    con = zeros(1, length(x) + length(h) - 1);
    
    % 이중 for문을 활용해 일정 영역 내부의 x*h를 전부 더한다.
    for n = 1 : 1 :length(con)
        for k =  max(1,n+1-length(x)):1:min(n,length(h))
            con(n) = con(n) + x(n-+ 1)*h(k);
        end
    end
end
cs





 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts