일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 퀀트
- FOMC
- 머신러닝
- 경제위기
- prometheus
- 테슬라
- 중국증시
- 스크리닝
- DSP
- 마법공식
- 금리인상
- 아모레퍼시픽
- WTI유
- Python
- WTI
- 주가분석
- 유상증자
- 코로나19
- 반려견치매
- 엘론 머스크
- 중국경제
- 뇌졸중
- 미국금리
- 제다큐어
- 지엔티파마
- 기업분석
- 주식투자
- 뉴지스탁
- 넬로넴다즈
- 국제유가
- Today
- Total
Data Analysis for Investment & Control
Matlab > FDA Tool을 이용한 FIR 필터 설계 본문
신호처리 시간에 배우는 필터 중에서 활용도가 높은 필터 중에 하나는 FIR 필터이다. 구현이 비교적 간단하다고 알려져 있으며 IIR 필터에 비해 안정성이 높다. 이번 시간에는 Matlab에 내장되어 있는 필터 설계 툴을 사용하여 이 FIR 필터를 설계하는 방법을 알아보도록 하겠다.
노이즈가 포함된 신호
필터 효과를 검증하기 위해 샘플 신호를 생성해 보도록 하겠다. 샘플 신호는 원본 신호에 노이즈를 첨가하여 생성하는데, 원본 신호의 Amplitude는 2, 주파수 역시 2Hz로 선정하였다. 노이즈 신호는 두 가지로 하나는 저주파 노이즈, 다른 하나는 고주파 노이즈를 생성하여 원본 신호에 더해주었다.
다음은 원본 신호와 노이즈 함수를 나타낸다.
여기서 f_n1 = 24Hz, f_n2 = 0.2Hz의 주파수를 나타낸다. 위의 신호를 합성하여 Raw Signal이라하고 이를 주파수 분석을 위해 FFT를 수행한 결과는 다음과 같다.
위의 그래프를 보면 원본 신호인 2Hz 주파수 대역에 신호가 강하게 잡히고, 0.2와 24Hz 부근에도 신호가 있는 것을 알수 있으며 그 이외의 전 영역에 걸쳐서 잡음이 끼어 있는 것을 확인할 수 있다.
FDA Tool을 이용한 Band-Pass 필터 설계
노이즈가 저주파와 고주파를 포함하고 있으므로 이를 제거하기 위해서는 Band-Pass 필터를 사용하여 원본 신호인 2Hz 대역의 성분만 걸러내야 한다.
Mablab의 커맨트 창에서 다음과 같이 입력한다.
그러면 다음과 같은 창이 뜰 것이다.
FDA Tool은 필터를 쉽게 설계하기 위한 인터페이스로 필터 종류 및 차수, 윈도우 종류 등을 설정해 주면 필요한 필터 계수를 얻을 수 있는 고마운 녀석이다.
위의 그림에서 Band-Pass 필터를 선택하여 FIR 타입으로 설정한 것을 볼 수 있다. Window는 Hamming을 선택하였으며, 샘플링 주파수는 1000Hz, Cut-off Freq.는 각각 1.5~3Hz로 설정하였다. 설정을 완료한 후, 하단에 'Design Filter' 버튼을 클릭하면 오른쪽 상단과 같이 필터 모양이 나타난다.
필터 계수를 얻기 위해서는 File->Export를 선택하여 내보내고자 하는 방법을 선택한 후, 'Export' 버튼을 클릭하면 된다. 위에서는 효과를 극단적으로 보기 위해 100차수의 필터 계수를 생성하였다.
Export 방법을 Coefficient File(ASCII)로 선택하면 하기와 같은 내용을 담을 파일을 생성한다.
% Coefficient Format: Decimal
% Discrete-Time FIR Filter (real)
% -------------------------------
% Filter Structure : Direct-Form FIR
% Filter Length : 101
% Stable : Yes
% Linear Phase : Yes (Type 1)
Numerator:
0.0012072647018132718
0.0012360369139075233
0.0012929106319431146
0.0013786856594568044
0.0014940077500945829
0.0016393631453255565
......
.....
....
...
..
.
이렇게 생성된 필터 계수를 이용하여 시간 도메인에서의 노이즈가 포함된 신호를 Convolution을 통해 필터링 하게 된다.
필터링 된 신호를 확인해 보면 다음과 같이 나타난다.
주파수 분석을 통해 확인을 해보니 2Hz 부근의 성분은 아직 살아있으며 그 보다 높은 영역에서는 많이 제거가 된 것을 보였다. 저주파 영역에서는 제거가 잘 되지 않은 것으로 보아 Band-Pass FIR 필터가 완벽하지는 않다는 것을 보여준다.
필터링된 신호를 보게 되면, 2Hz의 사인 파형으로 나타나지만, 자세히 보면 약간의 Offset과 찌그러짐이 나타난다. 이것은 필터링을 통해 원본 신호가 왜곡될 수 있음을 알수 있게 한다.
주의해야 할 것들
필터 설계에 있어서 주의해야 할 것들과 필터링이 가지고 있는 한계는 알고 있어야 한다. 우리가 찾고자 하는 원본 신호와 노이즈와의 주파수 대역이 확연히 구분되면 필터의 효과는 좋게 나타나나, 근접한 주파수를 가진다면 필터링의 효과가 제한적일 수 있다.
또한 필터 성능을 높이기 위해 차수를 높혀주는 것도 방법이지만, 실제 구현함에 있어서 RealTime Embedded System과 같은 환경에서 구현하고자 한다면 적당한 차수를 선정하는 것이 중요하다. 왜냐하면 높은 차수를 많은 연산량을 요구하기 때문이다.
위의 내용을 확인해보고자 하는 분들을 위해 Matlab 소스 코드를 첨부한다.
(이 글이 마음에 드신다면 아래 버튼을 눌러 주세요~~^^)
'Robotics > Theory' 카테고리의 다른 글
스미스 예측기(Smith Predictor)를 이용한 시간 지연 제어 (0) | 2015.04.13 |
---|---|
칼만 필터(Kalman Filter)의 이해 (2) | 2013.08.28 |
FIR 필터와 IIR 필터 (0) | 2009.06.15 |