ในคำตอบของคำถามก่อนหน้านี้มีการระบุว่าควร
zero-pad สัญญาณอินพุต (เพิ่มศูนย์ไปยังจุดสิ้นสุดเพื่อให้คลื่นอย่างน้อยครึ่งหนึ่งเป็น "ช่องว่าง")
เหตุผลนี้คืออะไร
ในคำตอบของคำถามก่อนหน้านี้มีการระบุว่าควร
zero-pad สัญญาณอินพุต (เพิ่มศูนย์ไปยังจุดสิ้นสุดเพื่อให้คลื่นอย่างน้อยครึ่งหนึ่งเป็น "ช่องว่าง")
เหตุผลนี้คืออะไร
คำตอบ:
การซ้อนศูนย์เป็นศูนย์อนุญาตให้ใช้ FFT ที่ยาวขึ้นซึ่งจะทำให้เวกเตอร์ผลลัพธ์ FFT ที่ยาวขึ้น
ผลลัพธ์ FFT ที่ยาวขึ้นจะมีช่องเก็บความถี่มากขึ้น แต่พวกเขาจะให้ผลเช่นเดียวกับการแก้ไข Sinc ที่มีคุณภาพสูงของ FFT ที่ไม่เป็นศูนย์ที่สั้นกว่าของข้อมูลต้นฉบับ
ซึ่งอาจส่งผลให้สเปกตรัมดูนุ่มนวลขึ้นเมื่อลงจุดโดยไม่มีการแก้ไขเพิ่มเติม
แม้ว่าการแก้ไขนี้จะไม่ช่วยในการแก้ไขหรือความละเอียดของและ / หรือระหว่างความถี่ที่อยู่ติดกันหรือใกล้เคียง แต่ก็อาจทำให้ง่ายต่อการแก้ไขจุดสูงสุดของความถี่ที่แยกเดี่ยวที่มองเห็นได้ซึ่งไม่มีสัญญาณหรือเสียงรบกวนใด ๆ . ในทางสถิติความหนาแน่นที่สูงขึ้นของถังขยะผลลัพธ์ FFT อาจทำให้มีโอกาสมากขึ้นที่ bin magnitude ขนาดสูงสุดใกล้กับความถี่ของไซน์ซอยด์ความถี่อินพุตที่แยกแบบสุ่มและไม่มีการแก้ไขเพิ่มเติม (parabolic, et.al. )
แต่โดยพื้นฐานแล้วการเติมเต็มศูนย์เป็นศูนย์ก่อน DFT / FFT เป็นวิธีการคำนวณที่มีประสิทธิภาพในการแก้ไขจุดจำนวนมาก
การซ้อนศูนย์สำหรับการกรองข้ามสหสัมพันธ์อัตโนมัติหรือการกรอง Convolution ถูกใช้เพื่อไม่ผสมผลลัพธ์ของการบิด (เนื่องจากการบิดเป็นวงกลม) ผลเต็มรูปแบบของการบิดเชิงเส้นยาวกว่าทั้งสองเวกเตอร์อินพุต หากคุณไม่ได้จัดเตรียมสถานที่เพื่อยุติผลการสนทนาที่ยาวนานกว่านี้การบิดอย่างรวดเร็วของ FFT จะผสมเข้าด้วยกันและ cruft up ผลลัพธ์ที่คุณต้องการ Zero-padding ให้ค่าศูนย์เป็นศูนย์ที่จะผสมผลลัพธ์ที่ยาวกว่า และมันง่ายกว่าที่จะยกเลิกการผสมบางอย่างที่มีการผสม / สรุปด้วยเวกเตอร์ศูนย์
มีบางสิ่งที่ต้องพิจารณาก่อนตัดสินใจเลือก zero pad สัญญาณเวลาโดเมนของคุณ คุณอาจไม่จำเป็นต้องเป็นศูนย์สัญญาณสัญญาณเลย!
1) เพิ่มความยาวของข้อมูลโดเมนเวลา (ไม่ใช่การเติมเต็มศูนย์) เพื่อให้ได้ความละเอียดที่ดีขึ้นในโดเมนความถี่
2) เพิ่มจำนวนคะแนน FFT นอกเหนือจากความยาวสัญญาณโดเมนเวลาของคุณ (การเติมเต็มศูนย์) หากคุณต้องการดูคำจำกัดความที่ดีขึ้นของถังขยะ FFT แม้ว่ามันจะไม่ได้ให้ความละเอียดที่แท้จริงอีก คุณยังสามารถกดปุ่มเพื่อให้ได้คะแนน FFT 2 แต้ม
มีตัวเลขที่ดีแสดงให้เห็นถึงจุดเหล่านี้ที่http://www.bitweenie.com/listings/fft-zero-padding/
สิ่งสุดท้ายที่ต้องพูดถึง: หากคุณ zero pad สัญญาณในโดเมนเวลาและคุณต้องการใช้ฟังก์ชั่น windowing ตรวจสอบให้แน่ใจว่าคุณหน้าต่างสัญญาณก่อนที่คุณจะ zero pad หากคุณใช้ฟังก์ชั่นหน้าต่างหลังจากไม่มีการเติมเต็มศูนย์คุณจะไม่บรรลุสิ่งที่หน้าต่างควรทำ โดยเฉพาะอย่างยิ่งคุณจะยังคงมีการเปลี่ยนแปลงที่คมชัดจากสัญญาณถึงศูนย์แทนการเปลี่ยนเป็นศูนย์อย่างราบรื่น
โดยทั่วไปการเติมเต็มศูนย์ก่อน DFT เทียบเท่ากับการแก้ไขหรือสุ่มตัวอย่างบ่อยขึ้นในโดเมนที่ถูกแปลง
นี่คือการสร้างภาพข้อมูลที่รวดเร็วเกี่ยวกับการทำงานของสิ่งที่ตรงกันข้าม หากคุณสุ่มตัวอย่างสัญญาณไม่ จำกัด เวลาในอัตราที่สูงขึ้นคุณจะได้สเปกตรัมที่ 'แบน' มากขึ้นนั่นคือสเปกตรัมที่มีเลขศูนย์ที่ปลายทั้งสองมากขึ้น กล่าวอีกนัยหนึ่งคุณสามารถรับตัวอย่างเพิ่มเติมได้ทันเวลาโดยเพียงแค่ไม่มีการเติมเต็มความถี่หลังจาก DFT'ing และจากนั้น IDFT'ing ผลลัพธ์แบบ zero-padded
เอฟเฟกต์เหมือนกันจะเก็บกลับด้านเมื่อ zero-padding เกิดขึ้นในเวลา ทั้งหมดนี้เป็นเพราะการสร้างสัญญาณที่สมบูรณ์แบบนั้นเป็นไปได้ตราบใดที่สัญญาณไม่ จำกัด แบนด์วิดท์และตัวอย่างอย่างน้อยที่สุดที่อัตรา Nyquist
คำว่า 'การแก้ไข' นั้นขึ้นอยู่กับวิธีที่คุณกำหนด สำหรับฉันมันหมายถึงการแยกแยะจุดที่อยู่ติดกันทั้งสองด้านในเวลาหรือความถี่ได้อย่างน่าเชื่อถือ (แยกทางสถิติ) ในกรณีนี้ความละเอียดขึ้นอยู่กับขนาด DFT เนื่องจากการรั่วไหลของสเปกตรัม นั่นคือขนาดของหน้าต่างที่เล็กลงทำให้สัญญาณที่ถูกแปลงพร่ามัวหรือเปื้อนมากขึ้นและในทางกลับกัน มันแตกต่างจากความถี่ที่คุณสุ่มตัวอย่างหรือสิ่งที่ฉันเรียกว่า 'คำจำกัดความ' ตัวอย่างเช่นคุณสามารถสุ่มตัวอย่างภาพเบลอมาก ๆ ในอัตราที่สูง (ความคมชัดสูง) แต่คุณยังไม่สามารถรับข้อมูลเพิ่มเติมได้มากกว่าการสุ่มตัวอย่างด้วยอัตราที่ต่ำกว่า ดังนั้นโดยสรุปการ zero-padding ไม่ได้ปรับปรุงความละเอียดเลยเนื่องจากคุณไม่ได้รับข้อมูลมากขึ้นกว่า แต่ก่อน
หากใครมีความสนใจในสเปกตรัมของฟังก์ชั่นหน้าต่างที่ใช้ในการแยกตัวอย่างโดเมนเวลาแล้ว zero-padding จะเพิ่มความละเอียดความถี่ของฟังก์ชั่นหน้าต่าง
คุณจะเห็นตัวอย่างในที่อื่นที่ไม่ใช่จุดสูงสุดและจุดผ่านศูนย์ซึ่งเผยให้เห็นรูปร่างของฟังก์ชันการซิงค์ในสเปกตรัมที่ได้ ดังนั้นสิ่งที่ใช้เป็นศูนย์รอง? มันเป็นการใช้เพื่อการศึกษาอย่างแน่นอนในการเปิดเผยธรรมชาติของการแปลงสัญญาณแบบไม่ต่อเนื่องซึ่งเป็นกรณีปกติ ในทางปฏิบัติมันอาจมีประโยชน์ในกรณีใด ๆ ที่คุณสนใจในรูปร่างสเปกตรัมของซองจดหมายที่แยกได้ซึ่งขี่บนคลื่นพาหะ
อาจมีเหตุผลที่แตกต่างกันขึ้นอยู่กับกระบวนการใด ๆ ที่ดำเนินการก่อนและหลังการแปลงฟูริเยร์ เหตุผลที่พบบ่อยที่สุดคือการบรรลุความละเอียดความถี่ที่มากขึ้นในการแปลงผลลัพธ์ใด ๆ กล่าวคือยิ่งจำนวนตัวอย่างที่ใช้ในการแปลงของคุณมากขึ้นเท่าไรก็จะยิ่งมีความกว้างของช่องว่างในสเปกตรัมกำลังงานที่มากขึ้นเท่านั้น เตือนความจำ: binwidth = sample_frequency / transform_size (มักเรียกว่าขนาดหน้าต่าง) คุณสามารถจินตนาการได้จากสิ่งนี้ว่าเมื่อคุณเพิ่มขนาดการแปลงของคุณแบนด์วิดท์จะลดลง (= ความละเอียดความถี่ที่ดีขึ้น) การเพิ่มศูนย์เป็นวิธีหนึ่งในการเพิ่มขนาดการแปลงโดยไม่ต้องแนะนำข้อมูลใหม่ให้กับสัญญาณ
ดังนั้นทำไมไม่ใช้การแปลงที่ใหญ่กว่าโดยไม่มีการเติมเต็มศูนย์? นั่นจะไม่บรรลุผลเช่นเดียวกันหรือไม่? คำถามที่ดี. ในหลายกรณีคุณอาจต้องการวิเคราะห์กระแสข้อมูลโดเมนเวลาซึ่งคุณอาจใช้การแปลงฟูริเยร์ในระยะเวลาอันสั้น (stft) สิ่งนี้เกี่ยวข้องกับการแปลงตัวอย่าง N ทุกตัวตามความละเอียดของเวลาที่คุณต้องการเพื่อระบุลักษณะการเปลี่ยนแปลงในสเปกตรัมความถี่ ปัญหาอยู่ที่นี่ หน้าต่างใหญ่เกินไปและคุณจะสูญเสียความละเอียดของเวลาหน้าต่างเล็กเกินไปและคุณจะสูญเสียความละเอียดของความถี่ วิธีแก้ปัญหาคือการใช้หน้าต่างโดเมนเวลาเล็ก ๆ ให้ความละเอียดของช่วงเวลาที่ดีและให้ศูนย์เป็นศูนย์เพื่อให้การแก้ปัญหาความถี่ที่ดี หวังว่านี่จะเป็นประโยชน์สำหรับคุณ
อัปเดต
ฉันไม่ได้อธิบายสิ่งนี้ดี ฉันควรจะชี้แจงให้ดีขึ้น หมายถึงการแปลงแบบหน้าต่างแน่นอนคุณไม่ได้รับความละเอียดความถี่มากขึ้น 'จริง' แต่สำหรับการสร้างภาพ (อ่านสเปกตรัมพลังงานด้วยตา) ก็สามารถให้ผลลัพธ์ที่ชัดเจน การใช้อัตราการสุ่มตัวอย่างที่สำคัญแต่ละกลีบด้านข้างใช้ถังขยะเดี่ยวซึ่งขึ้นอยู่กับเทคนิคการสร้างกราฟอาจทำให้เข้าใจผิด Zero padding ให้สเปกตรัมคลื่นความถี่ซึ่งอาจเป็นการเปิดเผยเพิ่มเติม นอกจากนี้หากคุณใช้วิธีการเลือกสูงสุดแบบง่ายสำหรับการประมาณความถี่ผลการประมาณสเปกตรัมของการเติมเต็มศูนย์จะให้ตัวอย่างสเปกตรัมใกล้กับจุดสูงสุดที่แท้จริงของกลีบหลัก ลิงก์นี้มีไดอะแกรมที่มีประโยชน์: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html
ฉันไม่เห็นสิ่งที่กล่าวถึงในคำตอบที่ดีก่อนหน้านี้ดังนั้นฉันจะเพิ่มเหตุผลสำคัญเพิ่มเติมต่อไปนี้สำหรับการเติมเต็มศูนย์
อัลกอริธึม Radix-2 มีประสิทธิภาพมากขึ้นดังนั้นการขยายศูนย์ไปที่กำลังถัดไปของ 2 (หรือกำลังของ 4 ในบางกรณีสำหรับ radix-4) หรือการหลีกเลี่ยงปัจจัยสำคัญขนาดใหญ่ใด ๆ สามารถปรับปรุงประสิทธิภาพของเวลาจริงได้ เมื่อใช้ FFT ในการวิเคราะห์มักมีการเติมเต็มศูนย์เพื่อคำนวณตัวอย่างของ DTFT เช่นการพิจารณาการตอบสนองความถี่ของ FIR: เปรียบเทียบ fft ([1 1 1 1]) กับ fft ([1 1 1 1], 512) ซึ่งเหมือนกับ freqz ([1 1 1 1])