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...
본 포스트에는 윈도우 환경에서 python의 winsound라이브러리를 이용한 사운드 재생의 예제를 싣고 있다. import winsound 특정 주파수 톤 재생 Beep를 사용하여 특정 주파수의 소리를 정해진 시간동안 재생할 수 있다. winsound.Beep(frequency, duration) 파라미터 frequency : Hz 단위며, 범위는 37Hz~32,767Hz duration : milliseconds 단위이다. example code import winsoind winsound.Beep(370,2000) wave 재생 지정된 파일, 윈도우 레지스트리에 등록된 사운드 혹은 오디오 데이터(bytes-like object)를 재생한다. 만약 sound 리소스가 없는 경우 시스템 디폴트 사운드를 재생한다. winsound.PlaySound(sound, flags) 파라미터 sound : 파일 이름, 시스템 사운드 별명, 오디오 데이터 flags : winsound.SND_FILENAME : sound 파라미터는 wave file 이름 이며, SND_ALIAS와 함께 사용하면 안된다. winsound.SND_ALIAS : sound 파라미터는 시스템 사운드 별명이며, SND_FILENAME와 함께 사용하면 안된다. ex) 'SystemAsterisk', 'SystemExclamation', 'SystemExit', 'SystemHand', 'SystemQuestion' winsound.SND_LOOP : 반복 재생한다. 테스트해보니 SND_ASY...
본 글은 base64 encoder/decoder예제 c 소스 코드를 싣고 있다. BASE64 BASE64는 일련의 데이터를 64종류" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ "의 문자만을 이용하여 표현하도록 하는 부호화 방식이다. Base64는 인터넷 이메일 프로토콜이나 http url등에서 사용된다. 부호화 과정은 아래와 같다. 문자 : Hello Hex 코드 : 0x48 0x65 0x6c 0x6c 0x6f 8bits bin 코드: 01001000 01100101 01101100 01101100 01101111 8비트 단위의 문자를 6비트 단위로 분리한다. 6bits bin 코드 : 010010 000110 010101 101100 011011 000110 1111 00 ‘=’ 6비트 2진 코드 값은 BASE64 코드 테이블의 인덱스이고 각 인덱스의 문자로 base64 부호화 한다. 마지막 모자라는 비트는 0으로 채우며, 4글자 단위로 부호화 하기 때문에 4글자가 안되면 ‘=’기호를 사용해 4글자를 맞춘다. Base64 코드 : aGVsbG8= Base64 Encoder source code Base64 인코더 소스는 아래와 같다. 위의 부호화 예대로 text데이터를 받아 6bit 단위로 나누어 base64 코드 테이블에 맞춰 부호화를 진행한다. static const char base64code_ascii[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int text2base64_size(const char *text) {...
임베디드 리눅스를 포팅하고 부팅 중 Staring Kernel 메시지 이후 아무런 로그 메시지가 출력되지 않고 멈추는 경우가 있다. 경험상 이런 경우 보통 Device Tree에서 GPIO설정이 잘못되었거나 파일시스템 설정이 잘못되어 rootfs를 마운트 하지 못해 발생하는 경우가 많았다. 확실히 하기 위해 로그 메시지를 레벨을 조정해 어디에서 부팅이 멈춘 것인지 확실히 해야 한다. 커널 로그 메시지 레벨은 kernel .config에서 LOGLEVEL을 수정하면 된다. LOGLEVEL이 클수록 모든 로그 메시지를 출력한다. https://man7.org/linux/man-pages/man2/syslog.2.html # # Kernel hacking # CONFIG_DEFAULT_MESSAGE_LOGLEVEL=7 만약, LOGLEVEL을 수정해도 아무런 로그 메시지가 나오지 않는다면, bootargs의 loglevel 값이 어떻게 설정되어 있는지 확인할 필요가 있다. loglevel도 클수록 모든 로그 메시지를 출력한다.
band pass filter 코드가 필요해 인터넷을 검색을 해봤지만, 쓸 만한 코드와 자료가 별로 없어 그냥 만들어 쓰기로 했다. 필요한 공식은 위키피디아에 나와있다. https://en.wikipedia.org/wiki/Finite_impulse_response 1. filter 크기 FIR filter를 만들 때 filter의 크기(tpas의 크기)를 결정할 때 도움될 수식이 있다. N=A㏈Fs / 22*Δf A㏈ : 감쇄될 db Fs : Sampling Frequency Δf : frequency bandwidth 출처 : https://www.allaboutcircuits.com/technical-articles/design-of-fir-filters-design-octave-matlab/ def estimatefilterlen(fl,fh,fs,db): N = int(np.round(db * fs / (22 * (fh-fl)))-1) return N 2. Low Pass Filter [ python code ] def lowpassfilter(f,fs,N): taps = np.zeros(N) fc = f / fs omega = 2*np.pi*fc middle = int(N/2) for i in range(N): if i == middle: taps[i] = 2*fc else: ...
댓글
댓글 쓰기