มีอะไรดีไปกว่า: การสุ่มตัวอย่างขึ้นหรือลง


13

ฉันต้องการเปรียบเทียบสัญญาณหรือเส้นโค้งสองสัญญาณ เส้นโค้งตัวอย่างที่ 30 Hz samplet เส้นโค้งที่ 2000 Hz

น่าเสียดายที่มีอัตราตัวอย่างแตกต่างกัน ตัวอย่างแรกคือตัวอย่างที่ 30 Hz, ครั้งที่สองที่ 2,000 Hz Matlab มีฟังก์ชั่น 'resample' และฉันคิดว่านี่จะทำให้การเปรียบเทียบง่ายขึ้นมาก

คำถามของฉันคือ:มันฉลาดกว่าที่จะลดตัวอย่างเส้นโค้งที่สองหรือเพิ่มตัวอย่างแรกหรือไม่

แก้ไข: ฉันทำตามที่ฉันบอก ในภาพด้านซ้ายเป็นส่วนโค้งเดิม เส้นโค้งทางด้านขวานั้นได้รับการติดตั้งใหม่ ด้านบนขวาเป็นตัวอย่างอัพด้านขวาล่างจะถูกสุ่มตัวอย่าง

ฉันรู้ว่าเส้นโค้งมีความยาวต่างกันเมื่อ resampled อย่างไรก็ตามสัญญาณที่สองจะถูกครอบตัดไปที่ความยาวสัญญาณแรก การเปรียบเทียบ


1
ฉันยกระดับคำถามของคุณ คุณคิดว่าฉลาดกว่าไหน

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

@ Stanley Pawlukiewicz ชัดเจนฉันสูญเสียยอดเขาเล็ก ๆ ทั้งหมดด้วยการลดตัวอย่าง ดังนั้นการอัปแซมปลิงอาจเป็นหนทางไป จากนั้นอีกครั้งฉันไม่ต้องการยอดเขาเล็ก ๆ ฉันยังคิดถึงการทำให้สัญญาณที่สองราบเรียบ ดังนั้นในกรณีของฉันมันอาจไม่สำคัญว่าถ้าฉันลองขึ้นหรือลง
NelsonOrange

ข้อเสนอแนะและคำตอบอีกต่อไปจำเป็น?
Laurent Duval

คำตอบ:


18

ในระยะสั้น:

  • upsampling : ไม่ / ไม่ควรข้อมูลหลวม (ถ้าทำอย่างชาญฉลาด) แล้วที่ปลอดภัย ,
  • ลดขนาด : อาจหลวมข้อมูล (ถ้าทำไม่ฉลาด) ยังเพิ่มเติมคอมพิวเตอร์ ที่มีประสิทธิภาพ

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

เหตุผลอาจเป็นไปได้สำหรับการปฏิบัติ DSP:

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

เมื่อคุณได้ใช้เวลาอยู่กับว่าคุณมีความพร้อมที่จะเริ่มต้นจากรอยขีดข่วนอีกครั้งและตัดสินใจว่าคุณควร downsample หรือไม่ด้วยวิธีการอื่น ๆในการเข้าถึงทั้งความปลอดภัยและ efficienty

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


14
การสุ่มตัวอย่างจะสูญเสียข้อมูลเกือบทุกครั้งแม้ว่าจะไม่ได้ทำในลักษณะที่ไม่ฉลาด แต่การสูญเสียข้อมูลจริงอาจจะเป็นสิ่งที่ฉลาดดังนั้น ...
leftaroundabout

@leftaroundabout ในกรณีที่ขอบการสุ่มตัวอย่างสามารถไม่สูญเสียข้อมูล?
วิลเล็ม

2
@leftaroundabout ฉันไม่เห็นด้วย การสูญเสียข้อมูลนั้นแย่กว่าการเก็บไว้เสมอ สิ่งที่ฉลาดเพียงอย่างเดียวคือการรู้ว่าข้อมูลใดที่ควรทิ้งเพื่อการเป็นตัวแทนของสัญญาณที่ดีกว่าไม่ใช่การสูญเสียข้อมูล
AlexTP

5
@ วิลเล็ม: ในกรณีที่เห็นได้ชัดมากสัญญาณ DC สามารถถูกสุ่มตัวอย่างเป็นตัวอย่างเดียว โดยทั่วไปสัญญาณใด ๆ ที่ไม่มีส่วนประกอบที่สูงกว่าขีด จำกัด Nyquist (ใหม่) สามารถลดตัวอย่างได้อย่างปลอดภัย
MSalters

1
เป็นที่ถกเถียงกันอยู่ว่าไม่มีข้อมูลใดหายไปจากสัญญาณ DC เป็นสัญญาณตัวอย่าง 1 เนื่องจากคุณสามารถแปลงกลับเป็นสัญญาณที่เหมือนกันกับสัญญาณดั้งเดิมจาก 1 ตัวอย่าง เป็นที่ถกเถียงกันอยู่ว่าข้อมูลหายไปเพราะถ้าคุณให้สัญญาณตัวอย่าง 1 สัญญาณแก่บุคคลโดยไม่มีข้อมูลเพิ่มเติมและถามว่า "สิ่งนี้แสดงถึงสัญญาณ DC หรือไม่?" คำตอบจะเป็น "ไม่ทราบข้อมูลไม่เพียงพอกับตัวอย่างหนึ่ง"
Coward ไม่ประสงค์ออกนาม

7

หากคุณใช้ฟังก์ชั่นเช่นพล็อต (x, y) วิธีที่ง่ายที่สุดในการแสดงบนกราฟเดียวกันคือการไม่สุ่มตัวอย่างใด ๆ เลย แต่เพียงกรอก x เวกเตอร์แต่ละอันด้วยค่าที่เหมาะสมสำหรับสัญญาณแต่ละอัน คุณต้องการบนจอแสดงผล

คุณยังสามารถตั้งค่าพล็อตให้มีแกน x สองแกนที่แตกต่างกัน (หนึ่งอันสำหรับแต่ละโค้ง) ที่มีเลเบลและตำนานต่างกันหากคุณต้องการ

ตอนนี้เกี่ยวกับการสุ่มตัวอย่างใหม่ ฉันจะใช้ Fs สำหรับความถี่การสุ่มตัวอย่าง

สัญญาณตัวอย่างไม่สามารถมีส่วนประกอบความถี่ด้านบน Fs / 2 มันเป็น bandlimited

นอกจากนี้สัญญาณที่มีเพียงส่วนประกอบความถี่สูงสุดถึงความถี่ F สามารถแสดงอย่างแม่นยำในอัตราการสุ่มตัวอย่าง 2F

โปรดทราบว่าการเป็นตัวแทน "ถูกต้อง" นี้เป็นเชิงคณิตศาสตร์ไม่ใช่ภาพ เพื่อให้ได้ภาพที่ดีการมีตัวอย่าง 5-10 ช่วงต่อรอบ (ดังนั้นจึงไม่มีส่วนประกอบของความถี่ที่เด่นกว่า Fs / 10 หรือดังนั้น) ช่วยให้สมองเชื่อมต่อจุดต่างๆ ดูรูปนี้: สัญญาณเดียวกัน, เส้นโค้งด้านล่างมีอัตราตัวอย่างต่ำกว่า, ไม่มีการสูญเสียข้อมูลเนื่องจากความถี่ต่ำกว่า Fs / 2 แต่มันก็ดูเหมือนว่าไร้สาระ

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

มันเป็นสัญญาณเดียวกันแน่นอน หากคุณสุ่มตัวอย่าง (สร้างใหม่) ตัวกรองที่ด้านล่างด้วยตัวกรอง sinc คุณจะได้ตัวกรองที่ด้านบน

การทำลาย (การสุ่มตัวอย่าง) จะพับส่วนประกอบความถี่ทั้งหมดที่สูงกว่า Fs / 2 ใหม่กลับเป็นสัญญาณ นี่คือเหตุผลที่เรามักจะใส่ตัวกรอง lowpass ที่สูงชันต่อหน้าตัวถอดรหัส ตัวอย่างเช่นหากต้องการ downsample จาก Fs = 2000 Hz ลงไปที่ Fs = 30 Hz อันดับแรกเราจะใช้ lowpass ลำดับสูงที่มี cutoff ต่ำกว่า 15 เฮิร์ตซ์และกำจัดทิ้งเท่านั้น

อย่างไรก็ตามตัวกรองนี้จะแนะนำปัญหาการตอบสนองชั่วคราวมันจะมีเฟสการหน่วงเวลาที่ความถี่บางความถี่และอาจเปลี่ยนมุมมองภาพของสัญญาณของคุณซึ่งคุณไม่ต้องการที่จะทำถ้าความคิดนั้นคือการเปรียบเทียบพวกเขาด้วยสายตา กฎข้างต้นใช้ไม่ตัวอย่างมากเกินไปเก็บ Fs ไว้ 5-10 เท่าของความถี่สูงสุดที่น่าสนใจหากคุณต้องการให้รูปร่างสัญญาณมีความหมายอะไรบางอย่าง นี่คือเหตุผลที่ขอบเขต 200MHz ต้องการตัวอย่างที่ 1-2 Gsps

คำถามของฉันคือ: มันฉลาดกว่าที่จะลดตัวอย่างเส้นโค้งที่สองหรือเพิ่มตัวอย่างแรก

ดังที่ได้กล่าวไว้ข้างต้นสิ่งที่ฉลาดที่สุดคือการไม่ยุ่งกับข้อมูลเลยเพียงแค่นำเสนอแกน x แต่ละแกนในกราฟเดียวกัน

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

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

คำนึงถึงเกณฑ์ Nyquist และอย่าเลือกอัตราตัวอย่างต่ำเกินไปหรือคุณจะสูญเสียความแม่นยำของรูปคลื่นในสัญญาณ Fs สูงคุณจะได้รับการเปลี่ยนเฟสเนื่องจากตัวกรองสัญญาณต่ำ ฯลฯ หรือหากคุณรู้เนื้อหาที่มีความถี่สูง เล็กมากคุณสามารถทำการเลือกอย่างชาญฉลาด ผม

หากคุณใช้การแก้ไขเชิงเส้นเพื่อทำให้พิกัด "x" ตรงกันโปรดจำไว้ว่ามันต้องการค่า Fs ที่ค่อนข้างสูง การแก้ไขจะทำงานกับสัญญาณสูงสุดในพล็อตด้านบนมันจะไม่ทำงานกับสัญญาณที่อยู่ด้านล่าง เหมือนกันถ้าคุณสนใจ min, max และเช่นนั้น

และ ... โปรดทราบว่าการ oversampling / upsampling จะยุ่งกับการตอบสนองชั่วคราวอย่างน้อยก็ด้วยสายตา ตัวอย่างเช่นหากคุณทำเกินขั้นตอนหนึ่งคุณจะได้รับเสียงเรียกเข้าจำนวนมากเนื่องจากการตอบสนองของตัวกรองแรงกระตุ้น sinc นี่เป็นเพราะคุณได้รับสัญญาณแบบไม่ จำกัด แบนด์และขั้นตอนที่ดีกับมุมสี่เหลี่ยมจริง ๆ แล้วมีแบนด์วิดธ์ไม่ จำกัด

ฉันจะยกตัวอย่างคลื่นสี่เหลี่ยม ลองคิดถึงสัญญาณตัวอย่างดั้งเดิม: 0 0 0 1 1 1 0 0 0 1 1 1 ... สมองของคุณเห็นคลื่นสี่เหลี่ยม

แต่ความจริงก็คือคุณควรนึกภาพตัวอย่างแต่ละจุดเป็นจุดและไม่มีสิ่งใดระหว่างจุด เป็นจุดรวมของการสุ่มตัวอย่างทั้งหมด ไม่มีอะไรระหว่างตัวอย่าง ดังนั้นเมื่อคลื่นสี่เหลี่ยมจัตุรัสนี้เกินขนาดโดยใช้การประมาณค่าแบบ Sinc ... มันดูตลกดี

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

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

อย่างไรก็ตาม. อย่างที่คุณเห็น ... แค่ยุ่งกับแกน x มันง่ายกว่ามาก


4

การสุ่มตัวอย่างสูญเสียข้อมูล Upsampling นั้นจะไม่สูญเสียเมื่อตัวประกอบเป็นจำนวนเต็ม (คุณต้องจำปัจจัย) แต่ข้อมูลบางอย่างจะหายไปเมื่อตัวประกอบไม่ใช่จำนวนเต็ม การอัปแซมปลิงในทางทฤษฎีอาจสูญเสียข้อมูลมากกว่าการลดขนาดลงสำหรับปัจจัยการสุ่มซ้ำที่เฉพาะเจาะจงมาก

คุณควรใช้อันไหน ขึ้นอยู่กับระดับความมั่นใจที่คุณต้องการ

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

หากคุณต้องการกำหนดขอบเขตความแม่นยำของการคำนวณของคุณ: เป็นไปได้ แต่ฉันไม่สามารถช่วยคุณได้


+1 เนื่องจากคุณสามารถบีบข้อมูลที่สำคัญสองสามข้อได้อย่างรวดเร็ว
dsp_user

3

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

ที่จริงแล้วถ้าคุณแก้ไขคำถามของคุณด้วยผลลัพธ์จากทั้งสองวิธีฉันจะยกระดับคำถามของคุณและคนอื่น ๆ จะพบว่ามันน่าสนใจและเป็นไปได้มากที่สุดที่จะช่วยในการหา "เปรียบเทียบ"


1

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

https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.