Constant False Alarm Rate (CFAR)은 기본적으로 테스트하고자 하는 위치의 cell과 주변 cell의 관계를 보고 테스트 cell이 Target 인지 아닌지를 구분하는 알고리즘이다. 주변 cell과의 관계를 어떤 방식으로 비교하는가에 따라 여러가지 알고리즘이 존재한다. CA-CFAR, GO-CFAR, SO-CFAR, OS-CFAR, VI-CFAR, OSVI-CFAR등이 있다. 이 많은 알고리즘 중 간단하고 기본적인 CA-CFAR과 OS-CFAR에 대해 알아보자. CA-CFAR (Cell Average CFAR) CA-CFAR의 원리는 위 그림과 같다. 좌우의 Reference Cell의 평균에 Scale Factor T를 곱하고, ADT (Average Decision Threshold)를 합하여 CUT가 타겟인지 아닌지를 구분한다. ADT는 신호의 white noise를 고려하기 위해 더해준다. Scale Factor T와 ADT는 아래와 같은 공식으로 사용할 수 있다. 사용하려는 시스템에 따라 공식은 달라질 수도 있다. Pfa는 False Alarm 발생 확률을 나타내고, M과N는각 좌우의 Reference Cell의 개수를 나타낸다. OS-CFAR (Order Static CFAR) OS-CFAR의 원리는 위 그림과 같다. 좌우의 reference cell중 K번째 큰 값의 cell을 Reference Cell의 대표 값으로 정해 CUT가 타겟인지 아닌지를 구분한다. 보통 전제 reference cell의 크기 순에서 (3*N)/4 번째 cell이 성능이 좋다고 알려져 있다. CFAR 사용 예 아래 사진은 위 두 cfar을 사용한 예다. 파란색은 신호이며, 붉은 색은 char을 사용해 만든 threshold이다. 이 threshold보다 큰 값의 신호가 있는 위치에 실제 Tar...
파티클 필터(particle filter)는 칼만 필터(kalman filter) 와 마찬가지로 노이즈가 있는 환경에서 측정된 데이터를 필터를 사용해 실제 위치를 추정하는 도구다. 파티클 필터(particle filter)는 보통 가우시안 분포가 아닌 측정 데이터를 다루기 위해 사용된다고 한다. 물론 가우시안 분포의 데이터에서 사용하지 말라는 건 아니다. 본 포스트에서는 파티클 필터(particle filter)의 어려운 수학적인 내용은 제하고, 쉽게 예를 들며 필터의 동작원리에 대해 알아보았다. 파티클 필터(particle filter)에 대해 검색해 보면 아래와 같은 그림을 많이 보게 된다. 아래 그림은 파티클 필터의 estimation cycle을 도식화한 것이다. <’Real-Time Tracking of Multiple Moving Objects Using Particle Filters and Probabilistic Data Association’ original scientific paper 中> 위 그림의 검은색 원들은 particle을 의미한다. 이 particle에는 보통 위치 데이터와 weight가 포함된다. 검은색 원이 큰 것이 있고 작은 것이 있는 이유는 weight가 크고 작음을 의마한다. typedef struct _particle_t { int x; int y; float weight; }particle_t; 노이즈가 있는 환경에서 레이저 센서나 레이더등을 이용하여 물체의 위치를 측정할 때를 가정해 순서대로 이 필터가 동작하는 과정에 대해 알아 보겠다. (순서는 위 그림과 조금 다르다) 1. 초기 상태 측정 범위안에 랜덤 혹은 일정한 간경으로 particle을 뿌려 놓는다. 이 떄 particle...
Windows 10에서는 미라캐스트를 사용한 무선 디스플레이연결을 지원한다. 하지만, 만약 크롬캐스트(Chromecast)를 사용해 윈도우 화면을 미러링 하고자 할 때, 구글 크롬 브라우저를 사용하면 쉽고 편하게 할 수 있다. https://www.google.co.kr/intl/ko/chrome/ VLC에서도 비디오 화면을 미러링 할 수 있다고 하는데, 잘 동작하지 않고 윈도우 화면 전체를 미러링하지 않아 크롬 브라우저를 사용하고 있다. 크롬 캐스트 윈도우 화면 전송 방법 0. 크롬 캐스트 디바이스와 windows pc는 같은 네트웍에 연결되어 있어야 한다. (같은 공유기에 연결되어 있어야 한다.) 1. 크롬 브라우저의 우측 상단의 메뉴 > 전송을 클릭하면, 현재 사용가능한 크롬캐스트 디바이스 항목을 볼 수 있다. 2. 편의에 따라 탭 전송 아이콘에서 우측 버튼을 클릭하여 항상 표시되게 설정할 수도 있다. 3. 윈도우 화면 전체를 전송하고자 할 때는 탭 전송의 소스에서 '데스크톱 전송'을 선택하고, 바로 위의 크롬캐스트 디바이스를 클릭하면 된다. ** 소스는 미러링 중에는 변경되지 않는다. 먼저 소스를 선택하고 미러링해야 한다. 4. 화면 전송을 끝내고자 할 때는, 탭 전송에서 화면 전송중인 크롬캐스트 디바이스를 클릭하거나, 크롬 브라우저를 종료하면 된다.
uwb 레이더를 이용해 활력 징후(vital sign)를 모니터링하는 논문이나 시도는 예전부터 있어왔다. 2010년에 progress in electromagnetics research에 A. Lazaro, D. Girbau, R. Villarino가 쓴 "ANALYSIS OF VITAL SIGNS MONITORING USING AN IR-UWB RADAR"라는 글이 실리기도 했다. 본 글에는 간단하게 심박수 측정 원리에 대해 알아보고 python을 이용해 심박수를 측정하는 예제 코드를 구현하고 테스트했다. 1. 심박수 측정 원리 uwb 레이더를 사용하여 심박수를 측정하는 원리는 호흡수 측정 원리와 유사하다. UWB 레이더를 사용한 호흡수 측정 원리 uwb 레이더는 투과성이 좋기 때문에 심장까지 도달했다가 반사되는 전파를 수신해 이를 분석해 심박수를 측정할 수 있다. 심장이 뛸 때마다 레이더와의 거리가 늘어났다 줄어든다. 그 거리 신호들을 시간 순서로 모은 후, 푸리에 변환(Fourier transform)을 사용하여 주파수를 분석해 심박수를 측정한다. 일반적으로 호흡과 심장 박동의 회수가 다르기 때문에 fft를 통해한 주파수 분석이 가능하다. 위키백과 - 호흡수 / 위키백과 - 심박수 예를 들어 아래 fft 후 주파수의 분포 이미지에서 좌측의 저주파 부분이 호흡수 주파수이고, 오른쪽의 주황색선 범위가 심박수 주파수 범위다. 심박수 신호는 보통 호흡 신호에 섞인 상태로 레이더에 수신된다. 호흡 신호는 심박수 신호에 비해 상당히 큰 신호이다. 주파수 분석 시 fft변환 과정에서 호흡수 주파수에 영향을 받을 수도 있다. 이를 배제하기 위해 신호를 분리할 필요가 있으며, 심박수 신호의 분리는 Band Pass Filter...
본 포스트는 python에서 ctypes의 LoadLibrary로 windows dll을 로드 하는 방법과 예제를 싣고 있다. ctypes는 c 호환 데이터 형식을 제공하고 dll, 공유 라이브러리에서 함수를 호출할 수 있도록 해주는 python 라이브러리다. [ https://docs.python.org/3.7/library/ctypes.html ] python에서 windows dll 로드 방법 import ctypes ctypes.windll.LoadLibrary(name) ctypes.oledll.LoadLibrary(name) 윈도우용 dll을 위의 두 API를 사용한다. 일반적인 dll을 로드 할 경우 WinDLL 인스턴스 의 LoadLibary를 사용하고, OLE dll을 로드 할 경우 OleDLL 인스턴스 의 LoadLibary를 사용한다. dll 로드시 아래와 아래와 같은 에러가 발생할 경우가 있다. 이런 경우는 64 bits python 환경에서 win32로 빌드된 dll을 호출하거나, 32 bits python 환경에서 win64로 빌드된 dll을 호출해 발생하는 문제인 경우가 많다. OSError: [WinError 193] %1은(는) 올바른 Win32 응용 프로그램이 아닙니다. python에서 dll의 함수 호출 방법 python에서 windows dll의 함수 호출은 아래 dll 소스의 api 호출 예제를 통해 알아보자. window dll 소스 코드 int xl_square(int x) { return x*x; } int xl_square_out(int x, int *result) { if (result) { *result = x*x; return 0; } return -1; } void xl_callback(callback cb...
댓글
댓글 쓰기