03_mfc를 활용한 correlation
C++/신호처리 프로젝트 mfc.ver

03_mfc를 활용한 correlation

728x90

이번에는 correlation을 mfc를 활용하여 구현하여 보았다.

신호발생 코드는 이전글들과 같고, Correlation 클래스를 따로 코딩을 해서 구현을 해보았다. 

Correlation 수식을 이용하여 구현하면 간단하게 구현해볼 수 있다. 자기상관 함수와, 상호상관 함수 모두 구현해 보았다.

 

correlation 파일 용량이 크기에 올릴수는 없을거 같고 혹시 필요하시면 메일을 적어드리면 보내드리겠다.

 

백색잡음의 자기상관신호

잡을을 자기상관으로 두면, 위처럼 0인구간에서는 1의 값이 나오고, 다른 값에서는 거의 0에 인접한 값이 나옴을 알 수 있다. 이는 자기상관이기에 모든 상관도가 같은 0인지점말고의 상관성이 0이라는 의미이다.

 

서로다른 백색잡음의 상관함수

즉, 위처럼 서로다른 백색잡음을 하면, 0에서 특정값이 아닌, 모두가 파형이 튀는것을 알 수 있다.

위 그래프에서 백색잡음인것처럼 답이 나오는데, 코드 안에서 최대,최소값을 설정하여 상대적으로 보이게하는 부분을 추가했기에 그 코드를 한번 확인해 보는것이 좋을 것 같다.

 

이는 신호처리에서 아주 중요한 요소인데, 잡음을 없애버리는 방식으로 correlation을 적용할 수 있으면 된다는 것이었다. 통신이론을 배우고 이를 내가 직접 코딩으로 증명할수 있음에서 아주 재미있는 작업이었다.

 

즉, 위처럼 사인 10Hz신호와 백색잡을을 서로 상관해버리면 기존의 사인 10Hz가 나오게 된다. 물론, 서로상관이라 위상도 제멋대로 바뀌어버리고 위와같은 경우에서는 데이터수가 무한이 아닌, 1024개로 지정해두었기 때문에 크기가 점점 줄어드는 현상이 발생하긴한ㄷ. (데이터 수를 늘리면 어느정도 해결된다)

 

놀라운건, 위처럼 잡음이 실린 sin 10Hz와 기존 sin 10Hz가 있다면, 잡을을 제거하는데 사용할 수있다는 것이다. 그렇다면 둘다 잡음이 실린 sin 10Hz성분 두개를 correlation하면 어떻게 될까?

 

같은결과가 나옴을 알 수있다. 우리는 위의 신호가 sin10Hz + white로된 것을 알고, white끼리 서로상관을 하면 잡음이 없어진다는것을 기억하고 있을 것이다. 즉, 위와같은 경우처럼 잡음을 없앨 수 있는 것이다.

 

이 그래프를 그리는 클래스부터시작해서 통신이론에서 배운 개념들을 직접 코딩으로 하나하나 머리써서 만들어나가는 과정이 재밌는 과정이었다. 다음엔 Fourier Series를 직접 구현해 보겠다.

728x90