ตัวกรองเชิงเส้น Savitzky – Golay กับ IIR หรือตัวกรองเชิงเส้น FIR


11
  • ตัวกรอง IIR / FIR ดั้งเดิม (lowpass เพื่อกำจัดการแกว่งความถี่สูง) เช่นค่าเฉลี่ยเคลื่อนที่

  • หรือตัวกรองSavitzky-Golay

ทุกคนสามารถเป็นประโยชน์ในการทำให้สัญญาณเรียบขึ้นเช่นสัญญาณซองจดหมาย:

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

ตัวกรอง Savitzky-Golay จะน่าสนใจมากกว่าแอพพลิเคชั่น lowpass แบบคลาสสิกอย่างไร

อะไรทำให้แตกต่างจากตัวกรองมาตรฐานและมันเพิ่มอะไรเมื่อเปรียบเทียบกับตัวกรองมาตรฐาน

มันปรับตัวเองเข้ากับข้อมูลอินพุตหรือไม่

มันจะดีกว่าสำหรับการรักษาชั่วคราว?


คุณเคยอยู่ในสถานการณ์ทางวิศวกรรมมาแล้ววันหนึ่งเมื่อคุณตัดสินใจว่า"ลองใช้ตัวกรอง SG แทนค่าเฉลี่ยเคลื่อนที่หรือ lowpass FIR ตัวอื่นดีกว่าเพราะสิ่งนี้กับสิ่งนี้และสิ่งนี้ ... " ? ถ้าอย่างนั้นคำถามนี้เหมาะสำหรับคุณ!

คำตอบ:


4

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

ก่อนอื่นฉันต้องการทำซ้ำสิ่งที่เป็นที่ชัดเจนในการอภิปรายที่วางไข่จากคำตอบอื่น ๆ : การจัดหมวดหมู่ของตัวกรองที่ปรับให้เรียบในคำถามเป็นตัวกรองแบบเชิงเส้นและไม่แปรเปลี่ยนเวลา (LTI) FIR / IIR ตัวหนึ่ง ตัวกรอง Savitzky-Golay ในทางกลับกันทำให้เข้าใจผิด ตัวกรอง Savitkzy-Golay เป็นเพียงตัวกรอง FIR มาตรฐานที่ออกแบบตามเกณฑ์เฉพาะ (การประมาณพหุนามท้องถิ่น) ดังนั้นตัวกรองทั้งหมดที่กล่าวถึงในคำถามคือตัวกรอง LTI

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

นอกเหนือจากข้อควรพิจารณาที่กล่าวถึงในย่อหน้าก่อนหน้ามันเป็นเกณฑ์การออกแบบที่สำคัญไม่มากถ้าตัวกรองเป็น FIR หรือ IIR เนื่องจากตัวกรอง IIR ใด ๆ (เสถียร) สามารถประมาณได้อย่างแม่นยำด้วยตัวกรอง FIR และใด ๆ ตัวกรอง FIR สามารถประมาณได้โดยตัวกรอง IIR แม้ว่าตัวกรองหลังนั้นจะยากกว่ามาก เกณฑ์การออกแบบที่เหมาะสมนั้นขึ้นอยู่กับคุณสมบัติของข้อมูลและเสียงรบกวน เมื่อพูดถึงการปรับให้เรียบเรามักจะถือว่าข้อมูลที่มีขนาดใหญ่เกินไป (เช่นความราบรื่น) เพียงพอ หากเสียงนั้นมีส่วนประกอบความถี่สูงเป็นส่วนใหญ่เช่นหากมีการซ้อนทับกันของข้อมูลกับเสียงน้อยเราต้องการที่จะลดทอนสัญญาณย่านความถี่สูงสุดหรือลดพลังงานของแถบความถี่ในขณะที่รักษาสัญญาณที่ต้องการไว้ให้ได้มากที่สุด ในกรณีนี้เราสามารถเลือกตัวกรอง FIR เชิงเส้นเฟสที่ออกแบบตามเกณฑ์ขั้นต่ำสุดโดยใช้อัลกอริทึม Parks-McClellan นอกจากนี้เรายังสามารถลดพลังงานวงหยุด (เช่นลดเสียงรบกวนในวงหยุด) โดยเลือกวิธีกำลังสองน้อยที่สุด การผสมผสานระหว่างเกณฑ์สองข้อ (minimax และ squins น้อยที่สุด) เป็นไปได้โดยเลือก aจำกัด การออกแบบกำลังสองน้อยที่สุดซึ่งลดพลังงานวงหยุดในขณะที่ จำกัด ข้อผิดพลาดการประมาณค่าสูงสุดในแถบความถี่

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

(1)dkH(ejω)dωk|ω=0=0k=1,2,,r

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

แน่นอนว่ายังมีการประนีประนอมระหว่างตัวกรองที่ปรับให้เรียบสองชนิดที่กล่าวถึงข้างต้น (การลดทอนสัญญาณ Stopband สูงและ SG) เราสามารถออกแบบตัวกรอง FIR ด้วยความเรียบระดับหนึ่งที่และใช้องศาอิสระที่เหลือเพื่อลดการหยุดการลดทอนของวงดนตรีให้มากที่สุดหรือลดพลังงาน Stopband ในกรณีของตัวกรอง FIR ปัญหาการออกแบบที่เกิดขึ้นนั้นง่ายพอ (และนูน) และรูทีนการปรับให้เหมาะสมทั่วไปที่มีอยู่ในแพ็คเกจซอฟต์แวร์ต่างๆสามารถใช้เพื่อขอรับตัวกรองที่ดีที่สุดสำหรับแอปพลิเคชันที่กำหนดω=0

สำหรับผู้ที่สนใจในทฤษฎีของตัวกรอง SG การอ้างอิงที่เกี่ยวข้องที่สุดที่ฉันสามารถแนะนำได้มีดังต่อไปนี้:


2

บางครั้งเครื่องมือบางอย่างก็ดีกว่าเครื่องมืออื่น ๆ

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

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

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

แก้ไข :

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

เมื่อดูรูปนี้คุณจะเห็นได้ว่า MA และ SG นั้นทำสิ่งเดียวกันได้ แต่มีความแตกต่างที่สำคัญ:

  1. แมสซาชูเซตทำงานได้อย่างยอดเยี่ยมในการลดเสียงรบกวน แต่มันก็ทำงานได้ไม่ดีในการจับสัญญาณข้ามชั่วคราวในสัญญาณ เราสามารถลดสัญญาณรบกวนได้มากขึ้นโดยการเพิ่มความยาวของตัวกรอง แต่จากนั้นมันจะทำงานได้แย่ลงกว่าเดิม เอฟเฟกต์นี้จะถูกมองว่าเป็น "การละเลง" ใกล้ ๆ กับสภาวะชั่วครู่ชั่วคราวซึ่งคุณควรเห็นในภาพที่แสดง
  2. SG ทำงานได้อย่างยอดเยี่ยมในการจับสัญญาณชั่วคราวของสัญญาณ แต่ทำหน้าที่ได้อย่างยอดเยี่ยมในการลดเสียงรบกวน (อย่างน้อยก็เมื่อเทียบกับ MA ที่มีขนาดเท่ากัน) เราสามารถปรับปรุงการลดเสียงรบกวนที่อยู่ใกล้กับผู้ไม่ชั่วคราวโดยการเพิ่มความยาวของเฟรม แต่สิ่งนี้จะแนะนำการเรียกเข้าที่คล้ายกับปรากฏการณ์ของ Gibb ที่อยู่ใกล้ ๆ

เพื่อให้คุณได้รับความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการทำงานของตัวกรองเหล่านี้ฉันขอแนะนำให้คุณใช้รหัสที่นี่และจัดการและดูว่าแต่ละส่วนของตัวกรอง SG ทำงานอย่างไร

รหัสสำหรับตัวอย่าง MATLAB:

% Generate a signal "s" that has square waves, and scale it with a
% polynomial of order 5
up = 1*ones(1,100);
down = zeros(1,150);
s = [down down up up down up down up down up up up down down down down down];
n = numel(s);
nn = linspace(0,4,numel(s));
s = s .* (nn .^5);
sn = (s + 4*randn(size(s))).';

% smooth it with SMA of length 15
sz = 15;
h = 1/sz * ones(1,sz);
sn_sma = conv(sn,h,'same');

% smooth it with sgolay of frame length 15
m = (sz-1)/2;
% look up the SG matrix for this order and size
B = sgolay(5, sz);

% compute the steady state response for the signal, i.e. everywhere that
% isnt the first or last "frame" for the SG filter
steady = conv(sn, B(m+1,:), 'same');
% handle the transiet portion at the start of the signal
y_st   = B(1:m,:)*sn(1:sz);
% handle the transient portion at the end of the signal
y_en   = B(sz -m+1 : sz, :) * sn(n - sz+1:n);

% combine our results
sn_sg  = steady;
sn_sg(1:m) = y_st;
sn_sg(n-m+1:n) = y_en;

% plots
figure(1);
hold off;
plot(sn,'Color',[0.75 0.75 0.75]);
hold on;
plot(sn_sma,'b');
plot(sn_sg,'r');

legend('Noisy Signal','MA Smoothing','SG Smoothing, order 5','Location','NorthWest');

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

1
ตัวกรอง SG เพื่อความเข้าใจของฉันจากการนำไปใช้หลายครั้งไม่ใช่ตัวกรองการปรับตัวเลยโดยเฉพาะอย่างยิ่งเมื่อเปรียบเทียบกับตัวกรองการปรับตัวโดยเฉลี่ยของคุณเช่น LMS หรือ RLS ฉันไม่เห็นด้วยอย่างยิ่งกับคำแถลงว่าน้ำหนักตัวกรองนั้นเปลี่ยนแปลงไปตามเวลา ตัวกรอง SG คือการค้นหาตารางโดยคุณกรองด้วยค่าจากตารางเพื่อคำนวณการตอบสนองชั่วคราวจากนั้นคุณกลับไปจัดการกับตัวพิมพ์ขอบที่จุดเริ่มต้น / สิ้นสุดของสัญญาณ ฉันจะแก้ไขโพสต์ด้วยตัวอย่าง MATLAB เพื่อแสดงให้คุณเห็น
matthewjpollard

2
@matthewjpollard หากต้องการทราบว่าฉันไม่ได้มีประสบการณ์ที่สำคัญในการใช้ตัวกรองนี้ แต่สำหรับฉันตัวกรอง SG ที่ใช้งานได้ดีที่สุดนั้นดูเหมือนจะเป็นการปรับใช้ตัวกรองแบบปรับตัวได้มาก วิธีที่คุณใช้ตัวกรองในรหัสของคุณไม่ใช่ (ตามที่คุณถือว่าลำดับทั้งหมดเป็นข้อมูล "ชุดย่อย") แต่วิธีเฉพาะตามที่อธิบายไว้ใน Wikipedia en.wikipedia.org/wiki/Savitzky%E2%80% 93Golay_filter และในกระดาษโดย Savitzky และ Golay สามารถปรับตัวได้: pdfs.semanticscholar.org/4830/…
Dan Boschen

2
@matthewjpollard ในระบบเรียลไทม์ของคุณเป็นข้อมูลของคุณที่เคยสตรีมอย่างต่อเนื่องเพื่อให้คุณคำนวณค่าสัมประสิทธิ์ในช่วงเวลาที่สั้นลงหรือคุณมักจะทำงานในกลุ่มของข้อมูลขนาดเล็กหรือไม่?
Dan Boschen

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

2

บันทึก

คำตอบก่อนหน้าของฉัน (ก่อนการแก้ไขนี้) แสดงว่าตัวกรอง Savitzky-Golay (SG) เป็นข้อมูลที่ไม่เป็นเชิงเส้นขึ้นอยู่กับการป้อนข้อมูลเวลาที่ไม่ถูกต้องเนื่องจากการตีความผิดพลาดก่อนกำหนดว่าตัวกรอง Savitzky-Golay (SG) คำนวณอย่างไร ตามลิงค์ของวิกิที่ให้ไว้ ดังนั้นตอนนี้ฉันจะแก้ไขเพื่อประโยชน์ของผู้ที่จะเห็นว่าตัวกรอง SG สามารถใช้งานได้อย่างไรโดยตัวกรอง FIR-LTI ขอบคุณ @MattL สำหรับการแก้ไขของเขาการเชื่อมโยงที่ยอดเยี่ยมที่เขาได้จัดเตรียมไว้และความอดทนที่เขามี (ที่ฉันไม่เคยเห็นมาก่อน) ระหว่างการสอบสวนปัญหาของฉัน แม้ว่าฉันจะซื่อสัตย์ชอบการคัดค้านอย่างละเอียดมากขึ้นซึ่งไม่จำเป็นต้องชัดเจน โปรดทราบว่าคำตอบที่ถูกต้องคือคำตอบอีกข้อหนึ่งนี่เป็นเพียงการชี้แจงเพิ่มเติมเกี่ยวกับคุณสมบัติ LTI ของตัวกรอง SG

ตอนนี้ก็ไม่น่าแปลกใจที่เมื่อใครบางคน (ที่ไม่เคยใช้ตัวกรองเหล่านั้นมาก่อน) เผชิญกับคำจำกัดความของตัวกรอง SG ในรูปแบบLSE ที่มีพหุนามต่ำเพื่อให้ได้รับข้อมูลเขา / เธอจะกระโดดลงไปทันที เวลา (กะ) เปลี่ยนแปลงตัวกรองปรับ

อย่างไรก็ตามขั้นตอนการปรับพอดีกับพหุนามถูกตีความอย่างชาญฉลาดโดย SG ซึ่งช่วยให้สามารถกรองข้อมูลได้อย่างอิสระไม่แปรเปลี่ยนเวลาและเป็นเส้นตรงจึงทำให้ SG เป็นตัวกรอง LTI-FIR คงที่

ด้านล่างนี้เป็นข้อมูลสรุปสั้น ๆ จากลิงก์ที่จัดหาโดย MattL สำหรับรายละเอียดใด ๆ ที่ดูเหมือนว่าหายไปโปรดอ่านเอกสารต้นฉบับหรือขอคำชี้แจง แต่ฉันไม่ต้องการผลิตเอกสารทั้งหมดที่นี่อีกครั้ง

ตอนนี้ให้พิจารณาค่าข้อมูลอินพุต ซึ่งอยู่กึ่งกลางและสิ่งที่เราต้องการให้พอดีกับพหุนามของคำสั่งโดยมีเป็นดัชนีเวลาจำนวนเต็ม:2M+1x[M],x[M+1],...,x[0],x[1],...,x[M]n=0p[n]Nn=M,M+1,...,1,0,1,...M

p[n]=k=0Naknk=a0+a1n+a2n2+...+aNnN

LSE แบบโพลิโนเมียลแบบคลาสสิกขั้นตอนการคำนวณสัมประสิทธิ์เหล่านั้นเพื่อหาคำตอบที่ดีที่สุดคำสั่งพหุนามที่ช่วยลดผลรวมของความคลาดเคลื่อนกำลังสองakNthp[n]

E=MM(p[n]x[n])2

เหนือเวกเตอร์ข้อมูลที่กำหนด{T}x=[x[M],x[M+1],...,x[0],x[1],...,x[M]]T

ค่าสัมประสิทธิ์พหุนามที่ดีที่สุดนั้นได้มาจากการตั้งค่าอนุพันธ์ของเป็นศูนย์:akE

(1)Eai=0   ,   for    i=0,1,..,N

ตอนนี้สำหรับผู้ที่คุ้นเคยกับกระบวนการ LSE polyfit ฉันจะเขียนสมการเมทริกซ์ที่ได้ (จากลิงค์) ที่กำหนดชุดสัมประสิทธิ์ที่เหมาะสม:

(2)a=(ATA)1ATx=Hx
โดยที่คือเวกเตอร์ข้อมูลอินพุตคูณ 1,คือ LSE polyfit matrix และโดย matrixเป็นเมทริกซ์ทันทีของเวลา (พลังของจำนวนเต็มเวลา ); คือทราบว่าทั้งสองจึงมีค่ของข้อมูลเข้าเป็นค่าจะได้รับโดย:x(2M+1)×1H2M+1NAnAHA

A=[αn,i]=[(M)0(M)1...(M)N(M+1)0(M+1)1...(M+1)N...(0)0(0)1...(0)N...(M)0(M)1...(M)N]

ทีนี้ลองย้อนกลับไปสักครู่แล้วพูดถึงประเด็นที่นี่

ตามที่ eq. (2) บ่งชี้อย่างชัดเจนแม้ว่าและจะไม่ขึ้นกับข้อมูลอินพุตและขึ้นอยู่กับดัชนีเวลาเท่านั้นสัมประสิทธิ์พหุนาม LSE ที่ดีที่สุดขึ้นอยู่กับข้อมูลอินพุต นอกจากนี้พวกเขายังขึ้นอยู่กับขนาดของหน้าต่างและคำสั่งของพหุนามNยิ่งไปกว่านั้นเมื่อหน้าต่างเลื่อนตามข้อมูลอินพุตค่าสัมประสิทธิ์ควรจะถูกคำนวณใหม่ (อัพเดท) ดังนั้นจึงขึ้นอยู่กับเวลาด้วยเช่นกัน นั่นคือวิธีที่ตัวกรอง SG ถูกกำหนดในลิงก์ที่หน้าคัดลอกมาด้านล่าง:AHnakMNx[n]ak2nd

... นี่ (LSE polyfit) สามารถทำซ้ำในแต่ละตัวอย่างของอินพุตแต่ละครั้งที่สร้างพหุนามใหม่และค่าใหม่ของลำดับเอาต์พุต y [n] ...

ดังนั้นเราจะเอาชนะความประหลาดใจที่ทำให้งงงวยนี้ได้อย่างไร โดยการตีความและกำหนดเอาต์พุตตัวกรอง SG ให้เป็นดังต่อไปนี้:

ตัวกรอง SG ของคำสั่งในแต่ละครั้งตัวอย่างยอมรับชุดอินพุตและสร้างตัวอย่างเอาต์พุตเดี่ยวกำหนดให้เป็นพหุนามประเมินที่ ; กล่าวคือNnx[n]y[n]p[n]n=0

y[n]=y[0]=m=0Namnm=a0

นั่นคือสำหรับแต่ละชุดอินพุตของตัวอย่างของ (กึ่งกลางประมาณ ) ตัวกรอง SG จะสร้างเอาต์พุตซึ่งแสดงโดยซึ่งเทียบเท่ากับค่าสัมประสิทธิ์เดียวของ LSE ที่ดีที่สุด พหุนามที่เกี่ยวข้องกับหน้าต่างโดยเฉพาะอย่างยิ่งที่กลุ่มตัวอย่าง[n] อนึ่งเมื่อหน้าต่างเลื่อนตามความยาวของข้อมูลที่ป้อนในทุกครั้งที่ตัวอย่างเอาต์พุตใหม่จะถูกคำนวณตามหน้าต่างของตัวอย่างM] นี่คือตัวกรอง nancusal2M+1x[n]n=dy[n]a0p[n]x[n]n=dy[d]x[dM],x[dM+1],...,x[d1],x[d],x[d+1],...x[d+M]

ตอนนี้เป็นเวลาที่จะแสดงให้เห็นว่าค่าสัมประสิทธิ์จะได้รับเป็นรวมกันเชิงเส้นของค่าสัญญาณอินพุตในหน้าต่างและกรองเอาท์พุทดังนั้นจึงเป็นเรื่องการรวมกันเชิงเส้นของค่าที่ป้อนเข้า[N] และนี่คือคำจำกัดความของการโน้มน้าว (LTI) ผ่านตัวกรอง FIR การส่งออกในเวลาที่เป็นชุดเชิงเส้นของปัจจัยการผลิตและค่าสัมประสิทธิ์กรอง[N] แต่แล้วค่าสัมประสิทธิ์ตัวกรองสำหรับตัวกรอง SG นี้คืออะไร มาดูกัน.a0x[n]y[n]x[n]nx[n]h[n]

พิจารณาการคำนวณอีกครั้ง:ak

a=Hx

[a0a1aN]=[h(0,0)h(0,1)...h(0,2M)h(1,0)h(1,1)...h(1,2M)...h(N,0)h(0,1)...h(0,2M)][x[M]x[M+1]...x[M]]

จากที่เราจะเห็นว่าเดียวได้รับจากผลคูณของจุดของแถวแรกของกับเวกเตอร์ข้อมูลอินพุต ; กล่าวคือa0Hx

a0=H(0,n)x=H(0,k)x[k]=H(0,n)x[n]

โดยที่ในความเท่าเทียมกันครั้งสุดท้ายเราได้ตีความผลคูณของดอทโปรดักท์เป็นผลรวมของการแปลงโดยพิจารณาการตอบสนองแบบอิมพัลส์ของตัวกรอง SG ให้เป็น ,

h[n]=H(0,n)

มากขึ้นโดยเฉพาะมันกระตุ้นการตอบสนองของตัวกรองของการสั่งซื้อที่ SGที่มีความยาวของหน้าต่าง 1N2M+1

และเอาต์พุตที่สมบูรณ์ของตัวกรอง SG ลำดับที่ N ที่มีขนาดหน้าต่างสำหรับอินพุตของความยาวได้มาจากการแปลง LTI แบบเดี่ยวพร้อมการตอบสนองแบบแรงกระตุ้นy[n]2M+1x[n]LhN[n]

y[n]=x[n]hN[n]

แสดงความคิดเห็น

ความจริงที่ว่าค่าสัมประสิทธิ์พหุนามขึ้นอยู่กับข้อมูลอินพุตไม่ได้ป้องกันตัวกรองจากการเป็น LTI FIR เนื่องจากการตอบสนองต่อแรงกระตุ้นสามารถกำหนดให้เป็นตัวแทนของเอาต์พุตที่จะคำนวณจากชุดค่าผสมเชิงเส้นของตัวอย่างอินพุต การรวมกันเชิงเส้นของตัวอย่างอินพุตถูกบอกเป็นนัยโดยผลิตภัณฑ์เมทริกซ์ที่กำหนดสัมประสิทธิ์ที่ดีที่สุดของดังนั้นการรวมกันเชิงเส้นของก็จะส่งผลให้ตัวกรอง FIR LTIเป็นตัวแทน โพรซีเดอร์การพอดี LSE ของ LSEakh[n]y[n]xa=Hxakp[n]akh[n]

รหัส MATLAB / OCTVE

MATLAB / OCTAVE อย่างง่ายต่อไปนี้สามารถใช้ในการคำนวณการตอบสนองฟิลเตอร์ SG ได้ (โปรดทราบว่าตัวออกแบบ SG ที่สร้างขึ้นในตัวมันอาจสร้างชุดแตกต่างกันตามลิงก์ -dd)h[n]h[n]

% Savitzky-Golay Filter
% 
clc; clear all; close all;

N = 3;                      % a0,a1,a2,a3 : 3rd order polynomial
M = 4;                      % x[-M],..x[M] . 2M + 1 data

A = zeros(2*M+1,N+1);
for n = -M:M
    A(n+M+1,:) = n.^[0:N];
end

H = (A'*A)^(-1)* A';        % LSE fit matrix

h = H(1,:);                 % S-G filter impulse response (nancausal symmetric FIR)

figure,subplot(2,1,1)
stem([-M:M],h);
title(['Impulse response h[n] of Savitzky-Golay filter of order N = ' num2str(N), ' and window size 2M+1 =  ' , num2str(2*M+1)]);

subplot(2,1,2)
plot(linspace(-1,1,1024), abs(fftshift(fft(h,1024))));
title('Frequency response magnitude of h[n]');

ผลลัพธ์คือ:

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

หวังว่านี่จะช่วยแก้ปัญหา


2
@Fat32 ฉันคิดว่ามันเป็นเพราะมันเป็นรายการความคิดเห็นย้อนหลังไปนานดังนั้นเพื่อให้กระดานสะอาดพวกเขามักจะย้าย "เพื่อแชท" ยังคงอยู่ที่นั่นเพียงแค่ไม่เกะกะหน้าหลัก นั่นคือเหตุผลที่ระบบแนะนำให้ย้ายไปแชทเมื่อเวลาผ่านไปนาน เพื่อไม่ให้กลุ้มใจทุกคนยังคงรักคุณ
Dan Boschen

1
@ g6kxjv1ozn ฉันจะไปที่จุดนี้ ... โปรดรอ ...
Fat32

2
@ Fat32 เยี่ยมมาก! ฉันอ่านมัน แต่จะต้องอ่านมันและมันเขียนไว้อย่างชัดเจนฉันจะต้องติดตามด้วยดินสอและกระดาษทีละขั้นตอนเพื่อดูว่าคุณเป็นอย่างไร ขอขอบคุณที่ฝากข้อมูลทั้งหมดไว้ที่นี่
Dan Boschen

4
@DanBoschen: พหุนามไม่จำเป็นจริงๆมันเป็นเพียงหนึ่งวิธีในการอธิบายตัวกรอง SG พวกเขายังสามารถอธิบายได้ว่าฟิลเตอร์ลดอัตราการลดสัญญาณรบกวน (เช่นพลังงานของการตอบสนองความถี่) อาจมีการตอบสนองความถี่เป็นในซีและข้อ จำกัด ของความเรียบเพิ่มเติมที่ 0 cf เลย ส่วนในตัวกรอง SG ในหนังสือของ Orfanidis ที่เชื่อมโยงกับคำตอบของฉัน ω = 01ω=0
Matt L.

2
@DanBoschen ใช่แดนรหัสแสดงเพียงการตอบสนองแรงกระตุ้นตัวกรอง h [n] ... ให้ฉันทำซ้ำตัวเองอีกครั้ง แม้ว่าค่าสัมประสิทธิ์พหุนามจะทำอย่างแน่นอน (เป็นเส้นตรง) ขึ้นอยู่กับอินพุต (ท้องถิ่น) {x [nM], ... , x [n + M]}, การตอบสนองของตัวกรองแรงกระตุ้นไม่ได้ ความสับสนของเราเกิดจากความจริงที่ว่าเราคิดว่าสัมประสิทธิ์ตัวกรองเป็นหน้าที่ของสัมประสิทธิ์พหุนามซึ่งจะทำให้ตัวกรองเป็นเวลาที่แตกต่างกันและไม่เชิงเส้น แต่ตามที่ปรากฎนั่นไม่ใช่กรณี h [ n ]akh[n]
Fat32
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.