ทำไมขนาดปกติในระหว่างการสังเคราะห์ (IDFT) ไม่ใช่การวิเคราะห์ (DFT)


17

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

การดำเนินการนี่เป็นเพียงเพราะ DFT คำนวณโดยการใช้ผลิตภัณฑ์ด้านในของสัญญาณที่มีพื้นฐานแต่ละไซน์ (เช่นความสัมพันธ์ที่ไม่เป็นมาตรฐาน อย่างไรก็ตามนั่นไม่ได้ตอบคำถามเชิงปรัชญาว่าทำไมเราไม่หารหารด้วย N ก่อนส่งคืนผลลัพธ์

อัลกอริธึมส่วนใหญ่หารด้วย N เมื่อทำการสังเคราะห์ใหม่

นี่ดูเหมือนจะขัดกับฉันและ (เว้นแต่ฉันจะทำบางสิ่ง) มันทำให้คำอธิบายทั้งหมดของ DFT สับสนมาก

ในทุกสถานการณ์ที่ฉันสามารถฝันได้ขนาดที่แท้จริง (ไม่ใช่ขนาด * N) คือค่าที่ฉันต้องการจากการดำเนินการ DFT และขนาดปกติคือค่าที่ฉันต้องการป้อนลงในการดำเนินการ IDFT

เหตุใด DFT จึงไม่ถูกกำหนดเป็น DFT / N และ IDFT ถูกกำหนดให้เป็นผลรวมของไซนัสอยด์ขนาดปกติ


2
ฉันคิดว่านี่เป็นหนึ่งในคำถามที่เจ๋งที่สุดที่เคยถามที่นี่
Phonon

คำตอบ:


9

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

ต้องไต่ระดับการแปลงไปข้างหน้า 1 / N

เริ่มต้นด้วยมันควรจะชัดเจนว่าในการวิเคราะห์คลื่นไซน์อย่างง่ายความยาวของการแปลงควรไม่เกี่ยวข้องการพูดทางคณิตศาสตร์ สมมติว่า N = 1024, Freq = 100 และสัญญาณของคุณคือ:

f (n) = cos (ความถี่ * 2 * Pi * n / N)

หากคุณใช้ 1024 จุด DFT ของ f (n) คุณจะพบว่าถังขยะ [100] = 512 แต่นี่ไม่ใช่ค่าที่มีความหมายจนกว่าคุณจะปรับขนาดด้วย N. 512/1024 = 1/2 และแน่นอน อีก 1/2 อยู่ในสเปกตรัมลบในถังขยะ [924]

หากคุณเพิ่มความยาวของ DFT เป็นสองเท่า N = 2048 ค่าผลลัพธ์จะเป็นสองเท่าของ 1024 จุด DFT ซึ่งอีกครั้งทำให้ผลลัพธ์ไม่มีความหมายเว้นแต่ว่าเราจะขยายด้วย 1 / N ความยาวของ DFT ไม่ควรเป็นปัจจัยในการวิเคราะห์ประเภทนี้ ดังนั้นในตัวอย่างนี้คุณต้องปรับสเกล DFT เป็น 1 / N

ต้องไม่ขยายการแปลงไปข้างหน้า

ตอนนี้สมมติว่าคุณมีการตอบสนองแบบแรงกระตุ้นของตัวกรอง FIR แบบ 32 แตะและต้องการทราบการตอบสนองความถี่ เพื่อความสะดวกเราจะถือว่าตัวกรองความถี่ต่ำผ่านได้รับ 1 เรารู้ว่าสำหรับตัวกรองนี้ส่วนประกอบ DC ของ DFT จะต้องเป็น 1 และควรชัดเจนว่านี่จะเป็นกรณีไม่ว่าขนาดของ DFT เนื่องจากส่วนประกอบ DC เป็นเพียงผลรวมของค่าอินพุต (เช่นผลรวมของสัมประสิทธิ์ FIR)

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

อะไรคือความแตกต่างพื้นฐานระหว่างสองตัวอย่างนี้?

คำตอบนั้นง่าย ในกรณีแรกเราให้พลังงานสำหรับทุกตัวอย่างอินพุต กล่าวอีกนัยหนึ่งคลื่นไซน์มีอยู่สำหรับตัวอย่างทั้งหมด 1024 ตัวอย่างดังนั้นเราจำเป็นต้องปรับขนาดเอาต์พุตของ DFT ภายใน 1/1024

ในตัวอย่างที่สองตามคำจำกัดความเราให้พลังงานเพียง 1 ตัวอย่างเท่านั้น (แรงกระตุ้นที่ n = 0) มันใช้เวลา 32 ตัวอย่างสำหรับแรงกระตุ้นในการทำงานผ่านตัวกรอง 32 ก๊อก แต่ความล่าช้านี้ไม่เกี่ยวข้อง เนื่องจากเราให้พลังงานสำหรับ 1 ตัวอย่างเราจึงปรับสเกลเอาท์พุทของ DFT เป็น 1 ถ้าแรงกระตุ้นถูกกำหนดด้วยพลังงาน 2 หน่วยแทน 1 เราจะปรับสเกลเอาต์พุตเป็น 1/2

ต้องไม่ปรับการแปลงผกผัน

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

ดังนั้นเช่นเดียวกับ DFT ไปข้างหน้าเราไม่ได้ปรับเอาท์พุท DFT ของผกผันถ้าอินพุตเป็นแรงกระตุ้น

ต้องปรับขนาดการแปลงผกผัน

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

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

สมมติว่าเรามีสัญญาณต่อไปนี้โดยมี N = 1024, Freq = 100:

f(n) = 6 * cos(1*Freq * 2*Pi * n/N)  n = 0 - 127
f(n) = 1 * cos(2*Freq * 2*Pi * n/N)  n = 128 - 895
f(n) = 6 * cos(4*Freq * 2*Pi * n/N)  n = 896 - 1023

โดเมนเวลา

สังเกตุความแตกต่างของแอมพลิจูดความถี่และระยะเวลาสำหรับส่วนประกอบทั้งสาม น่าเสียดายที่ DFT ของสัญญาณนี้จะแสดงส่วนประกอบทั้งสามที่ระดับพลังงานเดียวกันแม้ว่าส่วนประกอบที่ 2 จะมีระดับพลังงาน 1/36 ของอีกสองชิ้น

Unindustry Freq Domain

ความจริงที่ว่าทั้งสามองค์ประกอบมีปริมาณพลังงานเท่ากันชัดเจนซึ่งอธิบายผลลัพธ์ของ DFT แต่มีประเด็นสำคัญที่ต้องทำที่นี่

หากเรารู้ระยะเวลาสำหรับส่วนประกอบความถี่ต่าง ๆ เราสามารถปรับขนาดถังขยะความถี่ต่างๆ ในกรณีนี้เราจะทำเช่นนี้เพื่อปรับขนาดเอาต์พุตของ DFT ที่ถูกต้อง: bin [100] / = 128; ถังขยะ [200] / = 768; ถังขยะ [400] / = 128;

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

เพื่อให้เกิดความซับซ้อนเราจะใช้หน้าต่างกับสัญญาณนี้เพื่อปรับปรุงความละเอียดสเปกตรัมของ DFT เนื่องจากส่วนประกอบความถี่ที่หนึ่งและสามอยู่ที่จุดเริ่มต้นและจุดสิ้นสุดของสัญญาณพวกเขาจะถูกลดทอนโดย 27 เดซิเบลในขณะที่ส่วนประกอบกลางได้รับการลดทอนเพียง 4 เดซิเบล (หน้าต่าง Hanning)

สเปกตรัมหน้าต่าง

เพื่อความชัดเจนเอาต์พุตของ DFT อาจเป็นตัวแทนที่น่าสงสารของอินพุตที่ถูกปรับขนาดหรือไม่

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

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

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


ฉันเลือกคำตอบนี้เพื่อความครอบคลุมและข้อมูลรายละเอียดมากมาย แต่ดูคำตอบที่ยอดเยี่ยมของ Phonon สำหรับภาพรวมที่ใช้งานง่าย
bryhoyt

9

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

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

ตัวอย่างเช่นลองใช้ DFT กับสัญญาณค่าคงที่ 1 ลองสมมติว่าสัญญาณนี้มีความยาว จำกัด และมีความยาว 16 ก๊อก เราต้องการอะไรจาก DFT ในกรณีนี้ เห็นได้ชัดว่าเราต้องการให้มันบอกเราว่าแอมพลิจูดแต่ละองค์ประกอบความถี่ของสัญญาณมีอะไรบ้าง เห็นได้ชัดว่าสัญญาณของเรามีองค์ประกอบเดียวของความถี่ 0 และแอมพลิจูด 1 แต่ DFT ให้จุดสูงสุดเพียงครั้งเดียวที่ bin 0 และความสูง 16! ในกรณีนี้ความไม่พอใจของคุณที่มีต่อคำจำกัดความของ DFT นั้นสมเหตุสมผลดี เราควรปรับค่าสัมประสิทธิ์การวิเคราะห์ไม่ใช่ค่าสัมประสิทธิ์การสังเคราะห์

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

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

1(N)


คำตอบที่ดีขอบคุณ! ฉันเลือก user5108_Dan สำหรับความครอบคลุม แต่คำตอบของคุณช่วยให้ได้สัญชาตญาณที่ดีที่สุด
bryhoyt

7

ที่จริงแล้ววิธีที่แตกต่างกัน 3 วิธีในการใส่ตัวคูณสเกลนั้นเป็นเรื่องธรรมดาในการใช้งาน FFT / IFFT ที่หลากหลายและแตกต่างกัน: 1.0 forward และ 1.0 / N back, 1.0 / N back และ 1.0 back และ 1.0 / sqrt (N)

การแปรสเกล 3 เหล่านี้ทั้งหมดอนุญาตให้ใช้ในการเดินทางไปกลับ IFFT (FFT (x)) โดยใช้ฟังก์ชัน unscaled sin () และ cos () แบบทั่วไปสำหรับปัจจัย twiddle เพื่อเป็นการแปลงเอกลักษณ์

โปรดทราบว่าการรักษาขนาดคลื่นไซน์ในหน้า FFT ไม่ได้รักษาพลังงานทั้งหมด (เช่นในทฤษฎีบทของ Parseval) เลือกหนึ่งที่คุณต้องการ

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