오늘은 적응형 알고리즘 중에서 가장 간단하면서도 많이 사용되는 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 가 되게 한겁니다.


코드는 다음과 같구요~ 


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

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



  1. 남성 2013.01.29 01:30 신고

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

  2. 여성 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 알고리즘의 동작 입니다.

  3. 남성 2019.12.04 11:30

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

+ Recent posts