Wednesday, June 6, 2018

Software Defined Radio & Car Key Signal Analysis

Software Defined Radio - 일명 SDR
약 2년 전에 단파라디오 관련글을 읽다가 SDR을 우연히 접하게 되었고, RTL-2832 칩을 사용하는 USB 타입의 싸구려 동글타입 TV Tuner만 가지고 있으면 된다는 것을 알게 되었다!
그것의 목적이 단순히 PC에서 TV나 Radio 수신이었겠지만, 지원하는 주파수 영역이 25MHz에서부터 1.7GHz 이고 이것을 소프트웨어로 마음대로 제어가 가능하다니, 꼭 열린 보물창고를 들여다 보는 느낌이었다!
중파 단파를 모두 탐지할 수 있고 FM, AM, CW, LSB, USB, DSB등 decoder가 포함되어 있어 주변의 무전기 신호까지 탐색이 가능하다. Raw 신호로 430Mhz RF Transimitter가  전송하는 디지탈 신호를 분석하여 데이터를 얻어내는것도 가능했다. 해보지는 못했지만 ACARS 신호를 분석하여 항공기 운항관련 정보를 얻을 수도 있다고 한다! 관련 내용은 다음에서 볼 수 있다.

그리고 소프트웨어적으로 수정된 rtlsdr 모듈과 Direct Sampling 모드를 사용하여 0~25Mhz의 Very Low Frequency를 탐지할 수 도 있다.
물론, 본연의 목적으로 FM 라디오를 감상해도 된다. 다만, 음질에 문제가 있을 수 있으므로 안테나를 잘 준비해야 한다.
눈에 보이지는 않지만 주변에 참 많은 신호들이 산재하고 있다.

SDR#
sdrsharp

HDSDR
hdsdr.png

RTLSDR Scanner
rtlsdrscanner.png

내 자동차 키의 주파수를 확인해 보았다. 예상대로 433Mhz baseband를 가진다. 이 신호를 copy 해볼 생각이다.
Scan1

[2017/06/18]
433Mhz RF Receiver로 자동차키의 신호를 읽어보려 했는데 반응이 없다. 스펙트럼을 보니 주파수가 약간 다르다. (밴드는 같고 신호도 들어오는데 rc-switch가 필터링하고 있었음.  혹시 채널을 구분하는건지 다른이유인지 확인이 필요함 06/19) 테스트를 위해 433Mhz RF Transmitter로 다음의 비트 데이터를 송신해보았다.
000000000001010100011001
SDR# 으로 신호를 잡고 오디오파일로 기록해보았다. 레코드 파일은 Wave 형식이며 Baseband(IQ) 데이터와 Audio 파일로 분리되어 나온다.  433
테스트 모듈의 신호는 Baseband에 기록되어 있다. 파일을 오디오편집기로 열어보면 다음과 같은 파형을 볼 수 있다.  보이는 파형의 얇은 막대는 비트 0이며, 두꺼운 막대는 1을 의미한다. 파형의 크기의 차이는 의미가 없고, 파형간의 공백은 데이터를 구분한다.
그렇게 보면 파형은 0000000000010101000110010 이 된다.
그런데 위에서 내가 보낸 데이터에는 마지막 LSB인 비트 0은 없다. 어떤 데이터를 보내도 마지막에 비트 0이 붙는 것을 보면 post-fix인것 같기도 한데 이것은 좀더 확인이 필요하다.
signal
아래는 테스트에 사용한 433Mhz RF Receiver이며, 약 1천원 미만으로 매우 싸다.
20170618_213714

[6/25]
그러고 보니 오늘이 6/25네...   전쟁으로 초토화된 아무것도 없던 이 땅에서, 불과 반세기만에 재건하고 세계적인 나라로 발전하여 내가 결혼도하고, 차도 몰고, 집도 있고, 취미로 IoT도 하고 있다는것이 새삼 너무 신기하다. 이렇게 살 수 있도록 피나는 노력과 희생을 치르신 우리세대 부모님들께 경의를 표한다.

다음은 내 자동차 키 시그널이다.
carkey_signal
RF Receiver로  내가 가진 스마트키 두개의 잠금장치를 눌러서 그 신호를 비트로 출력해보았다.
아래 화면에서 빨간선을 기준으로 위 아래 두 키의 신호가 다르다는것이 확인된다. 아마도 ID일 것이다. 그리고 푸른색 오른쪽으로는 전체 신호구간에 들어오지만 알 수 없는 랜덤 신호가 들어온다.
carkey1

위 신호를 출력한 코드는 다음과 같다. rc-switch 등 인터넷에서 구할 수 있는 오픈소스들이 잘 동작하지 않는것 같아서 아래와 같이 간단히 제작하였다.


코드에서 1000 이나 4200 등은 신호의 헤더를 구분하기 위해 키의 신호를 분석하여 적절하게 적용한 것이다.  그러니 신호원마다 저 부분은 튜닝이 필요하다.  그리고 이를 처리하는 프로세서에 따라서도 I/O 및 MCU 속도에 따라 튜닝이 필요할 것이다.
지금은 저 신호의 랜덤한 부분의 의미가 있는지 살펴보고 있다. 왜냐면, 키의 Close 버튼과 Open 버튼의 신호가 동일하게 나오고 있기 때문이다.  그럴리가 없지 않나?
오실로스코프와 SDR#으로 살펴보고 있으나 아직은 다를 것 같은 두 신호가 구분이 안되고 있다.

No comments:

Post a Comment