เหตุใดตัวกรองสัญญาณหยุดของฉันจึงลดทอนความถี่อื่น ๆ ได้


12

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

หากคุณใส่รหัสนี้ใน Matlab คุณจะเห็นได้อย่างชัดเจนว่าตัวกรองความถี่สูงได้ถูกลบออกไปเรียบร้อยแล้ว แต่ด้วยเหตุผลบางอย่างความกว้างของความถี่ต่ำได้ถูกตัดลงครึ่งหนึ่งและยิ่งฉันเพิ่ม # ของสัมประสิทธิ์ตัวกรองมากขึ้น ยิ่งทำให้เส้นโค้งทั้งหมดของฉันแบนลงทำไมจึงเกิดสิ่งนี้ขึ้น และฉันจะป้องกันได้อย่างไรเพื่อที่วงหยุดจะไม่เผยแพร่ออกไปด้านนอก? นี่คือภาพและรหัส:

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

fSampling = 8000;
tSampling = 1 / f การสุ่มตัวอย่าง

t = 0: t การสุ่มตัวอย่าง: 0.005;
F0 = 1,000;
F1 = 3000;

xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t);
ht = fir1 (40, .25, 'หยุด');
yt = conv (xt, ht);

fAxis = -4000: 125: 4000-125;

xF = fft (xt, 64);
MagXF = fftshift (abs (xF));

พล็อต (fAxis, MagXF);
ยึดมั่นใน

yF = fft (yt, 64);
MagYF = fftshift (abs (yF));

พล็อต (fAxis, MagYF 'R')

1
การกรองแบบแบนด์ / แบนด์สต็อปในความไม่สมบูรณ์แบบโดยเนื้อแท้และจะส่งผลต่อพื้นที่ของสเปกตรัมที่คุณต้องการแยกออกจากกันเสมอ มันเป็นธรรมชาติของสัตว์ร้าย
Daniel R Hicks

1
อืม ... มีวิธีที่จะจัดการกับเรื่องนี้หรือไม่? หรือตัวกรองอื่นที่ค่อนข้างง่ายซึ่งจะเหมาะกว่า ฉันไม่รู้อะไรมากเกี่ยวกับตัวกรองรอยหยัก แต่ฉันรู้ว่ามันเป็นตัวกรองแบบหยุดแบนด์ที่แคบมากและ Matlab นั้นมีคำสั่งสำหรับพวกเขา
Zaubertrank

2
อย่างที่ฉันพูดมันเป็นเรื่องปกติ การออกแบบตัวกรองนั้นเป็นการแลกเปลี่ยนในแง่ของการปรับพารามิเตอร์บางอย่างให้เหมาะสมด้วยค่าใช้จ่ายของผู้อื่น (และค่าใช้จ่าย)
Daniel R Hicks

คำตอบ:


12

ตัวกรองจะมี "การหมุน" โดยธรรมชาติในการตอบสนองความถี่ของพวกเขาเพราะคุณไม่สามารถตระหนักถึงวงผ่านที่เป็นฟังก์ชันสี่เหลี่ยมที่สมบูรณ์แบบ สำหรับตัวกรองความถี่ต่ำจุดที่ขนาดของการตอบสนองความถี่ของคุณลดลงถึง -3dB เรียกว่า pass-band และทุกสิ่งที่อยู่นอกเหนือนั้นเรียกว่า stop-band (โดยทางเทคนิคทุกอย่างที่อยู่นอกเหนือความถี่มุม แต่เราจะใช้ ความถี่มุมจะเป็นระดับ -3dB) การตอบสนองความถี่ของคุณนั้นรวดเร็วแค่ไหนนั้นจะลดทอนสัญญาณผ่าน Pass-Band นั้นขึ้นอยู่กับความยาวของตัวกรอง

หากคุณดูการตอบสนองความถี่ของตัวกรองhtคุณจะเห็นว่ามันลดลงเหลือ -6dB ที่ 1,000 Hz:

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

ดังนั้นจึงสมเหตุสมผลที่พลังงานลดลง 6dB หลังจากการกรองซึ่งคุณเห็นในรูปของคุณว่าลดลงครึ่งหนึ่งในแอมพลิจูด

หากคุณได้ดูเอกสารสำหรับfir1ฟังก์ชั่นที่คุณใช้คุณจะได้ตระหนักถึงสิ่งนี้ด้วย (เน้นที่เหมือง):

B = fir1(N,Wn)ออกแบบNเพื่อ lowpass TH FIR กรอง' ดิจิตอลและส่งกลับค่าสัมประสิทธิ์กรองยาวเวกเตอร์N+1 Bความถี่การตัด Wn ต้องอยู่ระหว่าง0 < Wn < 1.0โดย1.0 สอดคล้องกับอัตราตัวอย่างครึ่งหนึ่ง ตัวกรองBเป็นจริงและมีเฟสเชิงเส้น อัตราขยายปกติของตัวกรองที่ Wn คือ -6 dB

ตอนนี้เพื่อสร้างตัวกรองที่คมชัดกว่าด้วยการตอบสนองที่ใกล้เคียงกับสี่เหลี่ยมผืนผ้าคุณจะต้องใช้ตัวกรอง IIR ซึ่งมาพร้อมกับโฮสต์ของปัญหาความมั่นคง ฯลฯ แต่เป็นตัวเลือกแน่นอน คุณสามารถดูคำตอบของฉันได้ที่นี่สำหรับแนวคิดบางประการเกี่ยวกับการใช้ตัวกรอง IIR ในรูปแบบไม่ต่อเนื่องส่วนที่สองลำดับที่สอง ตัวอย่างมีไว้สำหรับตัวกรอง band-pass แต่คุณสามารถอ่านเอกสารสำหรับฟังก์ชั่นที่ใช้ที่นั่นและสร้างเวอร์ชัน low-pass ด้วยตัวเอง


1

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


0

ใช้

ht = fir1(40,.5,'stop');

แต่คุณจะมีการลดทอนที่ต่ำมากที่ F0 และการลดทอนที่สูงมากที่ F1

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

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