2011-10-18 4 views
2

나는 데이터 스트림을 지속적으로 수집하여 UDP를 통해 실시간으로 다른 컴퓨터로 보내는 작은 C 프로그램을 가지고있다. 제가 원래 의도했던 기본 틀이 마련되었습니다. 또한, 나는 획득중인 데이터를 실시간으로 시각화하고 싶습니다. 이를 위해 필자는 파이썬과 다양한 플로팅 라이브러리를 사용할 것을 고려하고있었습니다. 내 질문은 파이썬이 본질적으로 내 C 프로그램의 순환 버퍼에 처음 액세스하는 것을 허용하는 것이 얼마나 어렵 냐는 것이다. 구체성을 위해이 버퍼에 1024 개의 샘플이 있다고 가정 해 봅시다. "파이썬에게 동적 인 C 배열을 지속적으로 들여다 보는 것"이라는 생각은 합리적이고 가능할 수도 있습니다. 그렇지 않은 경우 어떤 종류의 플로팅 옵션이이 문제에 가장 적합합니까?python, plotting and c api

감사합니다.

답변

0

가능하지만 너무 간단하지는 않습니다.

API에 대해 알리고 구현을 살펴볼 수 있습니다.

이렇게하면 원시 배열을 들여다 볼 수있을뿐만 아니라 올바른 순서와 길이로 다시 어셈블 할 수도 있습니다 (순환 버퍼 인 경우). 그럼에도 불구하고 데이터를 복사해야하므로 매우 편리 할 수 ​​있습니다.

1

표준 socket 모듈을 사용하면 UDP 포트를 쉽게 청취 할 수 있습니다. Examples을 사용할 수 있습니다.

첫 번째 단계로 데이터를 추가하는 데 목록이 최적화되므로 간단한 파이썬 목록으로 이동할 수 있습니다. 첫 번째 요소를 제거하는 데 더 많은 시간이 걸리기 때문에 때때로이 작업을 수시로 수행하고 목록의 마지막 1024 개 요소 만 그려야합니다.

플로팅은 유명한 Matplotlib 플로팅 라이브러리로 편리하게 수행 할 수 있습니다 : matplotlib.pyplot.plot(data_list). 실시간을 원하기 때문에 animation examples이 유용 할 수 있습니다.

당신은 데이터 수집 속도를 최적화해야하는 경우 (유명) NumPy 배열 조작 라이브러리가 직접 numpy.frombuffer()으로, 숫자의 배열 (하기 matplotlib는 배열을 플롯 할 수 있습니다)로 스트림로부터 데이터를 해석 할 수 있습니다 function.

+0

감사합니다. 실제로 C : [DISLIN] (http://www.dislin.de/)에서 직접 호출 할 수있는 매우 간단하지만 강력한 플로팅 라이브러리를 발견했습니다. – dataman

+0

이것은 솔루션처럼 들립니다. 이 질문에 답을 쓰고 대답으로 표시하려고 할 수 있습니다. :) – EOL