Hilbert แปลงร่างเพื่อคำนวณซองจดหมายสัญญาณหรือไม่


27

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

ฉันสนใจเป็นพิเศษในการค้นหาวิธีคำนวณซองจดหมายสำหรับใช้ในการบีบอัดช่วงไดนามิก (เช่น "ลดระดับเสียง" ของส่วนที่ดังของสัญญาณเสียงโดยอัตโนมัติ)


ตอนนี้คุณมีรหัสที่ใช้งานได้ไหม ไม่ว่าจะเป็นกับ Hilbert transsform หรือวิธีอื่น
Basj

คำตอบ:


18

การแปลง Hilbert ใช้เพื่อคำนวณสัญญาณ "การวิเคราะห์" ดูตัวอย่างhttp://en.wikipedia.org/wiki/Analytic_signal หากสัญญาณของคุณเป็นคลื่นไซน์หรือคลื่นไซน์ที่มีการมอดูเลตขนาดของสัญญาณวิเคราะห์นั้นจะมีลักษณะเหมือนซองจดหมาย อย่างไรก็ตามการคำนวณการแปลงของฮิลแบร์ตนั้นไม่สำคัญ ในทางเทคนิคแล้วมันต้องใช้ตัวกรอง FIR ที่ไม่ใช่สาเหตุที่มีความยาวมากดังนั้นจึงต้องใช้ MIPS หน่วยความจำและเวลาแฝงในปริมาณที่พอสมควร

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

ตัวเลือกที่ดีกว่าคือการใช้ตัวกรอง A-weighted ( http://en.wikipedia.org/wiki/A-weighting ) จากนั้นทำการตรวจจับ RMS ที่มีการสูญเสียหรือการสูญเสียสูงสุด สิ่งนี้จะสัมพันธ์กันค่อนข้างดีกับการรับรู้เสียงดังเมื่อเวลาผ่านไปและค่อนข้างถูกเมื่อต้องทำ


ทั้งสองวิธีนี้ไม่ใช่สาเหตุ แต่เป็นวิธี FFT (ละครึ่งหนึ่งของสเปกตรัมและ IFFT) โดยปกติแล้วจะเร็วกว่าตัวกรอง FIR หรือไม่
endolith

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

4

คุณสามารถใช้การแปลง Hilbert เพื่อคำนวณซองจดหมายด้วยวิธีต่อไปนี้ (ฉันจะเขียนมันเป็นรหัส MATLAB):

envelope = abs(hilbert(yourTimeDomainSignal));

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

หากคุณเพิ่มสัญญาณของคุณ (คลื่นไซน์) เพื่อjคูณสัญญาณ hilberted ของคุณ (-cosine wave) คุณจะได้รับ:

sin(wt) - j.*cos(wt)

ซึ่งเกิดขึ้นเป็น e ^ (j * (wt - pi / 2))

ดังนั้นเมื่อคุณรับค่าสัมบูรณ์ของสิ่งนี้คุณจะได้ 1 ซึ่งเป็นซองจดหมายของคุณ (สำหรับกรณีนี้)


อ๊ะ! ลืมเครื่องหมายลบ - ขอบคุณ Dilip คงที่แล้ว
Spacey

2

ฉันรู้วิธีแยกอย่างน้อยสองวิธีในการดึงซองแอมพลิจูดจากสัญญาณ

สมการที่สำคัญคือ:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

วิธีที่ง่ายที่สุดที่ฉันทราบคือการได้รับ Q คือการย่อยสลาย S (t) ลงในพวงขององค์ประกอบไซน์โดยใช้ FFT หมุนแต่ละส่วนประกอบหนึ่งส่วนสี่หันซ้ายเป็นทวนเข็มนาฬิกา (จำไว้ว่าแต่ละองค์ประกอบจะเป็นจำนวนเชิงซ้อน + iy -> -y + ix) จากนั้นรวมอีกครั้ง

วิธีการนี้ใช้งานได้ดีแม้ว่าต้องใช้การปรับแต่งเล็กน้อย (ฉันยังไม่เข้าใจคณิตศาสตร์ดีพอที่จะอธิบายวิธีนี้ได้ดีกว่า)

มีคำศัพท์สองสามคำที่นี่คือ 'Hilbert แปรรูป' และ 'สัญญาณการวิเคราะห์'

ฉันหลีกเลี่ยงการใช้คำเหล่านี้เพราะฉันค่อนข้างมั่นใจว่าฉันได้เห็นความคลุมเครือในการใช้งานของพวกเขา

เอกสารหนึ่งอธิบายสัญญาณการวิเคราะห์ (เชิงซ้อน) ของสัญญาณจริงดั้งเดิม f (t) เป็น:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

ในกรณีที่ซองแอมพลิจูดเป็นเพียง | Analytic (f (t)) | ซึ่งนำเรากลับไปที่สมการพีทาโกรัสดั้งเดิม

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


1
นี่เป็นวิธีที่ต่างกันในการคำนวณสิ่งเดียวกัน (ขนาดของสัญญาณการวิเคราะห์ผ่านการแปลงของฮิลแบร์ต) เทคนิค "ขั้นสูง" คือการทำ FFT เพียงทำศูนย์ความถี่เชิงลบออกแล้วทำ FFT ผกผัน ส่วนที่แท้จริงคือสัญญาณดั้งเดิมและส่วนจินตภาพที่ Hilbert แปลงร่าง มารอยู่ในรายละเอียดเช่นการทำกรอบหน้าต่างซ้อนทับและประมวลผลเชิงเส้นกับวงกลม
Hilmar

2
เป็นเรื่องน่าประหลาดใจที่เห็นว่าบางคนเห็นสมควรที่จะตอบแทนเวลาและพลังงานที่ฉันมอบให้กับชุมชนนี้ (ผ่านทางโพสต์ด้านบน) ด้วยการโหวต โพสต์ที่มีข้อมูลที่ดีที่เป็นประโยชน์ต่อใครบางคน
ฉัน

2
@Hilmar มีวิธีที่ดีกว่าในการ 'ลบความถี่ลบ' เพื่อให้บรรลุการแปลง Hilbert อย่างที่ฉันพูดวิธีที่ไม่เกี่ยวข้องกับ FFT ในแง่ของข้างต้นฉันไม่รู้สึกกระตือรือร้นโดยเฉพาะอย่างยิ่งในรายละเอียดตอนนี้
ฉัน

ขอบคุณคำตอบโดยละเอียดของคุณเกี่ยวกับการแปลง Hilbert; ต้องการมั่นใจว่าสิ่งนี้ได้รับเป็นอย่างดีจึงไม่ควรท้อแท้ กรุณาละเว้น downvote โดยใครก็ตาม

0

ดังนั้นโดยพื้นฐานแล้วคุณกำลังมองหา Automatic Gain Control (AGC) ไม่แน่ใจว่าคุณต้องทำโดยการประมวลผลแบบดิจิทัล แต่มีวงจรรวมที่ดีมากที่สามารถทำงานได้ดีมากโดยปกติ AGC จะรวมเข้ากับคุณสมบัติอื่น ๆ มากมาย แต่วงจรบางอย่างสามารถสร้างขึ้นด้วยทรานซิสเตอร์ JFET และไดโอดบางส่วน

แต่วิธีที่เข้าใจได้ง่ายมากในการทำสิ่งนี้กับการประมวลผลแบบดิจิทัลคือการออกแบบตัวประมาณค่าความแปรปรวนแบบปรับตัวได้เช่นการสุ่มตัวอย่างเวลาที่เพียงพอเพื่อเป็นตัวแทน 5 หรือ 10 มิลลิวินาทีและใช้ปัจจัยลืมอัลฟา ^ n (alpha <1) ตัวอย่างใหม่แต่ละอันที่เข้ามาจะถูกนำมาพิจารณามากกว่าตัวอย่างที่ผ่านมา จากนั้นขึ้นอยู่กับการประมาณค่าความแปรปรวนนี้ที่คุณออกแบบตามความต้องการของคุณฟังก์ชั่นที่แมปค่าความแปรปรวนกับกำไรที่คุณใช้กับตัวอย่างเสียงแต่ละรายการ นี่อาจเป็นขอบเขตการตัดสินใจที่ยากลำบากในขณะที่หากความแปรปรวนสูงกว่าระดับที่กำหนดคุณก็จะได้กำไรลดลงจากปัจจัยบางอย่าง

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

นี่เป็นวิธีการวิเคราะห์พฤติกรรมมากกว่า แต่อย่างน้อยก็ช่วยให้คุณประหยัดจากคณิตศาสตร์หนัก ๆ

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