본문 바로가기
programming language/MATLAB

MATLAB adaptive filtering, Least Mean Square(LMS)

by 남성 2011. 5. 23.

오늘은 적응형 알고리즘 중에서 가장 간단하면서도 많이 사용되는 Least Mean Square(LMS) 알고리즘에 대해 설명 드리겠습니다.

 

적응형 알고리즘은 임의의 모르는 시스템에 대한 identification이나 inverse response 를 구해서 채널 추정을 한다거나 할 때 주로 이용되며, 그 적용의 예는 무궁무진 하다고 합니다.

 

그 중에서도 LMS 알고리즘은 1960 년대에 만들어진 알고리즘임에도 불구하고 구현이 간단하고, 성능 또한 복잡도 대비 우수하여 많이 이용되고 있습니다.

 



 

계수 조절이 가능한 탭수 N 의 FIR 필터가 있는 경우 이 필터의 출력 신호 y(n)은 다음과 같이 정의 됩니다.

 

 

FIR 필터와 비교할 원하는 신호를 d(n) 이라 할 때 그 오차를 다음과 같이 계산할 수 있죠.

 

 

위 에러 신호의 제곱의 합을 최소화 하는 방향으로 필터의 계수를 적응 시켜야 하며, 오차의 제곱은 다음과 같은 식으로 전개가 됩니다.

 

 

 

위 에러의 제곱 식을 최소화 하려면 에러 제곱 식을 필터의 계수로 미분 하고 그 값이 0 인 계수 값을 구하면 될 것입니다.

 

 

위 식은 만족 하는 h(k) 에 대한 식은 다음과 같이 정리가 됩니다.

 

 

LMS 알고리즘의 위 식을 명시적으로 계산하는 것이 아닌 재귀적 경사법(Gradient Method)을 사용하여 최적의 필터 계수를 찾아줍니다.

 



 

LMS 알고리즘의 적용 과정은 다음과 같습니다.

 

  • h(k)의 임의의 초기값인 h0(k) 값을 설정합니다.

 

  • 입력 신호 x(n)을 적응 FIR 필터에 인가하여 그에 해당하는 출력 y(n)을 계산한 후에 오차 신호 e(n)을 계산합니다.

 

 

  • 아래 식을 이용하여 필터의 계수들을 update 합니다.

 

 

  • 위 식에서 μ 는 step size이며 최적의 해로 수렴하는 속도를 결정, 알고리즘의 안정성을 확보하기 위하여 다음 범위 안에 있어야 합니다.

 

,    

  


 

이제 위에서 설명한 LMS 알고리즘을 이용하여 아래 그림과 같은 Unknown FIR system 에 대한 identification 을 수행해 보죠.

 

 

  • Signal generator : [-a, a]에서 균일하게 분포하는 불규칙 신호, Px=a2/3 , a = 2

 

  • Unknown FIR system : [-0.87    0.5 0.3 -0.1 0.03]

 

  • Adaptive FIR Filter length, N=7로 설정

 

  • 안정성을 확보 하기 위한 μ 의 범위는 아래와 같음

 

 

위 문제에 대한 시뮬레이션 코드는 다음과 같습니다.

 

 

위 시뮬레이션에 따른 결과는 다음과 같습니다.

 

 

unknown system 에 대해 LMS filtering 을 수행하여 정상적인 identification 을 수행하는 것을 확인 할 수 있습니다.



<2013-01-24 추가 내용>

Demi 님이 방명록에 질문하신 내용에 대한 답변 입니다. 


desired 신호가 sine 이 되게 하고 x 입력 신호가 sine + noise 가 되게 한겁니다.


코드는 다음과 같구요~ 


위 코드 작성후에 돌려 보시면 아래와 같은 결과가 나옵니다. 

설명을 위해 파라미터 등을 대충 잡아 준거라 그림이 좀 조잡해 보이긴 하지만~ 예제를 보면 어떻게 되는건지 이해 하실거라 생각합니다. 



댓글4

  • 남성 2013.01.29 01:30 신고

    ih77 님의 방명록 질문에 대한 답변 입니다.
    d 가 x 와 같은 값을 가지는건 아닙니다. 위 포스팅에서도 d 와 x 는 다르죠.
    위 글에서의 LMS 는 x 라는 입력에 대해 필터링 과정을 통해 d 와 같은 신호로 만들기 위한 과정이고, 결과적으로 정상적으로 LMS 가 동작해서 e(error) 가 0 으로 수렴된다면, y 가 d 와 같아지는 겁니다.


    답글

  • 여성 2013.04.01 22:47

    안녕하세요?
    좋은 정보 많이 얻고 갑니다.
    헌데 궁금한 점이 하나 있어서 긍를 남김니다.
    맨 마지막 sin파형과 노이즈 파형을 합쳐서 lms 알고리즘을 이용하여 sin 파형을 걸러내는 걸 보았는데
    왜 error값이 출력값이 되는 건가요?
    이 목적이 하나의 신호를 desired 신호로 가깝게 만들어서 error값을 0으로 근접하게 만드는 것인데,
    그럼 noise 값이 싸인파형으로 되어야 되는거 아닌가요?
    즉 코드에서 보면 y_temp가 sin으로 되어야 되는거 아닌가요?
    그래프를 보면 error값이 sin값으로 가고 있는데 0으로 가야 되는거
    아닌가요..

    답글

    • 남성 2013.04.01 23:28 신고

      안녕하세요. 방문해 주셔서 감사합니다. ^^
      님이 맞습니다. ㅋㅋㅋ 정확한 지적이십니다.

      위에서 맨 마지막에 있는 그림 부분은 본문에도 밝혔지만, Demi 라는 분이 방명록에 한 질문에 대해 답변을 드린것이었습니다. 입출력 관계에 대해서만 설명을 드린것이지 그래프 결과가 정확한건 아닙니다. 질문한 당사자가 아닌 다른 분들한테는 오해의 소지가 있군요.

      신호대 잡음비 등을 고려하지 않은 예제기 때문에 위 예제는 LMS 알고리즘이 정상적으로 돌아가는 예제는 아닙니다.

      말씀하신대로 error 가 0 으로 가게 되는게 정상적인 LMS 알고리즘의 동작 입니다.

  • 남성 2019.12.04 11:30

    관리자의 승인을 기다리고 있는 댓글입니다
    답글