ปรากฏการณ์นี้ไม่มีส่วนเกี่ยวข้องกับการรั่วไหลของสเปกตรัม สิ่งที่คุณสังเกตคือผลของการเติมเต็มศูนย์ ด้วยจำนวนตัวอย่างมีความละเอียดความถี่สูงสุดที่เป็นไปได้ที่สามารถทำได้:ยังไม่มีข้อความΔ ฉ Δ f
Δ f= fsยังไม่มีข้อความ
ในกรณีของคุณตรง{} หากคุณ zero-pad สัญญาณของคุณไม่มีข้อมูลเพิ่มเติมเพื่อดึง - คุณจะลดระยะห่างความถี่เท่านั้นΔ f2H Z
ในตัวอย่างข้างต้นเมื่อคุณเพิ่มเพื่อคุณจะได้รับความถี่ของระยะห่าง{} ตัวอย่างที่สังเกตพิเศษทั้งหมดเป็นเพียงการแก้ไขที่ทำโดยฟังก์ชันหน้าต่าง (ในกรณีของคุณ) คุณจะเริ่มสังเกตเห็นแถบข้างของสเปกตรัมหน้าต่าง เมื่อคุณคูณสัญญาณของคุณโดยปริยายด้วยหน้าต่างสี่เหลี่ยมสิ่งนี้จะส่งผลให้เกิดคลื่นความถี่ของสัญญาณของคุณ (Dirac's + DC สองอัน) พร้อมฟังก์ชันยังไม่มีข้อความ10001H Zs i n cs i n c
อีกวิธีในการดูคือการจินตนาการว่า DFT นั้นเป็นธนาคารตัวกรองซึ่งประกอบด้วยฟังก์ชันเลื่อน สิ่งเหล่านั้นจะถูกจัดเรียงในลักษณะเช่นนี้จุดสูงสุดของจุดนั้นคือจุดศูนย์ของส่วนที่เหลือทั้งหมดที่มีอยู่ หากคุณเริ่มมองหาระหว่างศูนย์เหล่านั้นคุณจะเริ่มเก็บตัวอย่างเหล่านั้น นี่คือตัวอย่างพล็อตของตัวกรองตัวกรองs i n cs i n cs i n c
ลองจินตนาการว่ามีความถี่ที่สอดคล้องกับตัวกรองสีน้ำเงินปรากฏขึ้น ที่จะให้แอมพลิจูดในถังขยะที่เกี่ยวข้อง ความถี่ที่เหลือทั้งหมดไม่มีอยู่ (สีส้มและสีเหลือง) ดังนั้นคุณคูณด้วยและไม่ได้อะไรเลยในถังขยะ ในกรณีที่ไม่มีการเติมเต็มศูนย์นั่นจะไม่ใช่กรณีอีกต่อไป ตัวอย่างของสีน้ำเงินจะตกอยู่ในถังขยะกลางและจะถูกแก้ไขโดย sincs i n c0s i n c
นี่คือสิ่งที่เกิดขึ้นสำหรับและ :ยังไม่มีข้อความ= 1,000ยังไม่มีข้อความ= 10,000
และส่วนที่ซูม:
สิ่งที่ควรสังเกต:
สำหรับจะไม่มีการรั่วไหลใด ๆ มียอดแหลมที่สมบูรณ์แบบซึ่งเป็นตัวแทนของแต่ละความถี่และ DC offset ของคุณยังไม่มีข้อความ= 500
เราสามารถสังเกตเห็นเสียง FFT ที่ด้านล่างสุด
สำหรับรูปร่างของฟังก์ชั่นสามารถมองเห็นได้ชัดเจนยังไม่มีข้อความ= 10,000s i n c
และเห็นได้ชัดว่ารหัสในการทำซ้ำผลลัพธ์:
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'})