본 포스트는 uwb radar를 사용한 호흡수 측정의 예제 코드와 측정 결과를 싣고 있다. 예제 코드는 python으로 구현했다. 호흡수 측정 원리는 아래 글에 설명돼 있다. UWB 레이더를 사용한 호흡수 측정 원리 1. uwb radar signal 예제 코드에서는 uwb 레이더로 사람을 측정한 후 저장된 파일을 사용하였다. 파일에서 한 프레임씩 읽어 10초 단위로 버퍼에 저장한 후 이를 사용하여 호흡수를 측정했다. csvfile = open('0117170856.csv') if csvfile is None: return uwb_signal = csv.reader(csvfile) measure_len = 153 for line in uwb_signal: frame = [float(x) for x in line] frame = frame[0:measure_len] vital.put_frame(frame) csvfile.close() def put_frame(self, frame): self.framesize = len(frame) self.framestack.append(frame) if len(self.framestack) > self.framestack_size: self.framestack.pop(0) 2. 사람 위치 호흡을 측정하기 위해선 사람의 위치를 찾는 것이 선행되어야 한다. 사람이 호흡할 때 움직이는 가슴/배의 위치를 찾...
임베디드 리눅스를 포팅하고 부팅 중 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도 클수록 모든 로그 메시지를 출력한다.
Keras 모델의 가중치(weights) 파라메터 검색, 설정, 저장 및 불러오기 정리 관련 포스트다. keras model에서 가중치(weights) 가져오기 Model.get_weights() return: - 모델의 가중치 배열 Keras model에 가중치(weights) 설정하기 Model.set_weights(weights) argument: - weights : numpy 배열의 가중치 Keras model의 가중치(weights) 파일로 저장하기 Model.save_weights(filepath, overwrite=True) arguments: - filepath : 저장할 파일 경로, HDF5 형식으로 저장된다. - overwrite : 덮어쓰기 여부 파일에서 Keras model 가중치(weights) 불러와 설정하기 Model.load_weights(filepath, by_name=False, skip_mismatch=False, reshpae=False) arguments: - filepath : 가중치 파일의 경로 - by_name : 이름 또는 토폴로지 순서로 가중치를 로드 할지 여부를 나타낸다. - skip_mismath : 가중치 개수나 모양이 일치하지 않는 레이어를 건너 뛸지에 대한 여부를 나타낸다. (by_name이 True인 경우) - reshape : reshape 여부를 나타냄 예제 코드 from keras.layers import Input, Dense, Dropout, regularizers from keras.models import Model, load_model, save_model from keras.optimizers import Adam def build_model(i...
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: ...
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...
댓글
댓글 쓰기