2017-03-02 1 views
0

배열은 파형입니다. 각 바이트가 1 샘플 일 때 이진 배열을 int8으로 쉽게 변환 할 수 있습니다. 12bit로 작업 할 때 각 샘플에 대해 2byte (워드 모드)를 전송하도록 악기를 설정할 수 있습니다. 나는 웹에서 2bytes/sample 바이너리 배열을 int16 벡터로 변환하려고했지만 지금까지는 그렇게 할 수 없었다. 이 사용이진 배열을 int16으로 변환합니다.

data = numpy.fromstring(dataword, dtype=numpy.int8) 

동일한 샘플 당 1 바이트와 함께 작동 압축을 풀고

data = numpy.array(unpack('%sb' %len(dataword) ,dataword)) 

는 2 바이트/샘플로 작업하는 방법을 알아낼 수 없습니다. 감사

대신 다음과 같이 struct.unpack를 사용
+0

'dataword '는 어디에서 왔습니까? 어떻게 만들었 니? – heltonbiker

+2

'8'을 '16'으로 변경해 보지 않으셨습니까? 'np.fromstring (dataword, dtype = np.int16)'이 나를 위해 일한다 – Eric

+0

또한,'struct.unpack'에서'h' (signed short)를 사용하지 않아야합니까? – heltonbiker

답변

0

:

data = numpy.array(unpack('%sb' %len(dataword) ,dataword)) 

당신은 다음과 같이 사용한다 :

data = numpy.array(unpack('%sh' % len(dataword)/struct.calcsize('h'), dataword)) 
#----------------------------^ notice the 'h', signed short, 16 bits 

당신이 읽고있는 숫자 크기 len(dataword)를 분할해야하며,이 경우 두 바이트. calcsize을 사용하는 것이 좋습니다. 그러나 이미 알고 있다면 간단히 2로 나누십시오.

+0

예 구문 오류를 방지하려면 괄호가 필요합니다. data = numpy.array ('% sh'% (len (dataword)/2) , 데이터 워드)) 감사합니다,이 잘 작동하고있다 –

+0

니스! 이 답변으로 문제가 해결되면 답변을 수락 할 수 있습니다. : D : D : D 도와 줘서 기쁩니다! – heltonbiker

관련 문제