ฉันจะคำนวณความแตกต่างของเฟสระหว่างสัญญาณสองสัญญาณใน MATLAB ได้อย่างไร


ตอบ 1:

อะไรเป็นเรื่องธรรมดาเกี่ยวกับสัญญาณที่ความแตกต่างของเฟสจะเป็นพารามิเตอร์ที่มีประโยชน์ในการตรวจสอบ ฉันสมมติว่าเรากำลังดูโปรไฟล์เฟสเป็นฟังก์ชันของความถี่ ตัวอย่างหนึ่งที่นึกถึงคือการเปรียบเทียบเฟสของสเปกตรัมของตัวกรองการตอบสนองต่อแรงกระตุ้นสำหรับเกณฑ์การออกแบบที่แตกต่างกันสามข้อ พูดเฟสขั้นต่ำ, เฟสเชิงเส้นและเฟสสูงสุด เราสามารถออกแบบตัวกรอง FIR ด้วยการตอบสนองบันทึกขนาดเดียวกัน แต่มีการตอบสนองเฟสที่แตกต่างกันสามแบบ ฉันทำสิ่งนี้เมื่อฉันสอนการออกแบบตัวกรองและเพื่อให้นักเรียนได้รู้ว่าเฟสต่ำสุดนั้นตรงข้ามกับเฟสเชิงเส้น…ระยะสูงสุดคือเพื่อความสมบูรณ์ ฉันออกแบบตัวกรองสัญญาณความถี่ต่ำด้วยอัลกอริทึม Parks McLellan (Remez) จากนั้นพับศูนย์นอกวงกลมหน่วยกลับเข้าไปในศูนย์ผกผันภายในเพื่อสร้างตัวกรองขั้นต่ำและในขณะที่ทำตรงกันข้ามให้พับศูนย์ภายในกลับสู่ศูนย์ภายนอกเพื่อสร้าง ตัวกรองเฟสสูงสุด จากนั้นฉันจะแสดงการตอบสนองแบบอิมพัลส์ของตัวกรองทั้งสามขนาดของสเปกตรัมของแต่ละตัวและการตอบสนองเฟสที่ยังไม่ได้เปิด (จัดที่ dc) มันแสดงให้เห็นอย่างชัดเจนว่าทำไมพวกเขาถึงมีชื่อของตน ฉันสามารถส่งทุกคนที่ต้องการตัวอย่างรหัส matlab

เฟรดแฮร์ริส


ตอบ 2:

ใช้ [corr.lags] = xcorr; ทำ crosscorrelation ค้นหาดัชนีสูงสุดสูงสุด [~, ix] = max (corr); ล่าช้า = ล่าช้า (ix); ที่ให้ความแตกต่างระหว่างกับสัญญาณในตัวอย่าง แปลงเป็นเรเดียน (หรืออะไรก็ตาม) ตามช่วงเวลาของสัญญาณของคุณ: IF N_sig คือจำนวนตัวอย่างในช่วงเวลา:

phase_deg = 2 * pi * delay / N_sig; หรือ 360 * delay / N_sig ถ้าอยู่ในองศา