คำถามนี้ทำให้ฉันสับสนเป็นเวลานาน คำอธิบายของ @ hotpaw2 นั้นดี คุณอาจสนใจทดลองง่ายๆโดยใช้ matlab
https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html
ปรับปรุงข้อมูล
ในการตรวจสอบข้อเท็จจริงนี้เป็นเรื่องง่ายเราเพียงแค่ต้องระมัดระวังสเปกตรัมของการตอบสนองแบบอิมพัลส์ของตัวกรองคลื่นความถี่ในอุดมคติ (?) ซึ่งแค่ศูนย์ออกจากถังขยะ FFT ทำไมฉันต้องเพิ่มคำวิเศษณ์ "อย่างระมัดระวัง"? ถ้าเราใช้เพียงขนาดเดียวของ FFT เพื่อสังเกตการตอบสนองของแรงกระตุ้นที่เราจะถูกหลอกดังแสดงในรูปที่ 1 อย่างไรก็ตามถ้าเราเพิ่มคำสั่งของ DFT เมื่อสังเกตเอาท์พุทของตัวกรองที่เป็นศูนย์ padding กระตุ้นการตอบสนองเราสามารถหาสิ่งที่เรียกว่าปรากฏการณ์กิ๊บส์ระลอกในโดเมนความถี่ตามที่ปรากฎในรูปที่2
ผลลัพธ์ที่ได้ในความเป็นจริงมาจากผลกระทบหน้าต่าง หากคุณต้องการเข้าใจปัญหาทั้งหมดโปรดดูบทที่ 7.6 และบทที่ 10.1-10.2 ของพระคัมภีร์ของ DSP (1) สรุปประเด็นสำคัญสามข้อได้รับการบันทึกไว้ที่นี่
- ขนาดของหน้าต่างและลำดับของ DFT (FFT) มีความเป็นอิสระโดยสิ้นเชิง อย่าผสมให้เข้ากัน
- คุณสมบัติของหน้าต่าง (ชนิด / ขนาด) มีอิทธิพลเหนือรูปร่างของ DTFT (เช่นกลีบหลักที่กว้างขึ้นนำไปสู่วงกว้างชั่วคราวในการตอบสนองความถี่)
- DFT เป็นเพียงตัวอย่างของ DTFT ในโดเมนความถี่ ยิ่งลำดับของ DFT ยิ่งสูงเท่าไรสเปกตรัมของ DFT ก็จะยิ่งหนาแน่นมากขึ้นเท่านั้น
ดังนั้นด้วยความช่วยเหลือของสเปกตรัมที่หนาแน่นขึ้นในรูปที่2เราสามารถมองผ่านหน้ากากของตัวกรอง Band Pass ในอุดมคติ (ของปลอม)
Freq ที่หลอกลวง คำตอบ
ปรากฏการณ์กิ๊บส์ในความถี่ คำตอบ
(1) Alan V. Oppenheim และ Ronald W. Schafer 2552. การประมวลผลสัญญาณไม่ต่อเนื่องแบบเวลา (ครั้งที่ 3) Prentice Hall Press, อัปเปอร์แซดเดิลริเวอร์, นิวเจอร์ซีย์, สหรัฐอเมริกา
fps = 15;
LPF = 1;
HPF = 2;
n = -511:512;
n0 = 0;
imp = (n==n0);
NyquistF = 1/2*fps;
%% Ideal BPF
tmp_N = 512;
tmp_n = 0:1:tmp_N-1;
freq = ( n .* fps) ./ tmp_N;
F = fft(imp, tmp_N);
F_bpf = IdealBandpassFilter(F, fps, LPF, HPF);
imp_rep =[real(ifft(F_bpf))'];
% Zero padding.
imp_rep2 =[zeros(1,2048) real(ifft(F_bpf))' zeros(1,2048)];
N = 2^nextpow2(length(imp_rep));
F = fft(imp_rep,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';
figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Mis leading Freq Response');
N = 2^nextpow2(length(imp_rep2));
F = fft(imp_rep2,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';
figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Zero Padding (DFT) with more points');
%% Function
function filered_signal = IdealBandpassFilter(input_signal, fs, w1, w2)
N = length(input_signal);
n = 0:1:N-1;
freq = ( n .* fs) ./ N;
filered_signal = zeros(N, 1);
for i = 1:N
if freq(i) > w1 & freq(i) < w2
filered_signal(i) = input_signal(i);
end
end
end