본문 바로가기
Matlab

Matlab 필터 간단하게 구현하기(filter 함수)

by 매일사직서 2023. 5. 22.
반응형

Matlab Lowpass filter, Highpass filter, bandpass filter 등 간단하게 구현하는 방법에 대해 알아보겠습니다. 

Matlab 함수

filter를 구현하기 위해 지원하는 matlab 함수들은 굉장히 여러 가지가 있습니다. lowpass, highpass, bandpass, filter, firfilter 등 다양한 필터 함수가 있지만 이번에는 가장 기본적인 'filter' 함수를 사용해 보겠습니다. 

matlab filter

filter함수는  기본적으로 y = filter(b, a, x)로 구성됩니다. x는 데이터이며 b, a는 유리 전달 함수입니다. 많은 분들이 유리전달 함수가 뭐야?라고 할 것입니다. 유리 전달 함수를 알기 위해서는 Z 변환에 대해 알아야 합니다. 자세히 알고 싶으신 분들은 Z 변환에 대해 알아보시길 바랍니다. 

Z-tramsform 바로가기

matlab filter 구현

b, a를 구하기 위해서는 기본적으로 butter 함수를 사용하면 됩니다. butter 함수를 이용하여 각종 필터를 구현해 보도록 하겠습니다. 

Lowpass filter

fs = 1e3; % sampling frequency
t = 0:1/fs:1;
data = sin(2*pi*100*t); % 원하는 데이터
noise = sin(2*pi*333*t); % 원하지 않는 데이터
mix_sig = data + noise;
n = 3; % order ( 필터 차수 )
wn = 150; % cut off freuqnecy
fn = fs/2; % nyquist frequency
ftype = 'low';
[b,a] = butter(n,wn/fn,ftype);
y = filter(b,a,mix_sig); % filter
 
이렇게 구현하면 150Hz 이하의 신호만 남게 됩니다. 즉 원하지 않는 333Hz의 신호는 필터링 됩니다.

lowpass filter
lowpass filter

highpass filter

이번에는 noise 신호만 남겨보겠습니다. 샘플링을 조금올리고 1kHz 신호만 남겨보도록 하겠습니다. 

fs = 10e3; % sampling frequency
t = 0:1/fs:1;
data = sin(2*pi*100*t); % 원하는 데이터
noise = sin(2*pi*1000*t); % 원하지 않는 데이터
mix_sig = data + noise;
n = 10; % order ( 필터 차수 )
wn = 800; % cut off freuqnecy
fn = fs/2; % nyquist frequency
ftype = 'high';
[b,a] = butter(n,wn/fn,ftype);
y = filter(b,a,mix_sig); % filter
 
800Hz 이상의 신호만 남아있습니다. 
 
hiphpass filter
hipass filter

bandpass filter

 
bandpass filter는 wn 부분만 변경 해주시면 됩니다. 동일한 방법으로 100Hz 신호만 남기는 방법입니다. 
 
fs = 1e3; % sampling frequency
t = 0:1/fs:1;
data = sin(2*pi*100*t); % 원하는 데이터
noise = sin(2*pi*333*t); % 원하지 않는 데이터
mix_sig = data + noise;
n = 30; % order ( 필터 차수 )
wn = [80 120]; % cut off freuqnecy
fn = fs/2; % nyquist frequency
ftype = 'bandpass';
[b,a] = butter(n,wn/fn,ftype);
y = filter(b,a,mix_sig); % filter
 
이런식으로 하면 80Hz ~ 120Hz에 대한 신호만 살아 있습니다. 
 
bandpass filter
bandpassfilter

오늘은 filter에 대해 알아보았습니다. filter는 matlab에서 가장 기본적인 함수입니다. 물론 lopass함수 highpass함수를 쓰면 더 간단하게 할 수 있습니다만 filter라는 함수는 이후에 이용될 곳이 아주 많습니다. 그렇기 때문에 미리 사용해 보시길 바랍니다. 코드는 아래 남겨 두도록 하겠습니다. 

필터 코드 다운로드

반응형

댓글