การตรวจจับสัญญาณอัลตราโซนิก


9

ฉันได้สร้างระบบ TDOA ที่ค่อนข้างง่ายซึ่งใช้สัญญาณอัลตราโซนิกที่ปล่อยออกมาจากลำโพงสองตัวเพื่อระบุตำแหน่งทางภูมิศาสตร์ (สัมพันธ์กับลำโพง) โทรศัพท์มือถือ สัญญาณทั้งสองจะถูกคั่นด้วยความถี่

ระบบมีข้อ จำกัด ดังต่อไปนี้:

  • สัญญาณจะต้องไม่ได้ยิน ด้วยเหตุนี้เราจึงยึดความถี่ที่มากกว่า 17 kHz บางคนยังคงได้ยินเช่นนั้น แต่ส่วนใหญ่ไม่สามารถทำได้
  • อัตราตัวอย่าง 44.1 kHz
  • โดยทั่วไปแล้วเพลงจะเล่นดังนั้นจึงมีสัญญาณรบกวนที่ความถี่ต่ำกว่ามาก
  • เราไม่สามารถควบคุมว่าลำโพงและไมโครโฟนทำงานที่ความถี่สูงได้ดีเพียงใดดังนั้นเราจึง จำกัด ความเร็วสูงสุดที่ 20 kHz

สัญญาณเฉพาะที่ฉันกำลังใช้คือ BPSK ปรับรหัสบาร์เกอร์ 13 บิตเนื่องจากคุณสมบัติปรับค่าความสัมพันธ์อัตโนมัติที่ดี ความสัมพันธ์อัตโนมัติดูเหมือนดังต่อไปนี้ - สัญญาณอัตโนมัติ

เมื่อฉันข้ามสัญญาณที่คาดหวังกับสัญญาณที่ได้รับในชีวิตจริงแม้ว่าสิ่งที่ฉันได้รับมักจะเป็นเช่นนี้ - ข้ามความสัมพันธ์ทั่วไป

สีฟ้าคือความสัมพันธ์ข้ามกับสัญญาณของลำโพง 1 และสีแดงคือความสัมพันธ์ข้ามกับสัญญาณของลำโพง 2 ปรากฏว่าเสียงก้องมีความสำคัญและน่าเสียดายที่มักจะแข็งแกร่งกว่าสัญญาณเส้นทางตรงเนื่องจากได้รับทิศทางของไมโครโฟน

ฉันพยายามตรวจจับสัญญาณที่ปรากฏเร็วที่สุดเท่าที่เป็นไปได้ซึ่งเป็นเส้นทางโดยตรง วิธีการนี้มีความอ่อนไหวต่อขีด จำกัด ที่ฉันใช้สำหรับการตัดสินใจเมื่อมีสัญญาณและดังนั้นจึงไม่แข็งแกร่งเลย

ฉันต้องการวิธีการที่แข็งแกร่งในการกำหนดเวลาถึง "จริง" ของสัญญาณ - เช่นเวลาที่มาถึงของสัญญาณเส้นทางตรง บางทีรูปแบบการประมาณค่าช่องสัญญาณและการถอดรหัสบางรูปแบบ? ถ้าเป็นเช่นนั้นจะทำงานอย่างไร

ข้อมูล / รหัส: ฉันต้องการให้ชัดเจนว่าฉันไม่ได้คาดหวังให้ทุกคนวิเคราะห์ข้อมูลหรือตรวจสอบรหัสของฉัน ฉันทำให้พวกเขาพร้อมใช้งานในกรณีที่คุณต้องการ ฉันสนใจในแนวความคิดเป็นส่วนใหญ่

ฉันสร้างสัญญาณที่ได้รับข้อมูลดิบและปรับสัญญาณที่คาดหวังไว้ให้ดาวน์โหลด ตัวอย่างทั้งหมดอยู่ที่ 44.1 kHz การเชื่อมโยงสัญญาณที่ได้รับกับสัญญาณที่คาดว่าจะสร้างสิ่งที่คล้ายกัน แต่ไม่เหมือนกันกับภาพด้านบนเพราะฉันย้ายสัญญาณที่ได้รับไปยังเบสแบนด์และ decimate ก่อนที่จะสัมพันธ์กับสัญญาณที่คาดหวัง

รับสัญญาณ

สัญญาณที่คาดหวัง # 1

สัญญาณที่คาดหวัง # 2

Matlab สคริปต์สคริปต์ Matlab มีทั้งสคริปต์สร้างสัญญาณ (genLocationSig.m) และสคริปต์รับ / ประมวลผลของฉัน (calcTimingOffset.m)


เป็นไปได้ไหมที่คุณจะแบ่งปันข้อมูล rx1, rx2 และแม่แบบของคุณ
Tarin Ziyaee

@ user4619 ฉันจะพยายามทำในเย็นวันนี้
Jim Clay

จริงอย่างรวดเร็ว: ผมได้รับข้อมูลของคุณและผลิตความคมชัดเพิ่ม STFT-PSD ฉันคาดเดา 5 blips ที่ด้านล่างนี้คือสัญญาณสองสัญญาณของคุณคั่นด้วยความถี่ ดูเหมือนว่าสัญญาณของคุณจะถูกส่ง ok แต่ฉันไม่เชื่อว่า echos หรือ multipath เป็นปัญหาของคุณ อย่างที่คุณเห็นมีสัญญาณรบกวนเป็นระยะ ๆ (บรอดแบนด์) จำนวนมากระหว่างพัลส์อย่างน้อยก็ในช่วงแรก หากคุณสลับซับซ้อนวงดนตรีลดลงตัวอย่างมีความสัมพันธ์กับลำดับบาร์เกอร์ของคุณและดูที่ซองจดหมายคุณเห็นอะไร
Tarin Ziyaee

1
ตกลงสองสามสิ่ง: ฉัน) คุณเคยคิดที่จะใช้เจี๊ยบแบบเชิงเส้นแทนที่จะเป็นรูปคลื่นที่เข้ารหัสเช่นนี้หรือไม่? คุณมีความยืดหยุ่นมากขึ้นกับพวกเขาและมีส่วนที่เคลื่อนไหวน้อยลงอย่างมากที่เกี่ยวข้อง II) ข้อ จำกัด แบนด์วิดท์ของคุณคืออะไรถ้ามี ตัวอย่างเช่นแม่แบบของคุณมีความกว้างประมาณ 1 KHz ด้วยเหตุผลใดก็ตาม คุณไปสูงขึ้นได้ไหม ด้วยเส้นเสียงร้องเจี๊ยก ๆ นี้เป็นเรื่องง่าย III) ในขณะที่ฉันสงสัยว่ามีสิ่งผิดปกติเกิดขึ้นกับ demodulation ของคุณการวางไว้จะช่วยได้ นั่นและมันจะช่วยให้ฉันมีปัญหาในการเขียน!
Tarin Ziyaee

1
เกี่ยวกับความคิดเห็นเล็กน้อยมีความเข้าใจผิด: ให้เราเรียก 1 ใน 13 รัฐของรหัสผู้ร้องว่า 'ชิป' ดังนั้นถ้าฉันส่งบิตฉันจะส่ง 13 ชิป ถ้าฉันส่ง 2 บิตฉันกำลังส่งชิป 26 ตัว ฯลฯ ดังนั้นคำถามของฉันคือคุณส่งสัญญาณกี่บิต ? ฉันสมมติว่าคุณกำลังส่งสัญญาณ 1 บิตดังนั้นฉันจึงบอกว่าคุณอาจพิจารณาส่งสัญญาณมากขึ้นเพื่อเพิ่มอัตราการเข้ารหัสของคุณ มันสมเหตุสมผลไหม
Tarin Ziyaee

คำตอบ:


3

นี่ไม่ใช่รหัสที่คุณกำลังมองหา ...

ดังที่ฉันได้กล่าวถึงในความคิดเห็นมีหลายวิธีในการทำ TDOA ที่แข็งแกร่ง (ความสัมพันธ์ข้ามกับ Linear Chirps, Chirps เอกซ์โปเนนเชียลและวิธีการชนิด CDMA) คุณได้สร้างระบบที่ใช้รหัส TDOA อยู่แล้ว (และนี่เป็นทางเลือกที่ดีในการใช้ linear-chirps หากคุณต้องการความแข็งแกร่งในการใช้ doppler) แต่คุณได้ จำกัด ตัวเองด้วยวิธีการสองอย่าง:

  • รหัสบาร์เกอร์ยาวสูงสุดเท่านั้น 13. อย่างไรก็ตามเราสามารถสร้างรหัสลำดับ PN ของความยาวตามอำเภอใจเพื่อให้ได้รับการเข้ารหัสมากขึ้น
  • การใช้งานเพียงอย่างเดียว 1บิตในชุดเกียร์ของคุณ เราสามารถเข้ารหัสคำนำทั้งหมดได้หลายบิตเพื่อส่งผ่านทำให้ได้รับความยืดหยุ่นเพิ่มขึ้นอีกหลายระดับ

ใช้ลำดับ PN:

ดังนั้นง่ายมากเปลี่ยนรหัสที่คุณใช้เพื่อปรับเปลี่ยนผู้ให้บริการของคุณโดย: ใช้ลำดับ PN-แทน PN รหัสที่สร้างขึ้นสามารถเป็น (เกือบ) ความยาวโดยพลการและสามารถสร้างขึ้นผ่านLFSRs (พวกเขาไปด้วยชื่อ 'whiteners' ในบางตำรา) นี่คือสามลำดับความยาว PN31, 61และ 127 ตามลำดับ

PN_31 = [ 1  1 -1 -1  1  1 -1  1 -1 -1  1 -1 -1 -1 -1  1 -1  1 -1  1  1  1 -1  1  1 -1 -1 -1  1  1  1];

PN_61 = [ 1  1  1 -1  1  1 -1  1 -1 -1  1 -1 -1  1  1  1 -1 -1 -1  1 -1  1  1  1  1 -1 -1  1 ...
     -1  1 -1 -1 -1  1  1 -1 -1 -1 -1  1 -1 -1 -1 -1 -1  1  1  1  1  1  1 -1  1 -1  1 -1 ...
      1  1 -1 -1  1  1 -1];

PN_127 = [-1     1     1     1    -1     1    -1    -1     1    -1     1     1    -1    -1    -1     1     1    -1     1     1     1     1    -1     1     1    -1     1    -1 ...
       1     1    -1     1     1    -1    -1     1    -1    -1     1    -1    -1    -1     1     1     1    -1    -1    -1    -1     1    -1     1     1     1     1     1 ...
      -1    -1     1    -1     1    -1     1     1     1    -1    -1     1     1    -1     1    -1    -1    -1     1    -1    -1     1     1     1     1    -1    -1    -1 ...
       1    -1     1    -1    -1    -1    -1     1     1    -1    -1    -1    -1    -1     1    -1    -1    -1    -1    -1    -1     1     1     1     1     1     1     1 ...
      -1     1    -1     1    -1     1    -1    -1     1     1    -1    -1     1     1     1];

ความสัมพันธ์อัตโนมัติวงกลมและเชิงเส้นของลำดับที่แสดงด้านล่าง พวกมันจะให้สเปกตรัมสีขาวอย่างชัดเจน แต่ยิ่งไปกว่านั้นเราไม่ได้ จำกัด อีกต่อไป13ความยาวของชิป ในความเป็นจริงรหัสสุดท้าย PN_127 ให้ผลตอบแทนการเข้ารหัส10 log[12713]10 เดซิเบลได้รับมากกว่าลำดับบาร์เกอร์ในขณะที่รับประกันสเปกตรัมสีขาวทั้งหมด

ป้อนคำอธิบายรูปภาพที่นี่

ส่งคำนำ:

ในแอปพลิเคชันเฉพาะของคุณคุณบอกว่าคุณส่งสัญญาณเพียงหนึ่งบิต คุณควรพยายามหลีกเลี่ยงสิ่งนี้หากคุณสามารถช่วยได้และส่งบิตให้มากที่สุดเท่าที่แอปพลิเคชันของคุณสามารถทำได้เพื่อรับการเข้ารหัสเพิ่มเติม

นี่คือสิ่งที่ทำกันทั่วไปในโปรโตคอลการสื่อสารเพื่อให้สอดคล้องกับจุดเริ่มต้นของแพ็กเก็ต คำนำ (รู้จัก) ถูกส่งโดยประกอบด้วยหลายบิต แต่ละบิตประกอบด้วยชิปจำนวนมาก (ในตัวอย่างของเรา31, 61, หรือ 127ชิปที่มีรหัส PN ด้านบน) สุดท้ายลำดับบิตเองอาจประกอบด้วยลำดับ PN อื่นหรือหากคุณต้องการคุณอาจส่งสัญญาณ13 บิตที่เขียนเป็นรูปแบบบาร์เกอร์โดยแต่ละบิตประกอบด้วยหนึ่งในลำดับ PN ข้างต้น


ลองใช้วิธีแก้ปัญหาเหล่านี้หนึ่งวิธีหรือทั้งสองอย่างแล้วนำผลลัพธ์ของคุณออกมา ฉันคาดหวังว่าจะมีการปรับปรุงที่จับต้องได้ซึ่งเราสามารถทำซ้ำได้ (การสร้างพัลส์, ลำดับ PN ที่แตกต่าง / ยาวกว่า, ฯลฯ )


1
ใช่ฉันวางแผนที่จะลองลำดับที่นานขึ้น ฉันไม่ทราบว่า autocorrelations แบบวงกลมของลำดับ pn นั้นดีมาก - น่าสนใจ น่าเสียดายสำหรับแอปพลิเคชันของฉันมันเป็นความสัมพันธ์เชิงเส้นตรงที่สำคัญ เกี่ยวกับคำนำ - ทั้งลำดับคือในทาง "คำนำ" ในแง่ที่ว่าสิ่งที่ทำให้มีประโยชน์ก็คือว่ามันเป็นประโยชน์ preamble รูปแบบข้อมูลที่รู้จัก สัญญาณทั้งหมดของฉันเป็นที่รู้จักมาก่อน
Jim Clay

ฉันตัดสินใจที่จะลดความยาวของสัญญาณลงเล็กน้อยโดยใช้คำสั่ง 10 lfsr (1,023 ชิป) เพื่อพิสูจน์หรือออกกฎว่าปัญหาสามารถแก้ไขได้โดยการเพิ่มความยาวของสัญญาณ ฉันจะโพสต์สิ่งที่เกิดขึ้น
Jim Clay

1
@JimClay ดีใจที่ได้ยินเช่นนั้น ฉันอยากรู้ว่า xcorrs / สัญญาณที่ได้รับนั้นเป็นอย่างไรในตอนนี้ แม้ว่ามันจะยอดเยี่ยม
Tarin Ziyaee

1
@endolith ใช่ doppler เป็นปัญหา ฉันจัดการสิ่งนั้นด้วยการเชื่อมโยงหลาย ๆ ครั้งเปลี่ยนความถี่ของสัญญาณที่ได้รับในแต่ละครั้งด้วยจำนวนที่แตกต่างกัน วิธีนี้ทำได้ง่ายถ้าคุณมีความสัมพันธ์ในโดเมนความถี่
Jim Clay

1
@endolith ขณะที่จิมเคลย์อธิบายวิธีการของเขาเขาเป็นพื้นคำนวณสิ่งที่เป็นที่รู้จักกันเป็นฟังก์ชั่นความคลุมเครือ นั่นคือผลลัพธ์ข้ามสัมพันธ์กับมิติที่สองที่สอดคล้องกับความถี่พื้นฐาน สิ่งนี้จะเปิดเผยจุดสูงสุดและด้วยเหตุนี้เนื่องจากเรารู้ความถี่ดั้งเดิมระดับของคนดู
Tarin Ziyaee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.