เหตุใดฉันจึงมีการรั่วไหลของความถี่ใน DFT หลังจากไม่มีการเติมเต็มศูนย์หากความละเอียดความถี่ดี


12

ลองพิจารณาตัวอย่างนี้:

Fs=1000; 
Ns=500;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X=fft(x);

ในสถานการณ์สมมตินี้ความละเอียดความถี่คือ 2 และส่วนประกอบความถี่ทั้งหมดจะถูกบันทึกอย่างถูกต้อง อย่างไรก็ตามถ้าฉันทำสิ่งนี้:

  X=fft(x,1000);

ความละเอียดความถี่คือ 1 แต่มีการรั่วไหลของสเปกตรัม ผลที่คล้ายกันมีให้เห็นที่นี่ สำหรับฉันแล้วการแปลงฟูริเยร์ของหน้าต่างทั้งสอง (หนึ่งที่มีความยาว 500 และอีกอันที่มีความยาว 1,000) มีศูนย์ที่ความถี่ที่แสดงในสัญญาณดังนั้นฉันไม่เห็นว่าทำไมการรั่วไหลจึงเกิดขึ้น


การทำให้เป็นศูนย์จะไม่ลดการรั่วไหลของสเปกตรัมที่เห็นได้ชัด แต่จะทำให้การรั่วไหลของสเปกตรัมปรากฏราบรื่นขึ้น
เบิร์ตบริสโต - จอห์นสัน

คำตอบ:


18

ปรากฏการณ์นี้ไม่มีส่วนเกี่ยวข้องกับการรั่วไหลของสเปกตรัม สิ่งที่คุณสังเกตคือผลของการเติมเต็มศูนย์ ด้วยจำนวนตัวอย่างมีความละเอียดความถี่สูงสุดที่เป็นไปได้ที่สามารถทำได้:NΔ Δf

Δf=fsN

ในกรณีของคุณตรง{} หากคุณ zero-pad สัญญาณของคุณไม่มีข้อมูลเพิ่มเติมเพื่อดึง - คุณจะลดระยะห่างความถี่เท่านั้นΔf2Hz

ในตัวอย่างข้างต้นเมื่อคุณเพิ่มเพื่อคุณจะได้รับความถี่ของระยะห่าง{} ตัวอย่างที่สังเกตพิเศษทั้งหมดเป็นเพียงการแก้ไขที่ทำโดยฟังก์ชันหน้าต่าง (ในกรณีของคุณ) คุณจะเริ่มสังเกตเห็นแถบข้างของสเปกตรัมหน้าต่าง เมื่อคุณคูณสัญญาณของคุณโดยปริยายด้วยหน้าต่างสี่เหลี่ยมสิ่งนี้จะส่งผลให้เกิดคลื่นความถี่ของสัญญาณของคุณ (Dirac's + DC สองอัน) พร้อมฟังก์ชันN10001Hzsincsinc


อีกวิธีในการดูคือการจินตนาการว่า DFT นั้นเป็นธนาคารตัวกรองซึ่งประกอบด้วยฟังก์ชันเลื่อน สิ่งเหล่านั้นจะถูกจัดเรียงในลักษณะเช่นนี้จุดสูงสุดของจุดนั้นคือจุดศูนย์ของส่วนที่เหลือทั้งหมดที่มีอยู่ หากคุณเริ่มมองหาระหว่างศูนย์เหล่านั้นคุณจะเริ่มเก็บตัวอย่างเหล่านั้น นี่คือตัวอย่างพล็อตของตัวกรองตัวกรองsincs i n csinc

ป้อนคำอธิบายรูปภาพที่นี่

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


นี่คือสิ่งที่เกิดขึ้นสำหรับและ :N=1000N=10000

ป้อนคำอธิบายรูปภาพที่นี่

และส่วนที่ซูม:

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่ควรสังเกต:

  • สำหรับจะไม่มีการรั่วไหลใด ๆ มียอดแหลมที่สมบูรณ์แบบซึ่งเป็นตัวแทนของแต่ละความถี่และ DC offset ของคุณN=500

  • เราสามารถสังเกตเห็นเสียง FFT ที่ด้านล่างสุด

  • สำหรับรูปร่างของฟังก์ชั่นสามารถมองเห็นได้ชัดเจนN=10000sinc


และเห็นได้ชัดว่ารหัสในการทำซ้ำผลลัพธ์:

Fs=1000; 
Ns=500;
Ns2=1000;
Ns3=10000;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);

X1 = abs(fft(x))/length(x);
X2 = abs(fft(x, Ns2))/Ns;
X3 = abs(fft(x, Ns3))/Ns;

F1 = 0:Fs/Ns:Fs-Fs/Ns;
F2 = 0:Fs/Ns2:Fs-Fs/Ns2;
F3 = 0:Fs/Ns3:Fs-Fs/Ns3;

plot(F1, 20*log10(X1))
hold on
plot(F2, 20*log10(X2))
plot(F3, 20*log10(X3))
xlim([0, Fs/2])
grid on
legend({'N=500', 'N=1000', 'N=10000'})

1
คำตอบที่สมบูรณ์มาก +1 "[... ] คุณจะเพิ่มระยะห่างของความถี่เท่านั้น" มันควรจะลดลงฉันคิดว่า
Matt L.

2

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

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


1

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

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

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