วิธีการตอบสนองที่ซับซ้อนเฉลี่ย (และเหตุผล)?


11

ฉันกำลังพัฒนาซอฟต์แวร์ที่คำนวณการตอบสนองของระบบโดยการเปรียบเทียบ FFT ของสัญญาณอินพุตและเอาต์พุต สัญญาณอินพุทและสัญญาณเอาท์พุตนั้นแบ่งออกเป็น windows และสำหรับแต่ละหน้าต่างสัญญาณจะถูกลบและแบ่งโดยฟังก์ชันฮันน์ การตอบสนองของอุปกรณ์สำหรับหน้าต่างนั้นจะเป็นอัตราส่วนของ FFT ของข้อมูลที่ประมวลผล

ฉันเชื่อว่าข้างต้นเป็นขั้นตอนมาตรฐานแม้ว่าฉันอาจจะอธิบายได้ไม่ดี ปัญหาของฉันมาในวิธีการรวมการตอบสนองจากหน้าต่างหลายบาน

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

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

ด้วยการวนซ้ำโดยอ้อมผ่านช่องเก็บความถี่

แต่ฉันถูกขอให้เปลี่ยนสิ่งนี้เพื่อคำนวณแอมพลิจูดและเฟสในแต่ละหน้าต่างก่อนจากนั้นจึงเฉลี่ยแอมพลิจูดและเฟสในหน้าต่างทั้งหมด:

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

ฉันได้แย้งว่าสิ่งนี้ไม่ถูกต้องเนื่องจากมุมเฉลี่ย "ผิด" - ค่าเฉลี่ยของ 0 และ 360 องศาเท่ากับ 180 ตัวอย่างเช่น แต่คนที่ฉันทำงานด้วยตอบด้วยการพูดว่า "ตกลงเราจะแสดงแอมพลิจูดเท่านั้น"

ดังนั้นคำถามของฉันคือ:

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

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

[ฉันพยายามเพิ่มแท็กเพิ่มเติม แต่ไม่พบแท็กที่เกี่ยวข้องและไม่สามารถกำหนดแท็กใหม่เป็นผู้ใช้ใหม่ - ขออภัย]


พวกเขาให้เหตุผลอะไรกับการไม่ชอบวิธีการของคุณ?
nibot

การตอบสนองจะดูราบรื่นขึ้นเมื่อทำการพล็อตด้วยวิธีที่สอง ฉันคิดว่าเป็นเพราะในกรณีที่ดูไม่มีสัญญาณสำคัญ (ที่ f สูง) ในขณะที่วิธีที่สองบังคับให้สัญญาณ "ปรากฏ" จากเสียง นอกจากนี้ยังมีปัญหาทางการเมือง / การสื่อสารต่าง ๆ ตามที่คุณคาดเดา
andrew cooke

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

ไม่ ฉันไม่ได้ นั่นเป็นคำแนะนำที่ดี ขอบคุณ หากนำเสนอได้ดีฉันจะเห็นว่ามีความน่าเชื่อถือ
andrew cooke

คำตอบ:


13

การประมาณฟังก์ชั่นการถ่ายโอนมักจะนำไปใช้แตกต่างจากวิธีที่คุณอธิบายเล็กน้อย

วิธีการของคุณคำนวณ

F[y]F[x]

โดยที่วงเล็บเหลี่ยมแสดงค่าเฉลี่ยที่นำมาใช้กับส่วนข้อมูลและฟังก์ชั่นหน้าต่างถูกนำไปใช้กับแต่ละส่วนข้อมูลก่อนที่จะทำการแปลงฟูริเยร์ ( F )F

การใช้งานทั่วไปมากขึ้นจะคำนวณความหนาแน่นสเปกตรัมกากบาทของ x และ y หารด้วยความหนาแน่นสเปกตรัมพลังงานของ x:

F[y]F[x]|F[x]|2=F[y]F[x]F[x]F[x]

โดยที่แสดงถึงผลิตภัณฑ์ที่มีจุดเป็นจุดศูนย์กลางและคอนจูเกตที่ซับซ้อน

ฉันเชื่อว่านี่คือการลดผลกระทบของกลุ่มข้อมูลที่ถังขยะของมีขนาดเล็กเกินไปF[x]

การประมาณแบบต่อเนื่อง

นายจ้างของคุณแนะนำให้คุณประเมินฟังก์ชั่นการโอนโดยใช้

|F[y]||F[x]|

สิ่งนี้จะได้ผลแต่มีข้อเสียใหญ่สองประการ:

  1. คุณไม่ได้รับข้อมูลเฟสใด ๆ
  2. หากการวัดอินพุตและเอาต์พุตy ของคุณมีสัญญาณรบกวนเพิ่มเติมการประมาณฟังก์ชั่นการถ่ายโอนจะไม่ถูกต้องxy

วิธีการและวิธีการของคุณฉันอธิบายหลีกเลี่ยงปัญหาเหล่านี้โดยใช้ค่าเฉลี่ยที่สอดคล้องกัน

อ้างอิง

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

การตรวจสอบ

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


อา! ขอบคุณ. ฉันจะตรวจสอบ / ลองนี้
andrew cooke

@nibot อะไรคือความยาวที่แน่นอนของ FFT ที่นี่
Spacey

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

ตกลงความแตกต่างอีกอย่างก็คือคุณมี <F (y) F * (x)> / <F (x) F * (x)> ในขณะที่ Phonon มี <F (y)> <F * (x)> / (< F (x)> <F * (x)>) afaict: o (
andrew cooke

ไม่มีจุดในการคำนวณ <F (y)> <F * (x)> / (<F (x)> <F * (x)>) เนื่องจากตั้งแต่ <F * (x)> จะถูกยกเลิกทันที ฉันคิดว่ามันถูกต้องตามที่ฉันเขียน
nibot

12

ยินดีต้อนรับสู่การประมวลผลสัญญาณ!

คุณพูดถูก คุณไม่สามารถเฉลี่ยขนาดและขั้นตอน DFT แยกกันโดยเฉพาะขั้นตอนโดยเฉพาะ นี่คือตัวอย่างง่ายๆ:

z=a+bi|z|zz

|z|=a2+b2
z=tan1(ba)

zz1z2

z=z1+z22=a1+b1i+a2+b2i2=(a1+a2)+(b1+b2)i2

ในกรณีนี้,

|z|=(a1+a2)24+(b1+b2)24=12(a1+a2)2+(b1+b2)2a12+b12+a22+b222

นอกจากนี้

z=tan1(b1a1)+tan1(b2a2)2tan1(2(b1+b2)2(a1+a2))

|z|z

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

Gi(f)=Fi1(f)+Fi2(f)++FiN(f)NFik(f)kkiGo(f)=Fo1(f)+Fo2(f)++FoN(f)NGH^(f)H(f)

H^(f)=Go(f)Gi(f)|Gi(f)|2

()


2
ขอบคุณ; ฉันไม่แน่ใจว่าจะลงคะแนนหนึ่งหรือ nibot นี้เป็นคำตอบที่ดีที่สุด - ฉันคิดว่าพวกเขากำลังสนับสนุนกระบวนการเดียวกันดังนั้นไปกับหนังสือแนะนำ แต่ถ้าฉันมีสองคะแนนจะรวมนี้ด้วย ...
andrew cooke

1
@ andrewcooke ใช่พวกเขาทั้งสองกำลังสนับสนุนสิ่งเดียวกัน ฉันหวังว่าสิ่งนี้จะช่วยคุณและเพื่อนร่วมงานของคุณ
Phonon

มันช่วยฉันได้มากมาก (ขอบคุณอีกครั้ง) ในวันจันทร์ฉันจะแนะนำให้ฉัน (1) ใช้วิธีการที่แนะนำและ (2) ทำการเปรียบเทียบกับข้อมูลที่ทราบ (สังเคราะห์) สำหรับทั้งสาม หวังว่าแนวทางที่ดีที่สุดจะชนะ: o)
andrew cooke

@Phon เราใช้ความยาว FFT ในการคำนวณ FFT อย่างไร length_of_signal + max_length_of_channel + 1?
Spacey

@ Mohammad ต้องมีความยาวอย่างน้อยสองเท่าของความล่าช้าที่คุณคาดว่าจะพบ นี่เป็นเพราะสมมาตรแบบวงกลมของ DFT ดังนั้นคุณจะได้รับทั้งค่าสาเหตุและสาเหตุที่ไม่ใช่สาเหตุในผลลัพธ์ของคุณ
Phonon

3

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


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