소리로 HelloWorld 보내기

1. 소리로 "Hello World"문자열 보내기

    • 모뎀의 원리: 음성을 전달하는 가청주파수 대역의 아날로그 신호를 이용하여 디지털 신호를 전송하는 것임

    • 핵심원리

      • 디지털 비트 <-> 아날로그 소리(주파수 변조)

      • 주파수 인식방법: 푸리에 변환

      • 비트 및 바이트 덩어리 (chunk) 처리 후 알파벳 디코딩

      • 비트 오류 탐지 및 복구: Reed Solomon Code

    • Github Pied Piper프로젝트이용하여 안드로이드 단말기에서 리눅스단말기로 데이터를 소리로 보내보기

      • 샘플링: 100ms

      • 소리 톤 Chunk 크기: 4비트

        • 시작 핸드쉐이크 : 8192 Hz

        • 끝 핸드쉐이크: 8704 Hz

      • 전송 주파수 freq = start + (i * step) (4비트 청크 전송시 start = 1024 Hz, step = 256 Hz)

      • 비트 오류 복구: Reed Solomon coding (4 byte)

      • 클라이언트: Reed Solomon 인코딩 계산 --> 시작 핸드쉐이크 전송 --> 페이로드를 청크 크기로 나누고 해당 주파수로 변조 --> 끝 핸드쉐이크 전송

      • 서버: 2배 샘플링 (절반 인터벌) --> FFT 계산 후 주파수 계산 --> 시작 핸드쉐이크 이면 --> 주파수 데이터 수집 --> 끝 핸드쉐이크이면 수집 끝 --> 데이터 디코딩

      • 성능: 톤 당 8비트 전송, 초당 10개의 톤. 즉, 초당 10 바이트 전송

2. Linux에서 아날로그 소리 데이터를 디지털로 변환하기

    • python3-alsa 패키지를 설치

    • python recordtest.py pcm.out # 녹음 pcm 1채널 44100 Hz 16LE

    • python playbacktest.py pcm.out # 파일 재생

    • 또는 aplay -c 1 -r 44100 -f S16_LE pcm.out # 재생

  • "pcm.out" 파일에 녹음된 pcm 파일을 읽어서 그래프로 그려봅시다.

pcm-visualization.pdf