크리에이티브 커먼즈 라이선스
Creative Commons License

글이 많이 늦었습니다 ㅋㅋ 

근데 뭐 구독하시는 분이 있었을려나 ㅠㅠ ㅋㅋㅋ 여하튼 또 정말 잠시 짬이 나는관계로 키보드를 들었는데 ㅋㅋㅋ

이게 원체 내용이 만만치가 않고 분량도 많다보니 글을 쓰기 시작하는데 두려움이 앞서네요 ㅋㅋ

일단 천천히 써가 보고 ㅋㅋㅋ

혹시나 ADF 를 공부해 가시는 분들이 제 포스팅을 보고 저보다는 덜 삽질을 하면서 공부를 시작하시길 바랍니다 ㅋ

그리고 중요한 사실은 물론 저도 이것을 공부했지만 완벽하지 않다는 사실입니다. 제가 아는 한도 내에서, 제가 이해한 것들을 기술하는 것이니, 틀린부분이나 부족한부분은 가감없이 지적해 주시고, 혹 지나가시던 고수분들이시라면 저에게도 많은 지도 편달 부탁드리겠습니다.

그럼 한번 시작해 볼까요?


1. Wiener Filter 의 기본

Adaptive Filter 를 알려 달라니까 왜 자꾸 Random Process 이야기 하고, 통계적 신호처리 이야기하고, 이제는 Wiener Filter 를 이야기하느냐 라고 생각하시는 분들 있으실 것이라고 생각합니다.

이 글에서 그 궁금증을 해결해 드리도록 하겠습니다.

1900년대 초중반에 미국의 수학자 Norbert Wiener 에 의해서 창시된 이 filter 는 입력을 원하는 출력과 가능한 매우 유사하게 변환시켜주는 필터입니다. 처음 접하시는 분들이 여기서 헷갈리시는 것이, FIR, IIR 구조의 필터 외에 Wiener Filter 라는 구조가 또 있는가? 라는 식으로 생각하시어 접근하시는 경우가 있는데 이러면 문제가 어려워집니다 ㅋㅋ 차라리 버터워스, 체브쉐비 필터와 같은 개념이라고 생각하세요. 자세한것은 뒤에서 언급하겠습니다.

현재 우리가 다루는 시그널은 Random Process 입니다. 위에서 간단하게 말씀드렸듯이 이 필터는 내가 원하는 출력과 유사하게 변환을 시켜준다고 하였지요? 그래서 버터워스나 체브쉐비 필터와는 다르게 desired input : d(n) 이라는 라인이 하나 더 나와있게 됩니다. 일단 그림한장 보고 가시죠.


<그림 1> 기본적인 Wiener filter 의 구조


그림 1을 보시기 바랍니다. 여기서 주의하셔야 할것은, 위의 그림 전체가 Wiener filter 입니다. 간혹 가다가 가운데 네모박스 되어있는 Linear discrete-time filter 부분이 Wiener filter 라고 착각하시는 분들이 있는데 그렇게 접근하시면 이 내용을 끝까지 따라오기가 굉장히 어려워 지십니다.  

Linear discrete-time filter 에 대해서는 학부 2학년 선형 시스템 등에서 많이 배우셨을 것입니다. FIR 구조를 갖는 All-zero filter, IIR 구조를 갖는 pole-zero filter ㅋ 기억나시지요? 자세한것은 이미 아시리라 생각하고 넘어갑니다. 여하튼 이곳에는 이런 필터구조가 들어가요. 헌데, IIR 필터구조는 FIR 구조에 비해 같은 performance 를 내기위해서 더 적은 연산량을 요구한다는 장점을 갖는 반면에 필터 전달함수의 pole 이 z-domain 의 Unit Circle 안에 있지 않을 경우 시스템의 출력이 발산을 할수 있다는 무시무시한 단점을 가지고 있습니다. 그래서 대부분 FIR 구조의 필터를 이곳에 적용시키는것이 대부분 이랍니다. FIR 구조를 다른 말로 TDL 이라고도 불르죠. Tap-delayed line 의 약자입니다. 그러니 뭐 TDL 을 보셔도 쫄 필요 없어요 ㅋ 아, 필터구조를 FIR 로 짰구나 라고 생각하시고 쉽게 넘어가십시용 ㅋㅋ

자 그럼 여기에서 나오는 저 w 라는 것은 무엇일까요? ㅋㅋ 뭐 쉽죠 ? FIR 필터의 필터계수라고 생각하십시요. 사용하는 FIR 의 차수에 따라 w 의 갯수가 변화하겠죠?? ㅋㅋ Wiener Filter 는 저놈의 w 를 값을 정의해 주는 필터입니다. 어떻게??? Cost Function 의 결과가 최소가 되도록 ㅋㅋ 지금은 말이 어렵지요? Cost Function 이라는 것을 잘 모르니까요 ㅋ 그럼 밑에서 Cost Function 에 대해서 이야기 해보지요.


2. Cost Function

한국말로 "비용함수" ㅋㅋㅋ 아 없어보여 ㅋㅋㅋ

여하튼, 우리가 하고싶은 일은 Input 으로 아무 신호나 때려 집어 넣어두고 내가 원하는 출력 포멧이 나오도록 필터의 계수를 얻고싶은 것입니다. 내가 원하는 신호와 내가 정한 필터의 출력이 완벽하게 일치를 한다면???? 내가 원하는 신호에서 필터출력을 뺀 값이 0 이 되면 되겠지요?? 그 조건을 만족하는 필터의 필터계수 w 를 찾아내자는 것입니다. 이 개념을 복소 입력으로 까지 확장해서 우리가 0 으로 만들고싶은 것을 error 이 e(n) 이 아닌 error 의 제곱평균 좀 유식한 말로 error 의 Mean Squared Error (MSE) 로 설정을 하는 것이지요. 명심하세요. Wiener Filter 의 Cost Function 은 MSE 입니다. 수식으로 정의해 보자면 아래와 같겠죠??


<그림 2. Cost function : Mean square error>


3. Linear Optimum Filter

자 그럼 앞에서 뭘해야할지에 대해 언급했다면 지금부터는 어떻게 해야할지에 대해서 한번 말해보기로 하지요. 위의 블럭도에서 본 필터를 TDL 방식으로 풀어서 다시 써보도록 하죠. 그럼 MSE 가 어떻게 보이는지도 한눈에 들어올테고. 일단 그림부터 나갑니다.


<그림 3. TDL Filter 구조를 갖는 Wiener filter>

익숙한 구조이지요? ㅋ

이런 FIR 구조의 출력은 아래와 같이 쓸수있지용? 


이정도는 뭐 ㅋㅋㅋ 근데 이렇게 시그마 날라다니고 이래서야 어떻게 증명을 해나가겠습니까 ㅋㅋ 그래서 이식을 아래와 같이 벡터 형태로 표현하도록 하겠습니다 ㅋㅋ

뭐 쉽지요 ㅋㅋ 일단 이놈의 FIR 구조 필터출력은 입력 신호와 필터계수에 의해 나오게 되는것이니까요 ㅋ

 이렇게 필터의 출력까지 정의를 내렸으면 우리는 비로소 에러 시그널을 정의 내릴수 있습니다 ㅋ

아 이거 너무 자세히 할려다보니까 아주 끝이 없네 ㅋㅋㅋ


너무나도 명확한 사실이죠? ㅋ 내가 원하던 신호에서 현재 나왔던 출력을 빼준것이 에러다 라고 말하는거니까요 ㅋ

앞에서 말한 Cost function 을 생각해보세요 ㅋ

에러의 Mean Square Error (MSE) 를 가져다가 쓴다구 했지요?? 

그대로 구해보지요 ㅋ 에러 제곱의 평균 ! ㅋㅋ 근데 여기서 말하는 평균은 앙상블 평균 (Ensemble Average) 입니다 

원래 우리가 첨부터 이야기 해온게 통계적 신호처리였자나여 ㅋㅋ Randon process 의 평균은 앙상블 평균을 구해야하자나여? ㅋㅋ 이때 신호가 WSS 하고 Erogodic 하다면 앙상블 평균과 시간평균은 같다라고 볼수있구???

기억 나시죠? ㅋ 안나면 앞으로 되돌아가서 다시 공부 ㅋㅋㅋ



자 위에서 구한 에러의 MSE 의 최종 출력을 보시지요 ㅋㅋ

핕터계수 w 에 관한 2차 식으로 정리가 됨을 알 수 있으시지요? ㅋㅋ

그럼 이놈의 위너필터의 필터계수는 뭘 만족해야겠습니까? ㅋㅋ

그라죠이~~ 원래 우리가 하고자 했던게 Cost Function 을 최소한 으로 만들고 싶었던거죠?? 

그말인즉슨, error 의 MSE 가 최소가 되도록 하겠다 이거자나여 ~ ㅋㅋ

그럼 저위의 MSE 식이 최소가 되도록 해야겠군요 ㅋ 식으로 나타내 보지요~ 


딴지거실분??? 있으신가요?? 

당연히 있어야지 왜 없어요!!!!

이거는 말이 안되자나여 ㅋㅋ

2차식에서 미분한것이 0이 되는 지점이 변곡점은 맞지요 ~ 이 지점이 최소라고 할 수 있나요??

불연속적인 점을 제외한다고 해도 저 위의 식이 성립하려면 2차항의 계수가 양수일때만 가능한 이야기이지요??

중학교때 생각들해보셔요 ㅋㅋㅋ

네네~ ㅋㅋ 저위에서나온 cost function 은 Positive Definite 되어 있습니다. 그래서 위에서 말한 미분한게 0 이 되는 지점이 비용함수를 최저로 하는것이 맞아요 ㅋㅋ

왜그러냐구요???

증명해 드릴수 있는데요~ 그거는 궁금해하시는분들이 있으면 아래에 댓글로 알려드릴게요 ~ 아직도 해야할 일이 너무 많아요 ㅋㅋ 일단은 " 아 ~ 비용함수가 필터계수의 이차식으로 표시되는데 이 식의 최고차항 계수는 항상 양수구나" 이렇게 알아두시고 넘어가시기를 바랍니다~

다시한번 정리하면!!! Error 의 MSE 를 0 으로 만드는 Wiener filter 의 필터 계수 wk 를 찾는 것이 지금 우리가 하고 잇는 과정이랍니다~ 

ㅇㅇ 그럼 직접 미분해서 식을 정리해보도록 하지요~




아 이거 진짜 며칠에 걸쳐서 써야겠네 ㅋ 해도해도 끝이 안나네 정말로 ㅋㅋ 일단 여기까지 쓰고 담번에 이어서 마져 써드릴게요 ㅋㅋ

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License

이번 포스팅에서는 Adaptive Signal Processing 이 어디에 어떻게 쓰이는지, Filtering 이 무었인지 등의 기본이 되는 이론들을 소개할까 합니다. 

전체적인 틀을 크게 한번 보고 나서 세부적인 부분을 다루면 그만큼 이해하기 쉬울것 같아서요 ㅋㅋㅋ

1. 필터링이란 무엇인가? (What the filtering is for?)

: 여러가지 다양한 정의가 있겠지만, 저는 이렇게 정의 내린답니다. " 신호 중에서 원하는 정보를 뽑아 내는것 " R.P 에서 원하는 정보라 함은 "원하는 통계적 특성" 이 되겠지요? statistical moment 용 ㅋㅋㅋ

filter 로 할 수 있는 작업을 크게 3가지로 나누어 보겠습니다. 

(1) filtering
(2) smoothing : 측정된 데이터를 이용하여 현재의 출력값을 결정하는 방법입니다. 다양한 스무딩 방법이 있지만 그중에서도 Adjacent Averaging method 와 Savitzky-Golay method 이 대표적이죠? 저는 이중에서도 후자인 Savitzky-Golay Smoothing filter 를 주로 쓴답니다 ㅋㅋ


요론식으로 스무딩 된답니다 ㅋㅋ 상기 그림은 제가 뽑아낸 호흡 신호를 스무딩한 그림입니다. ㅋ 스무딩 필터 이야기 하는 곳이 아니므로 관심 있으신분들은 개인적으로, 댓글로 해결하도록 해요 ㅋ

(3) prediction : forward prediction 과 backward prediction 이 두가지로 나눌수 있습니다. 너무 직관적이죠 이름이? ㅋ 과거의 정보로 미래에 일어날 일들을 예측하는 것을 forward prediction 이라고 합니다. 그 반대가 backward prediction 입니다. 

(4) Examples of the linear filtering 

i) Wiener filter : linear optimum system 설계시 주로 이용됩니다. 영상처리나 뇌파 분야, 즉 rp 를 다루는 분야에서는 이 필터에 익숙하실 것입니다. 신호의 통계적인 특성들을 알고 있을 때 사용할 수 있습니다. mean square 기반으로 target 신호와 내가 만든 모델 신호간의 error 를 최소화하려는 시도라 볼 수 있습니다. 다만 가장 큰 단점으로, nonstationary signal 에 적용하기에는 부적적합니다. 

ii) Kalman filter : 가속도 센서와 자이로센서의 출력을 융합하는데 주로 쓰이지요? ㅋ 쿼드콥터 등이 보편화된 이 시기에 대학 학부생들의 입에서도 이 단어가 심심치 않게 들립니다. 굉장히 복잡한 개념이지만, signal 의 trend 를 잘 따라갈 수 있게 해주는 filter 입니다. 추정값을 쓸 수 있는 모델링 된 식이나, reference signal 이 꼭 있어야 합니다. 이 부분은 훗날 기회가 된다면 다시한번 포스팅 하도록 하겠습니다. 이 Adaptive filtering 포스팅의 최 후반부가 되어야 겠군요 ㅋㅋㅋ


2. Adaptive Filter 란 무엇인가??

많은 사람들이 이렇게 물어보면 막연하게 대답합니다. 어떻게 동작하는지는 알겠는데 도대체 뭐를 구해내겠다는건지를 모른채 그 용도에만 초점을 맞추고 있는 것이지요. 여기서 한번 알아보겠습니다. Wiener filter 를 이야기할때 최적 필터 (optimum filter) 에 대해서 잠시 이야기 하였지요? 통계적 특성이 변화하지 않는 신호일때 Wiener filter 를 이용하여 최적 필터 계수를 구해낼 수 있습니다. 헌데.... 시간이 지남에 따라 통계적 특성이 달라지는 신호라면?? 혹은 실시간으로 신호가 들어오기 때문에 신호의 통계적 특징을 모르는 상태라면?? 난감하죠??
그래서 Adaptive filter 가 등장하게 됩니다. 1975 년에 Widraw 인가? 정확학 스팰을 모르겠네요 ㅋㅋ 여튼 이사람과 아이들에 의해서 LMS 알고리즘 기반의 Adaptive Filter 의 개념과 Application 이 등장하지요

즉, Adaptive Filter 는 시간이 지남에 따라 통계적인 특성이 달라지는 non-stationary 한 시그널을 포함해서 이 신호에 대해 샘플이 들어오는 매 시간마다 Optimum Wiener Filter 의 계수를 추정해 가는 알고리즘들을 통틀어서 Adaptive Filter 라고 부릅니다. 이렇게 추정해가는 방법이 LMS 알고리즘 기반으로 찾느냐 RLS 기반의 방법으로 찾느냐 등에 따라 적응필터의 이름이 바뀐답니다. ㅋ

이 때 사용되는 필터의 형태는 FIR, IIR 모두 상관 없지만, 필터의 시스템이 발산하지 않게 하도록 하기 위해서 FIR 필터를 대부분 사용합니다. 왜 FIR 필터의 시스템이 안정적인지에 대해서는 모두 아시리라고 굳게 믿습니다.

뒷부분에서 자세하게 다루겠지만 최적 필터 계수란 것은 아래의 그림과 같습니다. 벡터의 내적이나 함수의 내적을 생각해 보시면 되겠네요. 공업수학에서 내적 이야기할때 기준 벡터로의 투영 (Contour) 이야기 많이 했었지요? 이 벡터가 다른 한 벡터의 방향으로 얼마의 크기성분을 가지고 있는가 ? 를 계산하는것이 내적 아닙니까 ㅋㅋ 신호(함수) 의 내적도 같습니다.


이 그림을 보십시요. 측정한 신호 u(n) 의 크기를 조절해 (w) 소망 신호인 d(n) 과의 거리가 가장 가까워지도록 만들면? 그것이 최적의 필터가 되겠지요. Error 가 가장 적어지는 것이니까요. Weighting Factor 를 곱하기만 해서 신호 벡터의 방향을 바꿀 수는 없습니다. 결국 크기를 얼마나 조절하느냐 라는 개념이라고 단순화 시켜 생각할 수 있는데 그 때 그 차이 크기가 가장 작아지도록 하는 계수들 w matrix 를 갖는 필터를 optimum filter 라고 부를 수 있는 것입니다.

Adaptive Filter 를 구현함에 있어서 고려해야할 Factor 들이 있습니다. 지금은 어떤것들이 있는지 일단 알아보기만 하겠습니다. 

(1) Convergence rate (수렴속도) : 얼마나 빨리 Optimum Filter 상태로 수렴해 가는가?
(2) Misadjustment (적응정도) : 수렴한 후에는 얼마나 계수의 변화폭이 큰가? (수렴후에는 변화폭이 작을수록 좋다)
    - (1), (2) 은 Trade-Off 관계에 있습니다 ㅋㅋㅋ

(3) Tracking : 얼마나 원하는 신호를 잘 추적해 가는가?
(4) Robustness : 필터의 구조가 탄탄한가? 모든 신호에 일관성 있게 적용되어 출력되는가?
(5) Computational requirement : 알고리즘의 계산량은 얼마나 되는가?
(6) Structure : 필터의 구조가 얼마나 복잡한가? 
    -(5), (6) 은 실시간으로 mcu 나 DSP 칩에서 구현을 하지 위해 연산속도와 battery 소모 등을 고려하기 위해서 고려하는 것입니다.

3. 필터의 구조 (Filter Structures)

(1) FIR structure

i) Transversl (Taped-delayed line) : 우리가 흔히 아는 FIR filter 구조입니다. 최대 FIR filter 의 Order 만큼의 delay 가 발생되며, 각각의 샘플에 원하는 w 가 곱해진 후 모두 더해지는 구조로 되어있지요? 출력이 다시 입력으로 feedback 되거나 입력이 출력쪽으로 feedforward 되지 않는다는 점도 유의해서 볼 필요가 있군요



ii) Lattice, escalator (Gram-Schmidt) 

흐음.. 이게 저도 잘 모르는 부분인데요 ㅋㅋㅋ Lattice(격자) 구조와 위에서 설명한 TDL 구조 두개를 합쳐서 만듭니다. 왜 그러냐면 통계적으로 상관이 없는 신호 (uncorrelated) 된 신호는 변환 속도가 빠르답니다. 그래서 Lattice 구조를 통해 신호의 통계적 특성을 없앤 후에 TDL 구조로 필터링을 하는 구조로 되어있어요


요론 구조인데요 ㅋㅋ 아직 저도 완벽하게 모르고 사용도 안해본지라 ㅋㅋ 훗날 쓰게 되면 한번 포스팅 하도록 하겠습니다. 고수분들이 있으시면 댓글로 설명좀 해주십시요 ㅋㅋ

iii) Systolic array

Parallel computing 이 가능한 구조라는거 같은데 ㅋㅋ ii) 도 완벽하게 정복 못한 제가 iii) 에 대해 씨부리면 거의 대부분이 잘못된 정보일듯 ㅋㅋㅋ 여기서 함구할테니 훗날을 기약하시던지 아니면 지나가던 강호 무림의 고수분이 댓글로 알려주시기를 바래야겠습니다 ㅋㅋ

(2) IIR structure : 특별히 언급할 것은 없습니다. 출력의 Feedback 에 의해서 Stability 의 문제가 발생할 수 있습니다. 그래서 ㅋㅋㅋ FIR 형태로 Adaptive Filter 를 주로 만든다고 위에서 말씀드렸죠? ㅋ


4. Linear Adaptive Filter algorithms (선형 적응 필터의 알고리즘 종류)

(1) Stochastic gradient approach

 - Cost function 의 MSE (Mean Square Error) 의 크기를 최소화 하겠다는 발상입니다. 이를 통해 최적 Wiener filter 의 계수를 추정해 가는 과정입니다. 대표적으로 LMS (Least mean square) 알고리즘이 있습니다

ex) TDL filter with the LMS algorithm

장점 : 매우 간단하고 효율적입니다. C 로 코드를 짤 경우 3줄 밖에 되지 않습니다.
단점 : 수렴 속도가 다른 알고리즘에 비해 상대적으로 느립니다.

(2) Least-squares estimation

- Weighting factor 가 곱해진 에러 제곱의 합을 최소화 하겠다는 발상입니다. 대표적으로 RLS 알고리즘이 있습니다.

es) TDL filter with the LS algorithm

장점 : 수렴 속도가 빠릅니다.
단점 : 계산량이 다른 알고리즘에 비해 상대적으로 많습니다. 따라서 알고리즘 구현도 복잡합니다.
         matrix inversion 에 의해 대수학적으로 안정적이지 않을 수 있다는 잠재적인 문제점을 앉고있습니다.

RLS, fast RLS, QR-decomposition 등의 알고리즘이 LS 기반의 알고리즘입니다.


5. Adaptive filter applications (적응 필터로 할 수 있는 것들)

- 이거이거 굉장히 중요합니다. 어디다 어떻게 쓸 수 있는지 알아야 뭘 써먹든 말든 하지요. 외울 필요도 없습니다. 블럭도를 보고 "입력이 이렇고 출력이 이러니까 이것은 이것이다." 라고 이해 할수 있어야 합니다. 흔히들 생각하는 필터링 이외에서 모델링, 예측, 노이즈 캔슬레이션 등에 다양하게 이용할 수 있습니다. 그럼 하나씩 알아 볼깝숑?

(1) System identification

: 이름 무시무시 합니다. 시스템을 정의 내리겠습니다. 모르는 어떤 시스템으로 들어가는 입력 신호를 ADF 의 입력으로 사용하고, 시스템의 출력과 ADF 의 출력의 차이 (Error) 를 최소화 함으로써 모르는 시스템을 배껴버리겠다는 소리죠. 모르는 시스템을 표현할 수 잇는 filter 의 계수를 알아버렸기때문에 우리는 모르는 시스템을 모델링 해버렸다고 생각할 수 있는것입니다. 그럼 이 글을 그림으로 블럭화 시키면 어떻게 되는지 한번 알아볼깝숑?


이렇게 표현이 가능합니다. 자세한 구현 알고리즘은 훗날 다루도록 하고 아래에는 예제 그림을 보여드리도록 하겠습니다. 


사진이 왜 이따위로 나오지? ㅋㅋ 여튼 ㅋㅋㅋ
White noise 를 이용해서 어떤 필터를 건 출력을 추정 해 본 것입니다. 아래그림의 빨간색을 보시면 처음에는 헤롱헤롱해서 이상한 값을 뿌리지만 뒤로갈수록 정확하게 추정하는 것을 알 수 있습니다. 이 때 추정된 계수 w 는 처음 입력신호에 취했던 fir 필터의 계수와 일치합니다. 즉, 우리는 모르는 시스템(여기서는 filter) 을 추정 했다고 볼 수 있는 것이지요. 

(2) Inverse modeling

: 이것도 외우지 마시고, 이렇게 생각하십시요. ADF 의 입력으로 어떤 모르는 시스템의 출력이 사용되고, ADF 의 출력과 어떤 시스템에 들어간 입력신로를 딜레이 시킨 신호와의 에러를 최소화 시켜 어떤 모르는 시스템의 입력값을 유추해 내겠다. 이때 delay 된 input 을 사용하는 것은 system 의 causality 를 위함입니다. 즉, Inverse modeling 이 되는 것이지요. 위와 거의 비슷한 과정이기 때문에 따로 예제는 보이지 않겠습니다. 아래 보이는것이 이 개념의 블럭도 입니다.


(3) Prediction

ADF 의 입력으로 delay된 input signal 을 사용하고 ADF 의 출력과 딜레이 되지않은 input 의 Error 를 최소화 시킴으로써 과거의 입력으로 미래의 출력을 예측할수 있게 할 수 있습니다. 


짱 신기하지 않습니까? ㅋㅋ 저는 짱 신기했는데 ㅋㅋ


흠. 이것도 화질이 그리 좋지 않네요 ㅋㅋ 하지만 보십시용 빨간색이 ADF 출력이고 파란색이 입력 시그널 입니다.
초기에 빨간색 라인이 보이는 이유는 딜레이 되어있기 때문이겠지요? ㅋ 하지만 시간이 지나 수렵해 가면서 어떻게 되었습니까? ㅋ 빨간색이 거의 보이지 않죠? ㅋ 딜레이된 입력을 사용해서 미래의 출력값을 예측해 입력파형과 똑같은 출력을 ADF 가 내보내고 있기 때문이랍니다 ㅋㅋ 신기하지 않습네까? ㅋㅋㅋ
이거 잘하면 어디다 이용할수 있나염? ㅋㅋ 주식!!!! ㅋㅋㅋ 세상만사 ADF 와 같다면 정말 대박이겠다 ㅋㅋㅋ

(4) Interference cancelling

이게 우리가 가장 DSP 에서 흔히 쓰이는 개념이지요 ㅋ Noise Cancelling 도 이 개념입니다. 내가 측정한 신호를 ADF 의 입력으로 사용하고 ADF 의 출력과 내가 바라는 신호와의 차이를 최소화 함으로써 원하지 않는 노이즈성분만을 따로 뽑아내는것입니다. 60Hz 전원 노이즈 제거 등에 주로 쓰이지요? ㅋㅋ 더 나아가면 태아 심전도를 디텍팅 하는쪽에서도 쓰입니다. 



아래는 예제 입니다.

25Hz 와 60Hz 를 섞어서 60Hz 만 제거를 해보았습니다. 검증을 FFT 를 이용해 주파수 분석을 함으로써 60Hz 가 빠진것을 보여드리도록 하곘습니다. ㅋㅋ


짜짜잔 ㅋㅋ 신기하지 않습니까? ㅋㅋㅋㅋ


일단 이번 포스팅에서는 이정도로만 알아두시면 좋을 것 같습니다. ㅋ 아 이런식으로 쓰이는 구나 정도만 ㅋ

다음 포스팅에서는 Wiener Filter 부터 해서 차근차근 알아가 보도록 하겠습니다용 ㅋㅋ

많은 도움이 되셨기를 바랍니다. 그럼 다음번에~ ㅋㅋ

궁금증은 댓글로 하셔용 ㅋ 비밀글은 다 지워버리겟습니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License

이거 말고도 써야할 글들이 많은데 다 마무리도 짓지 못하면서 이렇게 또 무거운 키보드를 드네요 ㅋㅋ

다른건 어느정도 할줄알고 결과가 나온 부분이라서 쉽사리 펜이 잡히지 않지만, 이 부분은 지금 제가 힘을들여가며 공부해가는 것이라서 또 훗날을 위해 정리를 하게 되나 봅니다.

시간이 조금만 더 많다면, 이제 막 시작하시는 분들을 위해서 더욱 자세하게 작성을 할 수도 있겠지만, 저도 공부를 하는 학생인지라서 ㅋㅋ 제 위주로 쓰지만, 그래도 최대한 다른분들이 이해하기 쉽도록 풀어서 써보도록 하겠습니다. ㅋ

서론을 그만하구요 ㅋ

일단 오늘 한강의 시작해 보지요~ 몇개의 포스팅에 나누어 올라갈지는 모르지만요 ㅋㅋ

Adaptive Filter !

굉장히 멋진 이름입니다. 공학을 하는 사람들을 어떤식으로든 한번 들어는 보았을 것입니다. 특히나 의공학을 하시는 분들은 Fetal ECG, EEG 에 응용된다고 귀에 못이 박히게 듣지만, 막상 어떤 이론에 의해 이렇게 되는지를 잘 모르지요 ㅋ

사실 학부때 Random Process 를 제대로 배우지 않기 때문에 설명하기에 무리가 따르는것도 사실입니다.

Adaptive Filter 를 이해하기 위해서는 기본적인 통계 이론과 랜덤 프로세스를 알아야한다는 말입니다.

이어지는 챕터에서 가볍게 랜던프로세스에 나오는 용어들과 정의, 통계적 신호처리에 대해 가볍게 언급하고 넘어가고자 합니다.

이 글이 써지고 있는 카테고리가 적응 필터이기 때문에 매우 자세히 언급하지는 않을 것입니다.

관심이 있으신 분들을 직접 책을 찾거나 구글신에게 부족한 부분을 채우시길 바라고, 저는 훗날 Wiener Filter 나 LMS 알고리즘을 언급하면서 필요한 이론들을 그때 설명하도록 하겠습니다. 

그럼 가벼운 마음으로 이런게 있었군~ 하면서 글을 읽어보시겠어요? ㅋㅋ

1. Statistical Model & Deterministic Model : 일반적으로 사용되는 모델을 크게 두종류로 나누어 보았습니다. 랜덤 프로세스에서 어떠한 sample function 의 미래 값을 정확하게 예측 가능하면 Deterministic 모델이라고 부릅니다. Non deterministic모델은 그 반대말을 의미한답니다. 반대로 통계적 모델링이라는것은 신호의 통계적 특성을 이용해 모델링하는 문제들에서 많이 사용됩니다. 특히나 통신문제에서 많이 사용되죠~ 오디오 코딩이나 음성신호~ 초음파의 Beam forming등에 주로 사용됩니다. 물론 제가 전공하는 생체신호들 (ECG, EMG, EEG 등등) 도 통계적 모델링이 되는 것이지요. 아래는 ECG 에서 노이즈를 제거하는 예입니다. LMS 기반 알고리즘이 사용되었네요 ㅋ 자세한것은 훗날 알려드리고 이번에는 의공학에서 통계적 모델이 이런용도로 사용되는구나 정도만 알고 넘어가세요 ㅋ


2. Signal 의 분류 (Power Signal , Energy Signal) : 이 부분은 학부의 Linear System 에서 무조건 배우는 내용이지요 ㅋ 시그널을 크게 두종류로 나누어 보면 위와 같이 나눌수 있는 것이지요. 근데 다들 Signal 이 뭔지 System 이 뭔지는 정확히 알고 계시겠지요? ㅋㅋ 모르신다구요? ㅋㅋ 공부하세요!!! ㅋㅋㅋ 아시는 분들이 아랫쪽에 댓글 달아주시겠지요 뭐 ㅋㅋ 


너무 기본적인 내용이라서 길게 사족 달지 않겠습니다.

이정도 사진 두장 보시면 생각이 나시면서, 혹은 모르더라고 다른곳에서 자료를 찾아보기에 충분한 자료라 사료됩니다~ ㅋㅋㅋ 갑자기 문득 생각나네요 ㅋㅋ 학부때 ㅋㅋ "주기함수는 파워시그널"  하면서 외우던 기억이요 ㅋㅋㅋ


3. Random Event , Random Variable , Random Process

이것만 가지고 설명하기에도 한달 이상은 걸리겠지요? ㅋㅋ 무론 저도 완벽하게 알고 있지 않다고 스스로 생각하고 있답니다 ㅋ 지금 제 자신이 이해하고 있는 부분이 맞는지도 잘 모르겠구요 ㅋ 그래서 이 개념은 스스로 공부하는것이 좋을 듯 싶어요 ㅋ 알기위해서는 기본적인 확률 & 통계 이론이 필요합니다. (pdf, cdf, joint-pdf 등등)

(1) Random Event : '확률' 로 표현 됩니다. ( S = {e1, e2, ..... } )
(2) Random Variable : '확률 밀도 함수 (Probability Density Function)' 으로 표현됩니다.   
                                ( X = {x(e1), x(e2), ..... } ) 

(3) Random Process : '시간의 개념이 추가된 Random Variable' 형태로 표현됩니다. 이때 표현되는 pdf 는 두개의 독립변수에 영향을 받기 때문에 joint pdf 로 표현이 되겠지요? ( X = {x(t , e1) , x(t , e2) , .....} )

아래의 초 간단 예제를 보시고 위의 세가지 개념의 차이점에 대해 감을 잡으시길 바랍니다. 이 중에서 우리가 Adaptive Filter 를 구현 해 감에 있어 주로 다루게 될 것은 당연히 Random Process 가 되겠지용?


Random Process 보다는 Random Event 와 Random variable 사이의 관계가 굉장히 헷갈리는데요 ㅋ
Random Event 를 내가 수학적 계산을 하기 위해서 내가 원하는 수에 mapping 을 시킨 것을 Random Variable 이라고  생각하셔도 무방할 듯 싶습니다. 이벤트이기 때문에 각 이벤트가 일어날 확률로 표시되는 것이고, 이것을 내가 원하는 수에 매핑 시켰기 때문에 r.v 는 숫자의 형태로 보여지는 것이지요. 숫자의 형태를 띄어야 pdf 에 인자로 집어 넣을수가 있자나요 ㅋㅋㅋ


이것이 바로 Random Process 의 고전적인 그림입니다 ㅋ

이거 나오면서부터 머리가 아파요 ㅋ 조기 엄청난 이름이 보이네요 ㅋㅋ 그 이름도 유명한 Ensemble ! 앙상블 ㅋㅋ 아오 이거 정말 짜증나지요 ㅋㅋ

여튼 여기서 말하고자 하는것은~ r.v 에 time 의 개념이 추가된 하나의 시그널을 Sample function 이라고 부르지요? 이런 sample function 들이 모여서 random process 가 됩니다. 

process 라는 단어때문에 뭔가 이런 데이터 들의 집단이라고 처음에 잘 생각하지 않고, 뭔가를 하는 과정이라고 생각하는 경우가 있습니다. 저도 왜 이렇게 이름을 지었는지 모르겠지만, 이해가 안되면 초기에는 암기하시기 바랍니다.

time 개념이 추가된 random variable 들을 sample function 이라고 할때, 이러한 sample function 들이 모인 집단을 random process 라고 한다. 


4. Statistical Independence (통계적 독립) : 두 r.p X(t), Y(t) 가 S.I 라 함은, 어떠한 시간에서의 각 프로세스에 해당되는 랜덤 변수들이 서로 독립적이란 소리다. 즉 어느 임의의 시간에서도 두 프로세스가 상호 의존적이지 않다는 소리. 더욱 직관적으로 말하자면, 어느 시간 t1 에서 Y(t1) 의 출력식에 X(t) 에 관한 식이 들어가지 않는다는 소리다. ㅋ 즉, 각각의 프로세스는 자기 자신으로 완전체다 ㅋㅋㅋ 


5. Stationary, WSS (Wide Sense Stationary) : 점점 맨탈 붕괴가 다가 오지요? ㅋㅋ 대부분의 랜덤 프로세스는 Wide Sense Stationary 하다고 가정한 뒤에 신호처리를 하게 됩니다. Stationary 가 뭔지도 모르겠는데 맨날 WSS 라고 하니 그것은 또 무엇인가 헤메다가 결국 다 포기하게 되지요 ㅋ Stationary 는 사전적 의미로 정적이라는 뜻이지요. 시간이 지나더라도 그 신호의 통계적 특징(Moment, pdf)이 변화하지 않는 신호를 말합니다. 화이트 노이즈나 지속적으로 울리는 사이렌 소리 같은것이 해당되겠네요. Non-Stationary 는 그 반대겠지요~ 가장 쉽게는 공기중에 울리는 음파는 시간이 지남에따라 그 진폭이 사그라 들면서 사라지지요 ㅋ Non-Stationary 하다고 할수 있습니다. ㅋ 즉 t시점의 출력 파형은 t-1 의 출력 신호에 의해 결정되는 신호들은 Non-Stationary 한 것이지요 ㅋ

이 지구상에 완벽하게 Stationary 한 신호는 White Noise 한가지 밖에 없습니다. 그렇다고 신호를 Non-Stationary 하다고 접근하기에는 모든 문제가 너무 복잡해져버려서 WSS 라는 개념을 도입하게 됩니다. First order, Second Order Stationary 하면 Wide Sense Stationary 하다고 부르자. 그럼 First order-stationary 와 Second-order Stationary 가 무엇이냐! 아래의 식과 그림을 보시면 쉽게 이해가 되실듯용. 조금 더 풀어 써 본다면 어떤 프로세스의 1차 평균과 자기 상관함수(2차 평균) 가 시간 축에 무관한 경우 WSS 라고 부릅니다. 더 궁금하신 점은 댓글을 이용합시다~ (토론의 장) ㅋㅋ




6. Autocorrelation : 크게 설명이 필요하겠습니까? ㅋ 자기 자신과 자기 자신의 딜레이된 신호와의 연관성을 보는것입니다. 식도 간단하지요? ㅋ 

E{X(t)X(t+tau)} 

tau 가 0 일때는 어떻게 됩니까? ㅋ X 라는 신호의 variance 가 출력으로 나오지요? ㅋ 완전하게 stationary 하다면 
tau != 0 일때 autocorrelation 도 0 이 되어야 합니다. 이런신호는 White Noise 밖에 없어요 ㅋ


7. Ergodicity : 요고도 자주 들어보셨으리라고 생각됩니다. 맨날 그러자나요 ㅋ 이 r.p 가 WSS 이고 Ergodic 하다 가정하면.... ㅋㅋ 안그러나요? ㅋㅋ 시간이 무한하게 흘렀을때 앙상블 평균과 시간 평균이 같아지는 신호를 Ergodic 하다고 합니다. 어떤 신호가 Ergodic 하다갈고 알려지면, 앙상블 평균과 Autocorrelation (각각 1차 평균, 2차 평균이라고도 부르지요)을 구하기 위해서는 하나의 Sample Function 만 있으면 됩니다. ㅋ


각각은 위와 같은 집단으로 표현할 수 있겠군요 ㅋㅋ 개념의 크기가 이런 관계가 성립한답니다~ ㅋ

8. Correlation, Cross Correlation, Covariance : 요곳들은 스스로 공부하시기 바랍니다 ㅋㅋ 이것들은 다 위에서 나온 개념들에서 파생 된 것이기 때문에 살짝만 찾아보시면 충분히 아실 수 있을 것입니다. 

9. Spectral Estimation : R.P 의 PSD 는 R.P 의 Autocorrelation function 으로 계산할수 있습니다. 기존에 알고있던 Fourier Transform 과 거의 비슷한 식이에요. 증명도 가능합니다. 처음 보았을 때 저도 엄청 신기했습니다. 와 ~ 이렇게도 되는구나 ㅋㅋㅋ 당장 크게 써먹을것 같지않아 제목만 언급하고 넘어가겠습니다. 관심있으신 분들은 한번 찾아보세요. 



이것으로 기본적은 stochastic theorem 에 대한 리뷰? 혹은 프리뷰를 마치도록 하겠습니다. 매우 기본이 되는 이론들이고 매우 간단하게 다루었기 때문에 부족하신 부분은 따로 책과 다른 사이트를 참고하시길 바랍니다. 

다음 포스팅 부터는 실제 Adaptive Filter 에 대한 이론에 대해 포스팅 할 예정입니다. 

주로 사용하게 될 참고 교제가 Adaptive Filter 책중에 가장 유명한 책이라고 하더군요.

Simon Haykin 의 ADAPTIVE FILTER THEORY 입니다. 

그리고 또 ADF 에 관한 논문들 ㅋㅋ

제가 잘 이해가 되지 않는 부분이나 잘못 이해한 부분은 댓글과 메일을 이용해 서로 토론해 볼수 있었으면 좋겠습니다. 얼마가 걸릴지 모르는 포스팅이지만 저도 꾸준히 시간을 가지고 공부해가도록 하겠습니다. 많이들 도와주세요

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License

어떠한 사건 A가 시간에 따라 이산적으로, 또는 연속적으로 계속해서 발생할 경우, 매 시행 결과에 따른 확률변수는 시간의 함수가 되며 이와 같이 확률 변수가 시간적으로 전개되는 과정을 random process라 한다. 사실 통신에 있어서 결정론적 사건은 통신에서는 아무런 의미가 없으며, 통신의 관점에서는 모든 사건이 확률론적인 것이어야 한다.

 

대표적인 확률론적 신호로 잡음을 예로 들 수 있겠다. 통계적 특성이 같은 잡음 신호가 있다고 하자. 이 잡음의 가능한 모든 파형을 그린다면 무한 가지의 잡음파형이 나올 것이며, 그 하나 하나를 Sample function이라 한다. 즉 확률변수 V(to)는 시간 to에서 각 표본함수가 가질 수 있는 값들인 v1(t0), v2(t0), ….., vN(to) 중 하나가 된다. 이것들은 V(t0)라는 사건의 시행 결과들의 집단이며 이를 앙상블(ensemble)이라 하고 그 모든 표본 함수들의 집합으로부터 구한 평균을 앙상블 평균이라 한다.

 

이에 비해 임의의 표본함수를 선택하여, 그 표본 함수에 대한 모든 시간의 평균을 구한 것을 시평균(time average)라 한다.

 

즉 앙상블 평균은 시간을 고정시켜 놓고 표본 함수를 무한 개로 하여 계산한 것이며, 시평균은 표본 함수를 고정시켜 놓고 시간을 무한대로 하여 계산한 것이다. 일반적으로 앙상블 평균과 시평균은 같지 않다.

 

만약 어떤 확률과정이 앙상블 평균과 시평균이 같으면 이 과정은 어고딕(ergodic)하다고 한다.

 

표본 함수들의 모든 통계적 성질이 시간에 따라 변하지 않을 때 이러한 확률과정을 안정성향 과정(stationary process)라 한다. 여기서 모든 통계적인 성질이란 평균과 같은 일차적 통계나 에너지 또는 전력과 같은 이차적인 통계는 물론 모든 차의 통계적 성질을 포함한 이름이다. 그러나 실제 우리의 주 관심사는 전력이므로 이차적 통계 성질까지 안정성향이면, 그 과정은 넓은 의미에서 안정성향(wide-sense stationary)이라 한다.

 

어고딕 과정은 항상 안정성향이지만 안정성향이라고 해서 반드시 어고딕한 것은 아니다. 그 이유는 각각의 표본 함수들은 통계적 성질이 서로 다를 수 있기 때문에 표본 함수의 선택에 따라 시평균이 달라 질 수 있기 때문이다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License
훗날 더 공부해 보기 위해서 수업 자료의 일부를 첨부한다.

MPEG 코덱의 원리, 역사, 발전 상황 등등...

현재 주류를 이루는 AAC, AC3 등의 특징들에 대해서 찾아보자.

출처 : 연세대학교 대학원 Advanced DSP 수업 자료 중 일부 

 

[##_http://jbear.tistory.com/script/powerEditor/pages/1C%7Ccfile23.uf@112B0C384EDED3AD2431A2.png%7Cwidth=%22630%22%20height=%22473%22%20alt=%22%22%20filename=%22LectureA-2%20Audio%20Coding_%ED%8E%98%EC%9D%B4%EC%A7%80_03.png%22%20filemime=%22image/jpeg%22%7C_##][##_http://jbear.tistory.com/script/powerEditor/pages/1C%7Ccfile30.uf@122B0C384EDED3AD257783.png%7Cwidth=%22630%22%20height=%22473%22%20alt=%22%22%20filename=%22LectureA-2%20Audio%20Coding_%ED%8E%98%EC%9D%B4%EC%A7%80_04.png%22%20filemime=%22image/jpeg%22%7C_##][##_http://jbear.tistory.com/script/powerEditor/pages/1C%7Ccfile8.uf@132B0C384EDED3AD262F33.png%7Cwidth="630"_##][##_http://jbear.tistory.com/script/powerEditor/pages/1C%7Ccfile22.uf@152B0C384EDED3AE270E55.png%7Cwidth=%22630%22%20height=%22473%22%20alt=%22%22%20filename=%22LectureA-2%20Audio%20Coding_%ED%8E%98%EC%9D%B4%EC%A7%80_06.png%22%20filemime=%22image/jpeg%22%7C_##]









저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License
아주 신기한 이론이 있길래 긁어다가 포스팅 한다.

'피타고라스의 창' 이라는 블로그에 포스팅 되어있는 내용이다.

아... 주소를 모르겠어 제길 ㅋㅋㅋ 저작권을 확실하게 밝혀야하는뎅 ㅠㅠ

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License
 오랜만의 포스팅이네요

요즘 정말로 몸이 10개라도 모자랍니다.

수업하랴 과제하랴 일하랴 정신이 없네요

잠잘시간도 모자란 관계로 잠시 블로그 포스팅은 쉬고있지만!!! 그래도 제가 놀고있는것은 아니기에

꾸준히 공부하고 연구한 성과물들이 나오고 있습니다.

한숨 돌리고 나면 그때 다시 포스팅을 시작해야겠어요 ㅋㅋ

제가 며칠 못들어 온 사이에 약 200명 가까운 사람들이 하루만에 들어오고 그랬더군요 ㅋㅋ

잡설은 여기까지 ㅋㅋ

오늘은 시간이 없는 관계로 간단하게 소개만 하고 프로그램을 올려드리도록 할께요

Adaptive Filter , 적응필터라고 부르지요

LMS , RLS 가 가장 유명하고 흔하게 쓰입니다.

좀 더 자세한 내용은 나중에 포스팅 할께요 수식과 함께.

하지만 이런 Adaptive Filter 가 확실히 와 닿지가 않고, 도대체 내가 원하는 신호가 Filter Output 인지

Error Output 인지도 헷갈리시죠? ㅋㅋㅋ

아.... 설명을 하고 싶은데.... 시간이 없어 ㅋㅋ

여튼 그래서 오늘은 제가 프로젝트 하면서 Adaptive Filter Tunning 을 하기 위해 만든 프로그램을 배포할까 합니다.

원래는 데이터 파일을 읽어서, 여러가지 Adaptive Filter 를 써보고 결과가 어떻게 나오는지 확인 한후에

Filter 계수를 튜닝하고, 실시간으로 구현해서 직접 신호파형을 보는 순서로 저는 연구를 했는데

이렇게 바로 올려드리면 여러분들은 데이터 파일을 구할 길이 없기 때문에

Simulator 로 만들었습니다.



이렇게 생겼구요 

아래는 ReadMe File 입니다.


 여러가지 Adaptive Filter 의 동작 결과를 확인하는 프로그램입니다.

        작성자 : 윤자웅 (jbear.tistory.com)      CopyRight : 연세대학교 의용계측 연구실


 //본 프로그램은 24인치 모니터, 1920 * 1200 Full HD 해상도에서 최적화 되어 있습니다.//

 

1. 2가지 종류의 서로 다른 주파수를 갖는 Sine Wave 를 합성하고, 원하는 Reference 신호의 주파수를 고를수 있습니다.

2. 시뮬레이션 되는 Sine Wave 의 Sampling Rate 를 줄 수 있습니다.
   사인파의 주파수에 비해 너무 낮은 샘플링률을 입력 할 경우, 신호의 해상도가 떨어지므로, 나이퀴스트 이론에 입각하여 작성하십시요.
   (Sine Wave 들중 최고 주파수의 5배 이상을 권장합니다.)

3. 지원하는 Adaptive Filter 의 종류는 총 6가지 입니다.
   자세한 이론적인 설명은 추후에 블로그에서 계속하도록 하고 생략하도록 하겠습니다.

4. LMS 의 경우 입력되어지는 Factor 는 Filter Length 와 Step Size 두 종류 입니다.

5. RLS 의 경우 입력되어지는 Factor 는 Filter Length 와 RF, FF 세종류 입니다.

6. 원하는 필터 종류를 선택하고, 계수를 입력한 다음 시작 버튼을 누르면 시작됩니다.

 

&&&&&&&&&&&&&&&&&&제공되어지는 Adaptive Filter 들의 Simple 사용법 &&&&&&&&&&&&&&&&&&&&

 신호 및 FFT 정보는 기본값을 사용합니다 !!!!!!!!!

1. LMS : Filter Length : 20, Step Size : 0.005

2. Normalized LMS : Filter Length : 20, Step Size : 0.05

3. Sign LMS : Filter Length : 2, Step Size : 0.005  (적당히 타협한 튜닝입니다. 직접 적합한 계수를 찾아보세요)

4. Fast Block LMS : 실시간으로 안됩니다. 데이터 파일을 불러다 놓고 하면 된다고 하네요. (참고하시라고 넣어둔 메뉴)

5. RLS : Filter Length : 2, Regularization factor : 1E-5 , Forgetting Factor : 0.91

6. QR - RLS : Filter Length : 2, Regularization factor : 1E-5 , Forgetting Factor : 0.91  


위 값들은 기본으로 세팅되어있는 Signal Source 들에 각각의 필터를 취할때 어느정도 결과를 볼수 있도록

프로그래머가 세팅한 값이며, Signal Source 가 바뀔경우에는 사용자가 직접 계수를 튜닝해야 합니다.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

그럼 필요하신분들이 있길 바라면서.

수업용, 연구용, 개인 소장용, 심신풀이용 모두 가능하지만 출처를 꼭 밝혀주세요 ㅠㅠ

다음번에는 이론적으로 설명해 드릴께요.

궁금하신점은 yjymb@hotmail.com ~ ㄱㄱㄱ

프로그램 다운로드 : https://files.ucloud.com/pf/D150930_429251_66547

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License
Moving Average Filter 에 이은 포스팅입니다 ㅋㅋ

결국 MAF 또한 LPF 의 일종인건 모두 아시리라 믿습니다.

하지만, 제가 지금 1st order LPF 를 언급하려고 하는 이유에 대해서 의아해 하시는 분들이 있을거에요

왜냐하면.....

처음 저 제목을 읽었을때 약간 어색하지 않았나요??

1차 LPF?? Butter 필터인가??

필터 종류는 언급도 없이 무슨 쌩뚱맞게 1차 LPF 래??

ㅋㅋㅋ

대부분 여러분은 이런식으로 IIR 필터를 많이 짜셨을거에요

[b,a] = butter(2,fc/fn,'low');

맞죠? ㅋㅋㅋ

제가 이번 포스팅에서 다루고자 하는것은 조금더 수학적으로 원론적인 내용입니다.

MAF 의 최대의 단점이 있었으니..... 무엇인지 감이 오시나요??

딩동댕~~~

최근에 샘플링한 데이터 값이 현재의 상태를 가장 잘 반영하는 데이터인데

MAF 의 경우에는 어떻죠?? 네. 모든 데이터에 똑같은 가중치 (Weighting Factor) 를 곱해버립니다.

그 결과, 잡음제거능력과 데이터 변화의 민감도(Sensitivity) 를 동시에 만족시킬만한 방법이 없어져 버린거죠.


그래서 고안된것이 아래에 설명할 LPF 입니다.

기본 개념은 심플해요.

문제를 알았으니, 그문제점을 해결해보자. 큰 가중치를 최근에 샘플링한 데이터에  곱해주고, 과거로 가면 갈수록 점점 작아지는 가중치를 곱해주자 ㅋㅋ

그럴듯 하죠? ㅋㅋㅋ

참 똑똑한 사람 많아요 ㅋㅋ

그럼 일단 쭈욱 한번 정리를 해볼갑숑??? ㅋㅋ


 짜잔 ~ ㅋㅋ

어떻습니까? ㅋㅋ

굉장히 심플한데 왠지 모르게 강력할것 같다는 생각이 들지요?? ㅋㅋ

그렇다면 역시나 우리는 Test 코드를 짜서 Test 를 해봐야합니다 ㅋㅋㅋ

코드 전문은 아래에 첨부하도록 하구요~ 여기서는 결과만 Discussion 해볼께요 ㅋ

사용된 데이터는 이전 포스팅에서 사용한 MAF 의 그것과 크게 다르지 않습니다 ㅋㅋ

일단 MAF 와 LPF 의 결과가 입력 신호를 어떻게 쫓아가는지 보도록 하지용 ㅋ

 


짠! 일단 각 필터의 출력 파형이 입력 데이터는 잘 따라가는것 같지요?? ㅋㅋ

근데 뭐가 차이가 있는지 없는지를 모르겠군요 ㅋㅋ

한부분만 확대를 해봅시다.

 


어떄요 ㅋㅋ 차이가 있긴 있지요? ㅋㅋ

근데 이렇게만 봐서는 뭐가 몬지를 잘 모르겠습니다 ㅋㅋ

별반 다른것 없이 비슷해보이구요 ㅋㅋ

여기서 사용된 가중치 alpha 의 값은 0.7 이였어요 ㅋㅋ

그럼 가중치를 0.1, 0.9 로 해서 어떻게 출력이 변하는지 한번 볼까용???


<LPF 의 WF = 0.1>

<LPF 의 WF = 0.9>

차이가 느껴지시나요?? ㅋ

위의 정리자료의 후반부에 언급되었던 WF 의 변화에 따른 결과를 극명하게 보여주는 그래프 이지요?? ㅋㅋ 

그럼 Low-Pass Filter 이니까 Cutoff Frequency 가 얼마가 되는지는 알아봐야겠지요? ㅋㅋ

도대체 몇Hz LPF 인지 뉘미럴 ㅋㅋ

 


 얼추 보이지요?? ㅋㅋ

11Hz LPF 였군요 ㅋㅋ

이그래프를 얻는 방법은 스스로들 공부해 보세요 ㅋㅋ

나중에 기회가 닿으면 올려드릴게요 ㅋㅋ

Filter 설계는 사실 이런식으로 잘 하지 않지요 ㅋㅋ

Matlab 에서는 아주 강력한 Filter 설계 툴이나 내장 함수를 지원하기 때문입니다. ㅋㅋ

하지만 이렇게 한번쯤은 수학적으로 간단하게 집고 넘어가는것이

여러분들의 학문적인 베이스를 튼튼하게 해주지 않을까 생각합니다 ㅋㅋ

역시나 질문과 댓글은 환영합니다 ㅋㅋ

여러분의 댓글이 저에게는 큰 힘이 됩니다 ㅋ

오늘 자료도 아래에 첨부하겠습니다.


 

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License
지난 시간에는 AF (Averaging Filter) 에 대해 포스팅 했었지요 ㅋ

이번에는 앞에 Moving 이 들어갑니다 ㅋㅋ

Filter 개념을 접하게 되는 공대생들은 대부분 이것부터 맛보게 되실꺼에요 아마도 ㅋㅋ

한국말로는 이동 평균 필터!  ㅋㅋ

주식하시는 분들 '이평선, 이평선' 많이 하시죠? ㅋㅋ 이게 이동평균선의 줄임말입니다 ㅋ

그냥 평균 필터를 사용하는 경우에는 동적인 데이터 변화량을 도저히 반영할수가 없습니다.

시작부터 끝까지의 데이터를 평균내서 뿌려버리다 보니까 값의 변화폭 자체가 매우 작아져 버리다 못해

데이터 길이가 길어지면 길어질수록 변화가 없어져만 가겠지요 ㅋ

바꿔 생각해보면 infinit - point Moving Average Filter 가 되어버리는 것입니다 ㅋ

그럼 일단 늘상 하던대로 개념정리를 해야겠지요? ㅋㅋ


자 ㅋㅋㅋ

읽어보신 분들은 알겠지만 이번에는 재귀식을 사용하지 않겠습니다 ㅋㅋ

어차피 재귀식을 사용하는데 얻을수 있는 이점이 없거나 작을 경우에는 코드를 직관적으로 이해 할수 있도록 만들어 주는것이 훗날을 생각할때 훨씬 더 좋기 때문입니다 ㅋ

물론 MAF 의 차수가 엄청나게 높다면야 다시 생각해 봐야겠지만 구지 필터함수를 들고있을 필요는 없을것 같아요 ㅋㅋ

아래에 보여질 결과창은 Kalman Filter 의 이해라는 책에서 제공해주는 데이터를 이용하고,

제가 약간 수정 보완을 거친 자료입니다. ㅋ

데이터의 변화량을 잘 쫓아가면서도 잡음은 제거되어 나오는 형태의 그래프를 보실수 있을 거에요 ㅋ

물론! 파일은 올려드리겠습니다 ㅋㅋ

코드에서 눈여겨 보실점은 초기값을 0 가 아닌 처음들어오는 데이터로 함으로써 초기 오류를 줄였다는데 있어요 ㅋ

어려운 부분이 아니니까 스윽 보시면 이해되실꺼에요 ㅋㅋ

그리고 persistent 로 선언된 변수들이 있는데요 ㅋㅋ

http://iamaman.tistory.com/158

요기 가셔서 공부하세용 ㅋㅋ C 언어의 Static 선언과 비슷한거라고 생각하시면 됩니당 ㅋㅋ


씨퍼런 선이 필터 출력파형이네요 ㅋㅋ

잘 쫒아가고 있지요? ㅋㅋ

Matlab 에서는 MAF 함수를 따로 지원하지 않습니다 ㅋㅋ

이유는???

Filter 라는 함수에 b 변수배열을 1/n (n = point 수) 로 하고 a = 1 로하면??

형태는 fir 필터 형태지만 moving average filter 식과 같아지요??/

각각의 데이터에 1/n 을 곱해서 다시 다 더하니까요 ㅋㅋ

그래서 이걸 사용하라는 의미에서 제공을 안해주나봐요 ㅋㅋ


근데!!! 여기에 엄청난 맹점이 숨어있습니다 ~ ㅋㅋㅋㅋ

뭔지 아시는분이 계실려나???? 정말로 아신다면 대단하십니다!!!! 역시 세상은 엄청 넓군요 ㅋㅋ

그럼 밑에 손으로 짠 MAF 와 filter 내장함수를 이용해서 10point MAF 한 결과파형을 올려드릴테니까

한번 생각해 보세요 ~ ㅋㅋ

조그마케 해놓고 보면 잘 안나와서 한부분을 확대했어요 ㅋㅋ



짜잔~ ㅋㅋ

추세는 둘다 서로 잘 따라가는데 ㅋㅋ

같은 파형인것 같은데 이상하게 약간 차이가 나지요? ㅋㅋ

뉘미럴 왜그럴까! 개 썩을 ㅋㅋㅋ

아... filter 함수를 쓰면서 Phase Delay 인가???

물론 그럴수도 있지요 ㅋㅋ

그럼 Amplitude 는 왜 차이가 나는걸까요? 뉘미럴 개썩을 ㅋㅋㅋ

딜레마에 빠지게 됩니다 ㅋㅋ

그럼 일단 filtfilt 함수를 사용해서 delay 를 제거해보지용 ㅋㅋ

 


짜잔 ㅋㅋㅋ

자 ㅋㅋ

딜레이는 없습니다 ㅋㅋ 하지만 역시나 Amplitude 에서 차이를 보입니다 ㅋ

이게 무슨 개 거지같은 경우가 ㅋㅋㅋ

이유가 뭘까요?? ㅋㅋ

알아내셨나요??? ㅋㅋ

정답!~!!


손으로 짠 MAF 함수의 경우 : (data 합)/포인트수
filter 함수의 경우 : (각 데이터 / 포인트수) 를 전부 더한것 ㅋ

수식적으로는 100% 같습니다 ㅋㅋ

하지만 각각의 데이트를 다 나눠놓고 더하는것은 데이터를 나누는과정에서서 소수점 뒷자리가 계속 짤려나가게 되고 이걸 다시 더하다 보니 오차가 더 생기는 것이지요 ㅋㅋ

코딩을 짜는과정에서 이런 오류를 흔히 범할수 있습니다 ㅋㅋ

저처럼 이제 막 살짝 코딩 맛을 봐가는 사람은 머리쓴다고 저런 실수를 할수도 있지요 ㅋㅋ

다 더해놓고 나눌려면 큰 크기의 버퍼를 잡아야하고 그럼 스택의 낭비가 심하고, 잘못하면 OverFlow 날수도 있으니까 나는 식을 좀 바꺼나 하나하나 나눠놓고 더하겠다!!!

이런생각 말이에요 ㅋㅋㅋ

얼마나 위험한 생각인지 이제는 다들 아셨지요? ㅋㅋ


그리고 연산속도에서도 나누기 연산보다는 더하기 연산이 훨씬 시간이 적게 걸리니까 다 더하고 한번에 나누는것이 여러모로 좋아요 ㅋㅋ

이과정에서 버퍼 사이즈를 잘 결정하는 것은 프로그래머의 역량이겠지요 ㅋㅋ

물론 Matlab 에서는 크게 신경쓸것이 없지만

Embeded C 나 Window C 프로그래밍을 하는경우라면 이야기가 달라집니다 ㅋㅋ

Matlab 으로 짜실때는 뭐 크게 차이가 안나니까 그냥 filter 함수 이용하셔도 될듯 합니다 ㅋ

그럼 오늘도 즐거운 하루 되시공~ 

test 하는데 피룡한 파일들 올려드리도록 하겠습니다~~


수정합니다 ㅋㅋ

다시 해보니까 일단 제가 코드를 잘못짜놓고 헤맨부분이 있어요 뉘미럴 ㅋㅋ

위에서 한말이 다 거짓말은 아니구요 ㅋㅋ

두개의 방법사이에 약간의 오차가 있기는 한데 무시할수 있을 정도의 오차입니다 ㅋㅋ

10^-15 정도의 오차 ㅋㅋㅋ

일단 TestMovAvegFilter.m 파일에서

맨 마지막 줄을 output = filter(b,1,sonarAlt);

이렇게 고치시기 바랍니다 ㅋㅋㅋ

하마터면 잘못된 정보를 전할뻔 했군요 ㅋㅋㅋ

이런 잘못을 저지르는 분도 있을수 있으니 글은 모두 지우지 않고 줄을 그어놓겠습니당 ㅋㅋㅋ

좋은밤되세요 ㅋ
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear
크리에이티브 커먼즈 라이선스
Creative Commons License

평균필터

제목만 보고 이글을 읽지 않으시는 분들이 분명히 많을것 같습니다 ㅋㅋ

무슨 중학생도 아니고 평균을 언급하고 그래?

라는 생각 분명히 하셨지요? ㅋㅋ

저도 그랬거든요 ㅋㅋ

이래서 역시 사람은 겸손하고, 돌다리도 두들겨 보고 가고 이래야 합니다 ㅋㅋ

자 여기서 문제 ~

문) 10Hz 로 샘플링되는 데이터가 계속 들어오고 있다. 1초동안 각 데이터가 들어올때 변화하는 평균값의 추이를 보고자한다. 이를 구현하라.

너무 쉽나요? ㅋㅋ

역시 여러분은 똑똑하군요 ㅋㅋ

이 멍청한 저는 말이지요 ㅋㅋㅋ

이렇게 구현했습니다 ㅋㅋㅋ

데이터의 처음부터 새로들어오는 데이터까지 다 더하고, 데이터 갯수로 나눈다. ㅋ

아 심플하고 직관적이다 ㅋㅋㅋ 역시 멋지다 ㅋㅋㅋ

요로면 망합니다 ㅋㅋㅋ

이전 데이터 까지의 평균을 계산하기 때문에 그 값을 이용한다면 Stack 의 사용량과 연산량을 대폭 줄일수 있겠죠? ㅋㅋ

자 그럼 한번씩 읽어 보시기 바랍니다



오... ㅋㅋ

이렇게 재귀식을 이용해서 계산하니까 어떠세요? ㅋㅋㅋ

처음부터 무식하게 다 더하는 그런 짓을 하지 않아도 될것 같은 느낌이 들지요? ㅋㅋㅋ

이제 이대로 구현해서 어떤 결과를 보여주는지 한번 봐볼까요? ㅋㅋ

이게 정말로 맞는지 궁금하시면, 손으로 직접 같은 결과가 나오는지 계산들 해보세요 ㅋㅋㅋ

이게 Matlab 으로 구현한 함수를 이용해서 계산한 값입니다 ㅋㅋ

5V 전압에 White Noise 가 끼었다고 가정하고 ㅋㅋ

실제 입력 데이터와 출력데이터가 어떻게 나오는지를 살펴보지요 ㅋㅋ

오늘도 어김없이 코드는 제공됩니다 ~ ㅋㅋㅋ

다운받을때 댓글이라도 좀 달아주시고 ㅋㅋ 어떻게 쓰시던 개념치 않겠습니다 ~ ㅋㅋ

그럼 다음에 뵈용 ㅋ~



## 추가 ##

얼마나 계산량의 차이가 나는지를 보고싶어서 ㅋ

1kHz Fs 에 60초간의 데이터를 Average Filtering 취한다고 했을때 수행시간을 알아보겠습니다 ㅋㅋ

1. 재귀식을 이용한 연산 : 1.587초
2. 싸그리 더해서 나누는 연산 : 3.672초

데이터의 수가 많아질수록 이 효과는 극명하게 나타나겠죠? ㅋㅋ
그럼 재미로 300초 데이터로 다시 비교해볼까요?

1. 7.627초
2. 23.895초

ㅋㅋㅋ 극명하게 차이가 나는군요 ㅋㅋ

제공되는 코드는 tic, toc 함수를 사용하여 몇초의 연산이 걸렸는지를 확인할수 있는 걸로 올리겠습니다.

300초 연산으로 잡혀있는것이므로, 컴퓨터가 후달리면 시간을 좀 줄이고 하시길 추천합니당~


 

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear


티스토리 툴바