เหตุใดจึงเป็นความคิดที่ดีในการกรองโดยการทำให้ถังขยะ FFT เป็นศูนย์?


72

มันง่ายมากในการกรองสัญญาณโดยการทำ FFT ที่มันลบช่องว่างบางส่วนแล้วทำการ IFFT ตัวอย่างเช่น

t = linspace(0, 1, 256, endpoint=False)
x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t)
X = fft(x)
X[64:192] = 0
y = ifft(X)

ส่วนประกอบความถี่สูงจะถูกลบออกอย่างสมบูรณ์โดยตัวกรอง FFT "brickwall" นี้

แต่ฉันได้ยินมาว่านี่ไม่ใช่วิธีการที่ดีที่จะใช้

  • เหตุใดจึงเป็นความคิดที่ไม่ดี
  • มีสถานการณ์ที่เป็นตัวเลือกที่ดีหรือไม่?

[ ตามที่แนะนำโดย pichenettes ]

คำตอบ:


74

sin(ωt)/ωt

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

อีกวิธีในการดูคือช่องผลลัพธ์ FFT แต่ละอันแสดงความถี่ของคลื่นไซน์ในโดเมนเวลา ดังนั้นการ zeroing bin จะให้ผลลัพธ์เช่นเดียวกับการลบคลื่นไซน์หรือเท่ากับการเพิ่มคลื่นไซน์ของความถี่ศูนย์ bin bin FFT ที่แน่นอน แต่มีเฟสตรงกันข้าม โปรดทราบว่าหากความถี่ของเนื้อหาบางส่วนในโดเมนเวลาไม่ใช่จำนวนเต็มอย่างหมดจดเป็นระยะในความกว้าง FFT จากนั้นพยายามยกเลิกโดยเพิ่มการผกผันของคลื่นไซน์ที่เป็นจำนวนเต็มว่าจะเงียบ แต่ไม่ใช่สิ่งที่ดูเหมือน บันทึก "beat" (AM ปรับคลื่นไซน์ของความถี่ที่แตกต่างกัน) อาจไม่ใช่สิ่งที่ต้องการ

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


3
คำตอบนี้มีสิ่งที่ดี แต่ฉันต้องการความสนใจมากขึ้นเกี่ยวกับผลกระทบของกิ๊บส์
Jim Clay

4
ความพยายามในการรับคำตอบเกี่ยวกับลักษณะพิเศษของกิ๊บส์ถูกถามไว้แล้วที่นี่: dsp.stackexchange.com/questions/1144/…
hotpaw2

@ hotpaw2 นี่เป็นคำอธิบายที่ดี อย่างไรก็ตามฉันต้องการการอ้างอิงถึงสิ่งนี้และกำลังพบปัญหาในการระบุตัวตน นี่คือเหตุผลที่เราทำการกรองโดเมนเวลาแทนที่จะทำงานในโดเมนความถี่ (นอกจากนี้โดเมนเวลาอาจเป็นแบบเรียลไทม์) อย่างไรก็ตามดูเหมือนว่าไม่มีใครเริ่มต้นด้วยการระบุสิ่งนี้!
ฮิวจ์

สิ่งนี้จะเกี่ยวข้องกับวิธีหน้าต่างสำหรับการออกแบบตัวกรองได้อย่างไร
Filipe Pinto

เปรียบเทียบการแปลงของหน้าต่าง Von Hann (et.al. ) กับหน้าต่างสี่เหลี่ยมใด ๆ โดยทั่วไปแล้วการตอบสนองของตัวกรองที่ดีขึ้นโดยเฉพาะอย่างยิ่งระหว่างถังขยะ FFT ในแถบหยุด โดยทั่วไปแล้วถังขยะ zeroing ทันทีจะเลวร้ายยิ่งกว่าไม่ zeroing ใกล้ช่วงการเปลี่ยนภาพ
hotpaw2

3

คำถามนี้ทำให้ฉันสับสนเป็นเวลานาน คำอธิบายของ @ hotpaw2 นั้นดี คุณอาจสนใจทดลองง่ายๆโดยใช้ matlab

https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html


ปรับปรุงข้อมูล

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

ผลลัพธ์ที่ได้ในความเป็นจริงมาจากผลกระทบหน้าต่าง หากคุณต้องการเข้าใจปัญหาทั้งหมดโปรดดูบทที่ 7.6 และบทที่ 10.1-10.2 ของพระคัมภีร์ของ DSP (1) สรุปประเด็นสำคัญสามข้อได้รับการบันทึกไว้ที่นี่

  1. ขนาดของหน้าต่างและลำดับของ DFT (FFT) มีความเป็นอิสระโดยสิ้นเชิง อย่าผสมให้เข้ากัน
  2. คุณสมบัติของหน้าต่าง (ชนิด / ขนาด) มีอิทธิพลเหนือรูปร่างของ DTFT (เช่นกลีบหลักที่กว้างขึ้นนำไปสู่วงกว้างชั่วคราวในการตอบสนองความถี่)
  3. 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

สามารถแปลงเป็นความคิดเห็นได้ไหม?
endolith

ขออภัยฉันไม่มีชื่อเสียงเพียงพอ คำอธิบายใน URL นั้นเขียนด้วยตัวเองเช่นกัน ฉันแค่ต้องการให้รหัสทดสอบที่สามารถเห็นภาพอิทธิพลที่ไม่ดีของระลอกคลื่น
Po-wei Huang

1

FFT ให้การแก้ไขเวลาที่ไม่ดีเช่นไม่ให้ข้อมูลตามเวลาที่มีความถี่เฉพาะ มันให้ข้อมูลเกี่ยวกับส่วนประกอบความถี่ที่มีอยู่สำหรับระยะเวลาของสัญญาณที่กำหนด

โดย zeroing bins ใน FFT ให้ความละเอียดต่ำหลังจาก IFFT ในโดเมนเวลา


อย่างไรก็ตามมีความยุ่งยากในการคำนวณสำหรับสัญญาณที่ยาวมาก ๆ ที่จะใช้ fft และ ifft เพื่อหลีกเลี่ยงการกรอง zitters / ringing ของสัญญาณจะต้องมีการขนส่งอย่างราบรื่นจากวงดนตรีผ่านเพื่อหยุดวงดนตรี
Itta Gouthami

"FFT ให้การแก้ไขเวลาที่ไม่ดี" FFT ไม่ได้ให้ความละเอียดเวลามันเป็นการแปลงโดเมนสเปกตรัมดังนั้นอย่างที่กล่าวหลังจากนั้นจะให้ข้อมูลเกี่ยวกับส่วนประกอบความถี่ของสัญญาณเท่านั้น
EdParadox

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