본문 바로가기

book & sentence/C n Programming

Tektronix MSO Wave form 저장 기능을 이용한 신호처리 (wfm parser) feat. radiation detector

반응형

Ex_Script.m
0.00MB
waveFromWfm.m
0.00MB

%주의%

이 포스팅은 작성자의 기억 보존 및 노하우 전수를 위한 포스팅 입니다. 오타 혹은 오류가 있어도 너그럽게 용서해 주시길 부탁 드리며, 문제 있는 내용은 댓글등으로 전해 주시면 수정 하도록 하겠습니다.

% 주의 갑자기 끗 %

Tektronix 고성능 오실로스코프는 파형을 저장하는 기능을 갖추고 있고, 이 기능을 이용하면 신호처리 체인의 일부분에서 데이터를 취득하여, 예상 데이터를 얻을 수 있습니다.

이 방식의 장점은 다음과 같습니다.

1. 완성된 검출 신호 중 중간 처리 내역을 정확하게 알수 있음.

2. 체인의 후열에서 취득 가능한 최대 성능을 확인 할 수 있음.

단점이 따라 옵니다.

1. 느림

다른 단점도 몇가지 떠오르지만 위에 하나가 치명적이라서 다른 단점은 생략하겠습니다. 위 단점으로 인해 다음과 같은 한계가 생깁니다.

1. 다수의 응답을 받아 처리하기 위해 오랜 시간이 소요됨.

2. 시간당 신호처리 갯수 (시간당 계수율)를 확인 할 수 없음.

서론은 여기까지 하고, 본격 스텝바이브텝 노하우로 넘어 가겠습니다.

첫번째 단계로 오실로 스코프 설정입니다.

"사진 올리고 당황 했어요.. 왜 신호가 두개 떠있을까요...번인인거 같아요..ㅡㅡ;; 암튼 무시 >,.<"

첫 시작은 당연히 오실로스코프 설정 입니다. 제가 사용하는 오실로 스코프는 8채널 짜리 입니다. 이중 취득하고자 하는 신호는 5채널 입니다. 이 다섯 채널에 대해 동시에 신호가 뜨도록 설정합니다.

%주의 사항%

파형 저장은 화면에 보인 파형이 까지만 저장되고, 트리거가 동작했을때의 파형을 저장합니다. 그밖의 데이터(오버플로우등)는 저장 되지 않으니 설정에 주의 합니다.

%미세 팁%

설정 내용은 파일탭의 세이브를 통해 저장해 두면 향후에 불러서 쓰기 좋습니다.

두번째 단계로 저장 설정 입니다.

화면 우측하단에 Acquisition을 누릅니다. (OS에 따라 인터페이스는 다를수 있습니다. 사용된 OS는 Windows입니다.)

팝업 화면에서 Configure를 누릅니다.

Browse를 눌러 팝업 화면에서 저장할 위치를 설정합니다.

%미세 팁%

오실로 스코프 프로그램안에 브라우저 정보 접근 방식이 바보 같습니다. 접근한 폴더에 파일이 많으면, 읽는 속도가 현저하게 느려집니다. 사전에 OS환경의 브라우저에서 파일을 저장할 빈폴더를 만들어 두고 접근하시는 것을 추천합니다.

폴더 설정이 끝나면 저장할 파일의 이름과 형식, 소스를 선택합니다. 파일 이름은 저장할 파일 이름을 입력해 주시고, 저장 될때에서 저장된 시간이 파일명 뒤에 붙어 중복저장이 방지되니 걱정하지 말고 적합한 이름을 정합니다. 저장 방식은 Waveform으로 설정합니다. (설마 스크린 캡처가 필요한 분은 없을 겁니다. ) 저장 포맷은 wfm와 csv가 있습니다. wfm은 제조사에서 지원하는 raw포맷이고, csv는 텍스트 뷰어로 볼수 있게 저장해 줍니다. 여기서 csv로 저장하는 방식은 사용하지 않습니다. 이유는 아래와 같습니다.

1. 파싱이 오래 걸림.

2. 저장 용량이 지나치게 큼.

3. 오실로 스코프에서 저장 시간이 오래 걸림. (이건 오실로스코프의 문제일 것 같습니다.)

소스는 특정 채널을 선택하거나, ALL을 선택합니다. ALL이라고 해서 8채널을 다 저장하는것은 아닙니다. 위 스크린 챕터(가장위)와 같이 5채널을 보고 있으면 5개의 채널만 출력합니다. 아마도 보통 ALL을 선택할 것입니다.

configure 설정이 완료되면 acquisition창에서 Single/Seq Stops After에서 원하는 counts양을 입력한 후(100k 이하 추천) Single/Seq를 눌러 주면 데이터가 저장됩니다.

저장이 시작되면 Acquisition정보의 가장 아래에 수집량/목표량 이 뜨며, 목표량을 채우면 오실로 스코프는 Stop상태가 됩니다.

%미세 팁%

수집량은 100k 정도를 추천합니다. 프로그램이 문제인지 OS가 문제인지 모르겠으나 (아마 둘다) 저장량이 누적 될수록 저장시간은 점점더 길어집니다. (리니어 아닙니다.)

세번째 단계로 신호처리 입니다.

가져온 데이터(wfm)은 오실로 스코프의 스크린에 보여준 파형을 raw파일 형태로 저장한 데이터 입니다. 당연히 신호처리를 통해 유의한 데이터로 가공해야 합니다. 일반 csv 데이터라면 Matlab이나 Octave 혹은 Excel을 이용하면 되겠지만, 이건 프로그래머의 방식이 아닙니다.

%명언 타임?%

"손으로 10초면 충분히 할 수 있는 일을 컴퓨터로 하루 종일 프로그래밍해서 자동으로 수행 할 때, 나는 더할 나위 없이 큰 행복을 느낀다." -더글라스 애덤스

저장된 파일은 위 사진과 같습니다. 설정한 이름뒤에 채널 숫자와 저장 시간이 붙습니다. 이 파일에서 주의 점 같은 이벤트의 저장 신호여도, 채널별로 저장 시간이 설정됩니다. 즉 같은 이벤트 여도 뒤에 붙는 숫자가 같지 않습니다. 이건 아쉽지만 저장 시간이 꼬이진 않는다는 전제하에 후가공을 합니다.

전 Octave를 이용합니다. 그래야 데이터 처리 중간중간에 미세한 수정을 가미하기 편합니다. (Matlab 너무 비쌉니다.) 필요한 파일은 두가지  입니다. 첫번째는 wfm파일을 파싱하여, 데이터로 취득할 펑션, 두번째는 "시간정보"를 이용하여 이벤트 별 데이터를 합치고 저장할 파일 입니다.

일단 첫번째 파일은 wfm 파서로 파일명을 받으면, 시간과 데이터 정보로 변경해서 반환합니다. wfm파일의 구조는 관련 파일을 구해서 보시는 것을 권장합니다.

"예전에는 링크도 걸어두었는데, 회사들이 쉽게 망하고, 쉽게 URL 변경하고, 구글의 랜덤 서퍼는 미친듯한 서핑을 보여줘서 이제 안 겁니다."

2019년 12월 현재 제가 사용하는 오실로 스코프 기준으로 wfm 포맷에서 가장 주요한 정보인 x_scale과 x_offset, t_scale과 t_offset은 각각 168번째 바이트와 488번째 바이트에 double데이터 형태로 연속 저장 되어 있고, 504번째 바이트에 uint32형태로 데이터 갯수가 저장되어 있습니다. 실제 데이터는 838번째 바이트 부터 있습니다.

위 데이터 들이 오실로 스코프의 파형을 재현하는데 필요한 기본 정보 이고, 추가 정보는 매뉴얼을 참조하시길 바랍니다. (설마 아직도 엔디안 방식에 대해 논하는 사람은 없을 거라고 믿습니다.)

위 데이터 들로 취득하는 펑션은 첨부에 waveFromWfm.m 파일입니다.

두번째 파일인 첫번째 파일의 결과인 [time data]를 이용해서 신호처리를 수행합니다. 유저에 따른 신호처리 방법이 있겠지만 제가 사용하는 신호처리 방법은 계수형 방사선 영상화 검출기에서 사용하는 방법으로 동일 시간에 취득한 4채널( 더많을 수도 있음 ) 정보를 가공하여 디지털 수치로 가공합니다. 이때 트리거 데이터를 얻기위해 4채널의 신호를 합친 데이터를 트리거로 사용합니다. 앞서 스크린 캡처의 설정이 위 설명과 같습니다.

두번째 파일은 그저 예제로 사용하고, 사용 목적에 따라 알고리듬에 따라 변경하면서 사용하시길 바랍니다. 디렉토리에 있는 wfm파일들의 정보를 읽어와 가공후 octave의 데이터 파일 형태로 저장합니다. 처리 순서는 다음과 같습니다.

1. 디렉토리 정보 획득

2. 해당 디렉토리에서 wfm파일 정보 획득

3. 각각의 wfm파일을 파싱하여 원하는 형태로 가공

이때 중요한 점이 octave에서 불러오는(matlab도 같음) 디렉토리 정보가 기본적으로 날짜에 맞추어 정렬되어 있다는 것입니다. 이를 이용해서 이벤트별 채널 데이터를 처리 가능합니다. 다른 스마트한 방법들도 있지만 굳이 오랜 시간이 필요한 작업이라서 최대한 심플하게 처리합니다.

 

 

반응형