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...
이전 포스트에서 CFAR의 원리 에 대해 알아본 적이 있다. 본 포스트에서는 Python으로 CA-CFAR에 대해 간단하게 구현한 예제를 수록하고 있다. 구현된 CA-CFAR은 아래 그림과 같이 구현되었다. ca-cfar 코드 import numpy as np class cacfar(object): def __init__(self, window_size, guard_size,pfa = 0.01, scale=1.0): self.pfa = pfa self.scale = scale self.window_size = window_size self.guard_size = guard_size def cal_threshold(self, left, right): n = len(left)+len(right) s = np.sum(np.square(left))+np.sum(np.square(right)) if n > 0: T= np.power(self.pfa,(-1.0 /n)) - 1 average = s/n ...
리눅스 파일 검색 find [경로] -name [파일 이름] # find . -name "file*" 리눅스에서 파일 내부의 문자열을 검색 grep [옵션] 패턴 [파일] # grep -r "Pattern" ./* -r, --recursive 서브 디렉토리까지 찾아본다. 리눅스에서 파일 검색 후 파일 내용 중 문자열을 찾기 # find . -name "module*" | xargs grep "video" 파일 이름에 "module"이 들어있는 파일 중 내용에 "video"가 들어있는 파일을 보여준다.
▢ 디바이스 드라이버 디바이스 드라이버는 시스템이 지원하는 하드웨어를 사용자가 응용 프로그램에서 사용할 수 있도록 커널의 일부 영역을 사용하여 동작하는 일종의 프로그램이다. 리눅스에서 사용자가 커널 모드의 디바이스 드라이버를 사용하여 실제 하드웨어 디바이스에 접근하고자 할 때 아래 그림과 같은 추상적인 계층들을 통과해야 한다. 리눅스 사용자 관점에서 디바이스는 하나의 파일로 인식된다. 이런 파일들은 /dev 디렉토리에 위치하며, 이들을 디바이스 파일이라고 한다. 디바이스 드라이버는 문자/블록/네트워크 디바이스 드라이버 세 종류가 있으며, 각 디바이스는 주 번호(Major number)와 부 번호(Minor number)를 갖고 있다. 문자 디바이스 (Char Device) 자료의 순차성을 지닌 장치로 버퍼 캐쉬를 사용하지 않으며, 장치의 raw data를 사용자에게 제공한다. 시리얼, 키보드, 프린터, 마우스 등이 이에 속한다. 블록 디바이스 (Block Device) Radom access, 블록 단위의 입출력이 가능하고, 파일 시스템에 의해 mount 되어 관리되는 장치. 디스크, CD-ROM등이 이에 속한다. 네트워크 디바이스 (Network Device) 대응하는 장치 파일 없으며, 네트워크 통신을 통해 패킷을 송수신할 수 있는 장치. 이더넷 등이 이에 속한다. ▢ 커널 모듈 커널 모듈은 리눅스 커널이 부팅되어 동작 중일때도 동적으로 추가하거나 제거할 수 있는 커널의 구성요소이다. 디바이스 드라이버, 파일 시스템, 네트워크 프로토콜 등이 모듈로 제공된다. 커널 모듈은 커널 영역에서 동작한다. 일반 응용프로그램과 달리 main함수가 없...
윈도우 환경에서만 개발하다 처음 리눅스 환경에서 개발할 떄 가장 불편한 것이 리눅스에 source insight가 없단는 것이었다. GUI환경에 익숙해져 있어 vi를 사용하는데 불편함이 많았다. 쓰기 편한 소스 편집 IDE를 찾다 발견한 것이 Geany 다. 개인적으론 다른 소스 편집 IDE들 보다 그나마 편하게 사용하고 있다. 설치 apt-get으로 설치할 수도 있고, $ sudo apt-get install geany 우분트 소프트웨어 센터에서도 설치할 수 있다. 실행 요술 램프 모양 아이콘의 geany를 실행하면 아래 화면과 같다. 소스 편집 창과 심볼/문서/파일 창이 있으며, 상태 창과 컴파일 결과 창 등을 볼 수 있다. 검색 기능이 편해 특정 폴더를 지정해 원하는 내용을 검색할 수도 있다. 소스 폴더에 makefile을 만들어 두면, 별도의 터미널을 사용하지 않고도 geany내에서 빌드를 실행할 수 있다. 사용하면서 단점이 있다면, source insight가 아니라는 것이다.
댓글
댓글 쓰기