>

여기에 RAM에 문제가 있습니다. 플롯하려는 데이터를 저장할 수 없습니다. HD 공간이 충분합니다. 내 데이터 세트의 "그림자"를 피할 수있는 해결책이 있습니까?

구체적으로 디지털 신호 처리를 다루고 있으며 높은 샘플 속도를 사용해야합니다. 내 프레임 워크 (GNU Radio)는 값을 바이너리로 저장합니다 (너무 많은 디스크 공간 사용을 방지하기 위해). 포장을 풉니 다. 그 후에 플롯을해야합니다. 확대 /축소 가능한 대화 형 플롯이 필요합니다. 그리고 그것은 문제입니다.

이것이나 더 큰 데이터 세트를 처리 할 수있는 다른 소프트웨어 /프로그래밍 언어 (R 등)에 대한 최적화 가능성이 있습니까? 사실 저는 제 플롯에 더 많은 데이터를 원합니다. 하지만 다른 소프트웨어에 대한 경험이 없습니다. 다음과 유사한 접근 방식으로 GNUplot이 실패합니다. 나는 R (제트기)을 모른다.

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import struct
"""
plots a cfile
cfile -IEEE single-precision (4-byte) floats, IQ pairs, binary
txt -index,in-phase,quadrature in plaintext
note: directly plotting with numpy results into shadowed functions
"""
# unpacking the cfile dataset
def unpack_set(input_filename, output_filename):
    index= 0   # index of the samples
    output_filename= open(output_filename, 'wb')
    with open(input_filename, "rb") as f:
        byte= f.read(4)    # read 1. column of the vector
        while byte != "":
        # stored Bit Values
            floati= struct.unpack('f', byte)   # write value of 1. column to a variable
            byte= f.read(4)            # read 2. column of the vector
            floatq= struct.unpack('f', byte)   # write value of 2. column to a variable
            byte= f.read(4)            # next row of the vector and read 1. column
            # delimeter format for matplotlib
            lines= ["%d," % index, format(floati), ",",  format(floatq), "\n"]
            output_filename.writelines(lines)
            index= index + 1
    output_filename.close
    return output_filename.name
# reformats output (precision configuration here)
def format(value):
    return "%.8f" % value
# start
def main():
    # specify path
    unpacked_file= unpack_set("test01.cfile", "test01.txt")
    # pass file reference to matplotlib
    fname= str(unpacked_file)
    plt.plotfile(fname, cols=(0,1)) # index vs. in-phase
    # optional
    # plt.axes([0, 0.5, 0, 100000]) # for 100k samples
    plt.grid(True)
    plt.title("Signal-Diagram")
    plt.xlabel("Sample")
    plt.ylabel("In-Phase")
    plt.show();
if __name__== "__main__":
    main()

plt.swap_on_disk ()와 같은 것이 내 SSD에있는 항목을 캐시 할 수 있습니다.)

"그림자 함수에 numpy 결과를 직접 플로팅"한다는 것은 무엇을 의미합니까?

jfs2021-04-17 08:49:54

"기가 바이트"의 데이터를 얻는 방법을 이해하지 못합니다. 2,000 만 x (3 x (4 바이트))= 240MB, 맞습니까? 그리고 @EOL은 완전히 옳습니다. 완벽하게 좋은 바이너리 데이터를 텍스트 형식으로 변환하는 것은 시간과 I /O를 완전히 낭비하는 것입니다. numpy를 사용하여 바이너리에 직접 액세스하십시오.

Jonathan Dursi2021-04-17 08:49:54

이상 해요, 당신이 플로트와 플로트를 어디에도 보관하고있는 것을 보지 않습니까? 아니면 'lines'로 시작하는 줄이 while 루프 안에 있다는 뜻입니까?

K.-Michael Aye2021-04-17 08:49:54

편집을위한 6 개의 비 공백 문자 규칙 때문에 편집 할 수 없다는 것이 흥미 롭습니다. 때로는 code가 완전히 작동하지 않게 만드는 데 4 개의 공백 만 있으면됩니다 ...;)

K.-Michael Aye2021-04-17 08:49:54
  • 이전 compilation - VB6 컴파일 된 실행 파일의 크기를 줄이는 방법은 무엇입니까?
  • 다음 macos - travis ci로 캐시 브루 빌드