티스토리 뷰

Study/comm

[Signal] zp2tf and freqz function in matlab

생각많은 소심남 2015. 4. 10. 17:32

아무래도 신호처리를 하는 사람이라면 matlab을 필수적으로 다룰 것이다. 나도 학부때 배운 내용으로 온라인 강의에서 복습을 하고 있는데, 참 쉽지만은 않은 거 같다. 여튼...


보통 신호 및 시스템을 수강하면 후반부에 나오는 내용 중에 z-transform이라는 게 있다. 일종의 system상에 들어가는 signal에 대한 Discrete Time Fourier Transform (DTFT)을 쉽게 구해주는 technique이고, 그냥 개인적으로는 e^jw 형태를 z라고 표현한 거라고 이해하고 있다. 이걸 하다보면 우리한테 주어진 결과가 pole, zero, 그리고 어떤 filter에 대한 gain값이 나오게 된다. 이걸 토대로 frequency response를 구하는게 아마 최종적인 목적이 될것이다. 예를 들어 다음과 같은 p/z plot이 있다고 보자.


잠깐 부연 설명을 하자면 pole은 z-transform에서 중간에 도출되는 transfer function을 무한대로 보내주는 z값을 모아둔 것을 나타내고, zero는 반대로 0으로 보내주는 z값들이다. 그때 학부때 수업 시간에는 화살을 생각해서 화면을 뚫고 나가는 뒷면이 x이고 그게 pole이라고 외우고, 0으로 보내주는 건 말 그대로 O로 표현해주면 그게 다라고 외웠던 거 같은데, 지금보면 또 맞는 말인 듯 하다. 아무튼 위 그래프에서 zero는 -1, 1 이 될 것이고, pole은 0.5+0.5j와 0.5-0.5j가 되게 된다. 여기서 신호의 입력과 출력을 도출해야 되는데, 아마 완성된 form의 function을 보면 z의 차수가 엄청 많아서 복잡하다. matlab에서는 앞에서 언급한 pole과 zero, gain 값을 가지고, zp2tf 라는 함수를 사용하면, transfer function의 분모와 분자를 구할 수 있다. 이렇게 구한 값을 freqz라는 함수에 몇개를 sampling하겠다는 것을 명시해주고 넣어주게 되면,frequency domain 상에서의 transfer function의 frequency response에 대한 magnitude와 phase를 구할 수 있다. 예시 코드는 다음과 같다.


z = [-1;1];
p = [0.5+0.5j;0.5-0.5j];
k = 1;
n = 100;
  
% Use the zp2tf and freqz commands here to find the filters frequency response at 
% n=100 points. Store the frequency response to H, and the frequencies to w
[b, a] = zp2tf(z, p, k);
[H, w] = freqz(b, a, n);

subplot(2,1,1)
plot(w,abs(H));
title('The Frequency Response Magnitude of the Given Filter','fontsize',14);
xlabel('$\omega$','interpreter','LaTeX','fontsize',14);
ylabel('$|H(e^{j\omega})|$','interpreter','LaTeX','fontsize',14);


subplot(2,1,2)
plot(w,angle(H));
title('Frequency Response Phase','fontsize',14);
xlabel('$\omega$','interpreter','LaTeX','fontsize',14);
ylabel('$\angle H(e^{j\omega})$','interpreter','LaTeX','fontsize',14);


참고로 위의 예제를 그대로 활용한 예시이며 결과는 다음과 같이 나온다.



여기서 언급한 zp2tf이나 freqz에 대한 사용법이 궁금한 사람은 해당 링크를 참고해보기 바란다.

http://www.mathworks.com/help/signal/ref/zp2tf.html
http://www.mathworks.com/help/signal/ref/freqz.html

'Study > comm' 카테고리의 다른 글

[Signal] Frequency Division Multiplexing  (0) 2015.11.24
[Signal] Run-length Encoding  (0) 2015.11.03
[Signal] Matlab으로 만드는 기타소리.  (4) 2015.04.18
댓글