2016-09-14 4 views
-1

저는 서버로 작동하는 2 개의 나무 딸기 파이와 클라이언트 인 랩톱으로 프로젝트를하고 있습니다. 각 라즈베리 및 USB 마이크에 연결하고 오디오 스트리밍 을 포팅 한 Portaudio Library im을 사용하여 tcp/ip 연결을 통해 랩톱으로 다시 보냅니다.지연 측정 및 라즈베리 사이의 동기화 pi

이 프로젝트의 범위는 음원을 찾는 것이며이 방법은 다음과 같이 작동합니다. PC 랩톱과 동일한 LAN에 연결된 인 각 라즈베리에서 .c 파일을 실행합니다. 이 프로그램이 두 라스베리 베리에서 실행될 때 나는 "클라이언트와의 연결 대기 중"메시지를 가지고 있습니다. 다음해야 할 일은 단지 라스베리 과 레코드를 시작하는 matlab 파일을 실행하는 것입니다. 내가 좋아하는 간단한 조건을 통해 같은 시간에 시작하는 나무 딸기를 동기화 관리해야

do 
{ 
    sleep(0.01); 
    j = read(newsockfd, &start,1); 
} while (j==0); 

너무 좋아 모두 나무 딸기 녹화를 시작해야 전에 내가 초기화 명령을 완료하기 위해 그들을 일시 정지 등 다음 그냥 내 MATLAB 프로그램 T1 통해 문자 "= 'K'를 시작"전송 (T2)가 TCP 연결을 모두 라스베리가 PortAudio 스트림을 열고 recordCallBack 함수 호출이 시점에서

start = 'k'; 
fwrite (t1, k); 
fwrite (t2, k); 

이다. 응용 프로그램을 실행하고 박수 치면 그 사이에 0.2 초 지연이 발생하여 에 60m의 오류가 발생합니다. 나는 또한 fwrite 함수의 실행 시간을 점검했으나 은 현실로부터 여전히 결과로 이어질 약 0.05 초를 절약 할 수있다. 이 프로젝트는 TDOA 측정을 기반으로하므로 정확도가 < 1m가되도록하려면 0.01 초 미만의 지연이 필요합니다.

리눅스에 아주 정확한 타이머가 있다고 들었는데, 아마도 그걸 .c 파일의 함수 내부에서 시간을 측정하는 데 사용할 수 있다고 생각했습니다. 어쨌든 에서 지연을 측정 할 수있는 아이디어가 있다면 오디오 스트림이 마이크에서 열리는 지점까지 matlab에서 문자 'k'를 보내거나 방법 2 리눅스 서버를 동기화 할 수있는 방법 도와주세요.

추신 : 모두 라즈베리이 PI 및 처리 및 전송 속도 그것은 흥미로운 프로젝트처럼 보이는 같은

답변

1

시계를 동기화하는 방법에는 여러 가지가 있습니다. 시스템 레벨 또는 응용 프로그램 수준 일 수 있습니다.

이미 작업을 수행 할 도구가 있기 때문에 시스템 수준이 더 쉬워지는 경향이 있습니다. Emilien, since it is quite complicated to make it work에서 언급했듯이이 단계에서 PTP를하는 것은 좋지 않습니다. 대신 나는 당신에게 보통 setup via the same NTP network on all machines을 사용할 것을 권합니다. NTP 설정의

예 : # ntpdate -q 0.rhel.pool.ntp.org

  • 로 서버가 실행중인 경우

    1. 쿼리, 설치와 해당 지역의 시계는 # ntpdate 0.rhel.pool.ntp.org 1.rhel.pool.ntp.org

    OBS : # 루트 사용자를 의미합니다 (대개 sudo과 함께 명령을 실행해야 함), $은 일반 사용자를 의미합니다.

    $ date +%k:%M:%S.%N으로 모든 시스템 시간을 확인하십시오. 그러면 시계가 나노초 해상도로 되돌아갑니다.

    원하는 결과를 얻지 못하면 PTP를 시도하거나 마스터가 각 독립 시계를 표준화 할 수있는 마스터에 연결할 때 모든 장치를 동기화하십시오. 여기에 대해서는 자세히 설명하지 않겠습니다. 그런 다음

    당신은 당신이 전에 언급처럼 (혹은 UDP/IP가 대기 시간을 절감하기 위해) TCP/IP를 통해 오디오 데이터를 전송하지만, 항상 clock_gettime() 기능을 사용하여 오디오 프레임에 관련된 슬레이브 머신의 타임 스탬프를 보낼 수 있습니다 CLOCK_REALTIMEclk_id 인수로 사용하십시오.

  • 2

    해야하므로 UTP 케이블을 통해 연결되어하지만 난 당신이 문제를 조금 과소 평가 생각합니다. 첫 번째 문제는 synchonize 두 개의 센서가 필요하다는 것입니다. 사운드의 속도를 감안할 때 약 1m의 정확도를 원하면 약 1ms의 정확도로 동기화해야합니다. 네트워크 시간 프로토콜을 사용해 볼 수도 있지만 로컬 네트워크의 마스터를 사용하더라도이 정확도에 도달 할 수 있는지 확신 할 수 없습니다. GPS 신호를 수신 할 수있는 경우 PTP (이더넷을 통한) 또는 GPS를 사용하면 더 나은 동기화를 얻을 수 있습니다.

    그런 다음이를 달성 할 수 있다면 첫 번째 단계는 두 딸기에 파이를 몇 개 녹음하고, 둘 다 녹음을 시작할 때 타임 스탬프를 저장하고 실제로 중요한 것을 얻을 수 있는지 확인하는 것입니다. 어쩌면 마이크로 컨트롤러와 실시간 운영 체제를 사용해야 할 수도 있습니다!

    관련 문제