Study/Feedback System

이산 시간 Low pass filter 코드 변환

얼죽아여뜨샤 2024. 9. 26. 15:39

Low Pass Filter는 우리말로 저주파 통과 필터라는 뜻이며, 한마디로 정리하자면 주파수가 낮은 대역만 데이터를 취하는 하나의 방법이다.

 

Low Pass Filter를 쓰는 이유는 이 방법 자체가 주파수가 낮은 대역만 취하기 때문에 주파수가 갑자기 높은(예를 들어 센서의 노이즈가 심한 경우) 상황이 발생하게 된다면 시스템에 문제를 일으킬 수 있다.

 

1. 이론

xk :  현재 LPF를 거친 값_계산된 값

xk-1 : 이전 LPF를 거친 값

α : 가중치 (0~1사이 값)

 

LPF를 만드는 방법으로 이전 측정 값과 현재 측정 값에 가중치를 두어 계산한다.

 

LPF식은 1차 회로에서 출발

라플라스 변환으로 주파수 도메인으로 변경

 

 

*Filter 확인법 (LPF)

 

 

ω_cut은 차단 각주파수(rad/s) 

라플라스 변환을 통한 주파수 전달함수 형태

위 식을 라플라스 역변환해 아래와 같이 씀

이산 신호를 고려한 최종 식

 

두 식을 비교하면 alpha는

 

2. 코드 변환

(1) LPF형태


위 차분 방정식을 확장해, 현재 및 이전 입력을 혼합하는 방식의 필터를 구현하면

x : lpf를 거치지 않은 신호

y : lpf를 거친 신호

La_rpm & Lb_rpm : 가중치 신호

 

(2) 가중치 계수 유도

가중치 계수는 Z 변환을 사용해 유도된다.

 

*라플라스 공간에서 Z공간으로(Tustin Transform)

z = esT 이므로 s = (1/T)ln(z) 이다.

s의 맥클로린 급수 1차 근사식을 구하기 위해, 변수 z를 치환한다.

 

라플라스 공간 변수 s를 z공간 변수로 바꿔주는 1차 근사식은

 

*Z공간에서 라플라스 공간으로

z공간 변수를 라플라스 공간 변수 s로 바꾸는 1차 근사식은

맥클로린 급수 1차 근사식

 

 

유도 과정

Tustin변환을 사용해 s를 시간 도메인 z로 변환

 

 

Y(z) = X(z)·G(z)에 대입

 

 

최종 방정식

(3) LPF코드

*eQep.c

// LPF
rpm_m_low = La_rpm * rpm_m_low + Lb_rpm * (rpm_m + rpm_m_old);
rpm_m_old = rpm_m;
*LPF_parameter.c

float Fc_rpm = 100, La_rpm = 0, Lb_rpm = 0;


void LPF_Parameter(void)
{
    La_rpm = (2 - PI2 * Fc_rpm * OUTERLOOP_SAMPLING_TIME) / (2 + PI2 * Fc_rpm * OUTERLOOP_SAMPLING_TIME);
    Lb_rpm = PI2 * Fc_rpm * OUTERLOOP_SAMPLING_TIME / (2 + PI2 * Fc_rpm * OUTERLOOP_SAMPLING_TIME);

}

 

 

 

 

 

https://ddangeun.tistory.com/137