2015년 12월 3일 목요일

MFC로 Digital Filter 설계하기

안녕하세요. 오늘은 MFC에 관한 글을 쓰겠습니다.
오늘 게시할 글의 주제는 MFC로 Digital Filter, 그 중에도 가장 간단하다고 할 수 있는 Low Pass Filter를 설계해보도록 하겠습니다. 그리고 설계한 Low Pass Filter에 cut off frequency를 넘지 않는 주파수와 넘는 주파수 성분을 갖는 정현파 신호를 입력하여 출력을 보도록 하겠습니다. 당연히 여기서 시스템 함수는 Low Pass Filter가 되겠죠?

방금 했던 설계 목표를 간단한 그림으로 다시 설명드리겠습니다.

h(t)는 시스템의 응답 특성 함수를 의미하고 여기에 x(t)를 입력 신호로 넣어주면 y(t)라는 결과를 얻을 수 있습니다. *기호는 convolution 연산 기호로써 실제 연산 방식은 아래 적분식입니다.
Digital Low pass filter를 설계한다는 것은 h(t)를 Low pass filter로 설계한다는 것입니다. Low pass filter가 제대로 설계되었는지 확인하기 위해서는 예를들어 Low pass filter의 cut off frequency가 10Hz라면 5Hz의 신호와 30Hz의 신호를 더해서 입력 신호로 넣은뒤 출력으로 나오는 신호의 주파수 성분을 분석하면 되겠죠. 주파수 성분을 보기 위해서는 푸리에 변환을 해서 주파수 영역에서 신호를 확인해주실 수 있습니다.

이제 Visual studio에서 본격적으로 MFC를 이용한 Digital filter를 설계해보겠습니다.


매우 허접하지만.. x축과 y축을 간단히 표시하고 맨 위 왼쪽부터 순서대로 x(t), h(t), y(t), X(f), H(f), Y(f)를 표시하겠습니다. 위에 표시되는 그래프는 time도메인, 아래 표시되는 그래프는 frequency도메인입니다.

h(t)를 만들어줄때는 푸리에시리즈를 이용하겠습니다. 다음의 계수를 푸리에시리즈에 대입하여 얻은 H(f)입니다.

이를 푸리에 역변환 하여 시간축상에서의 신호의 모습을 살펴보면 다음과 같습니다.

푸리에 역변환 한 모습에서 알 수 있는 점은 주파수 평면에서의 신호의 폭과 시간 평면상에서의 신호의 폭이 반비례하고 있다는 것과 주파수 평면에서 신호가 0에 가깝기는 하나 모든 주파수 성분의 신호를 갖고 있기 때문에 시간 축 상에서 그것이 임펄스 신호로 나타나고 있다는 점입니다. 어쨋든 Low pass filter의 설계가 이렇게 완료되었습니다.

입력으로는 x(t)=sin(5t)+sin(30t)를 넣겠습니다.

다음의 결과화면이 얻어지게 됩니다.


1,2,3
4,5,6
순서로 각 신호의 모습과 코드부분을 자세히 설명드리겠습니다.
1. 입력신호로 넣은 신호입니다. 5Hz의 신호 주파수와 30Hz의 신호 주파수 성분을 갖는 정현파 sin신호의 합입니다.
2. 푸리에시리즈(푸리에급수)로 만든 H(f)를 푸리에 역변환하여 얻은 시간평면상에서의 h(t)신호입니다. 신호의 위상을 따지지 않는다면 푸리에 역변환과 푸리에 변환은 동일한 결과를 갖습니다. 즉, 푸리에 급수로 얻은 H(f)를 푸리에 변환하면 h(t)를 얻을 수 있는 것입니다.

푸리에 급수로 H(f)를 만들어주고 이를 fourier 역변환으로 h(t)를 얻는 것이기 때문에 헷갈리시지 않도록 주의하셔야 합니다. 위의 코드가 fourier series로 H(f)를 만든 것이고, 아래 코드가 그 H(f)를 푸리에 역변환(위상고려 않기 때문에 푸리에 역변환과 푸리에 변환의 결과는 같으므로 푸리에 변환해줌.)하여 h(t)를 얻는 모습입니다.



자 그 다음은 x(t)와 h(t)를 컨벌루션 해주는 것입니다.
그리고 마지막으로 x(t), h(t), x(t)*h(t)(convolution결과)를 각각 푸리에 변환하여 주파수 영역에서의 신호의 주파수 특성을 살펴보도록 합니다.








댓글 2개:

  1. x축, y축 그래프는 어떻게 그리나요 ??

    답글삭제
    답글
    1. MoveTo(), LineTo()함수를 사용하시면 됩니다.^ㅡ^

      삭제