Python/Numpy

[Numpy & GNU Radio] Python Numpy를 이용한 Binaray file 입출력

기술블로그. 2023. 2. 2. 19:18

최근 GNU Radio를 이용한 통신 프로젝트를 진행하기 위해 간단한 BPSK 변조 신호를 생성해 본 후 

Constellation Modulation 된 Binary File을 Python의 Numpy를 통해 읽고 쓰는 방법을 알아보겠습니다.

 

1. Binary File 읽기

1-1. GNU Radio를 이용해 BPSK 변조 된 File 신호 저장

BPSK 변조 된 신호 생성 Flow

우선 GNU Radio를 통해 간단한 BPSK 변조 신호를 만듭니다.

GNU Radio는 기본적으로 C++언어를 기본으로 구축하고 있어 File Sink라는 Block을 통해 Binary File 형식으로 데이터를 저장하게 됩니다.

(이 때 저장되는 파일의 확장자는 원하는 방식으로 할 수 있으나 이번 글에서는 확장자를 없이 저장하겠습니다)

 

1-2. Numpy를 이용해 Binary File 읽기

행렬 저장을 위한 Npy 파일 형태가 아닌 C언어 형태의 이진파일을 읽고 쓸 수 있는 것이 Numpy 모듈입니다.

Binary File을 처리하기 위해 numpy.fromfile을 이용하여 저장된 Binary file인 bpsk를 읽을 수 있습니다.

import numpy as np

binary_data = np.fromfile(file="./bpsk", dtype="complex64")
print(binary_data)

BPSK Modulation 된 Binary Data

 

2. Binary File 저장

h5 File로 메타데이터와 함께 Signal Data를 저장할 경우 

따로 전처리 블록을 구성하였을 때 GNU Radio h5 File을 읽어올 수 없는 경우가 발생할 수 있습니다.

이에따라 h5 File로부터 Signal Data만 Binary data로 따로 저장하기 위해 Numpy의 tofile을 사용하였습니다.

import numpy as np
import h5py 

h5_file = h5py.File(file="./bpsk.h5", mode="r")
h5_signal = np.array(h5_file['signal'])

with open('./h5_signal_file', 'wb') as f:
	h5_signal.tofile(f, format='complex64')

return :

 

 

지금까지 GNU Radio를 이용하여 Binary 신호 파일과 h5 신호 파일을 만든 후

Numpy module을 이용해 Binary 데이터를 읽고 쓰는 것까지 알아보았습니다.

 

감사합니다.

:)