การย้าย ค่าเฉลี่ย กรอง ไมโครคอนโทรลเลอร์


ในขณะที่คนอื่น ๆ ได้พูดถึงคุณควรพิจารณาตัวกรอง IIR (ตัวตอบสนองแบบไม่ จำกัด อิมพัลส์) แทนที่จะใช้ตัวกรองฟิลเตอร์ฟิวเจอร์ตอบสนองที่คุณกำลังใช้อยู่ มีมากขึ้นไปได้ แต่ในตอนแรกอย่างรวดเร็วตัวกรอง FIR จะถูกนำมาใช้เป็นตัวคั่นที่ชัดเจนและตัวกรอง IIR ที่มีสมการ ตัวกรอง IIR ที่ฉันใช้เป็นจำนวนมากในไมโครคอนโทรลเลอร์คือตัวกรองสัญญาณขาเดียวแบบขั้วเดียว นี่คือดิจิตอลเทียบเท่าของตัวกรองสัญญาณ R-C แบบง่าย สำหรับแอปพลิเคชันส่วนใหญ่คุณลักษณะเหล่านี้จะมีลักษณะที่ดีกว่าตัวกรองช่องที่คุณใช้อยู่ การใช้ส่วนใหญ่ของตัวกรองกล่องที่ฉันพบเป็นผลมาจากคนที่ไม่ให้ความสนใจในคลาสการประมวลผลสัญญาณดิจิทัลไม่ใช่จากลักษณะเฉพาะของพวกเขา ถ้าคุณต้องการลดความถี่สูงที่คุณรู้ว่าเป็นสัญญาณรบกวนตัวกรองสัญญาณขาเดียวแบบขั้วเดียวจะดีกว่า วิธีที่ดีที่สุดในการใช้งานแบบดิจิทัลในไมโครคอนโทรลเลอร์คือ: FILT lt - FILT FF (NEW - FILT) FILT เป็นสถานะที่มีความคงทน นี่เป็นตัวแปรเดียวที่คุณต้องใช้เพื่อคำนวณตัวกรองนี้ NEW เป็นค่าใหม่ที่ตัวกรองจะได้รับการอัปเดตด้วยการทำซ้ำนี้ FF คือส่วนของตัวกรอง ซึ่งจะปรับความหนักเบาของตัวกรอง ดูที่ขั้นตอนนี้และดูว่าสำหรับ FF 0 ตัวกรองเป็นแบบอนันต์หนักเนื่องจากผลลัพธ์ไม่เคยเปลี่ยนแปลง สำหรับ FF 1 จริงๆไม่มีตัวกรองเลยตั้งแต่เอาท์พุททำตาม input ค่าที่เป็นประโยชน์อยู่ระหว่าง ในระบบขนาดเล็กที่คุณเลือก FF เป็น 12 N เพื่อให้คูณด้วย FF สามารถทำได้เป็น shift ขวาโดย N บิต ตัวอย่างเช่น FF อาจเป็น 116 และคูณด้วย FF ดังนั้นจึงมีการเลื่อนทางขวาเป็น 4 บิต มิเช่นนั้นตัวกรองนี้จะต้องมีเพียงหนึ่งคำเดียวลบออกและเพิ่มหนึ่งครั้งแม้ว่าตัวเลขจะต้องกว้างกว่าค่าอินพุท (มากกว่าความแม่นยำเชิงตัวเลขในส่วนที่แยกต่างหากด้านล่าง) ฉันมักจะใช้เวลาอ่านโฆษณาอย่างมีนัยสำคัญเร็วกว่าที่จำเป็นและใช้ตัวกรองเหล่านี้สองตัวเรียงกัน นี่คือดิจิตอลเทียบเท่าของตัวกรอง R-C สองชุดและลดลง 12 dBoctave เหนือความถี่ rolloff อย่างไรก็ตามสำหรับการอ่านโฆษณามักจะมีความเกี่ยวข้องมากขึ้นในการดูตัวกรองในโดเมนเวลาโดยพิจารณาการตอบกลับขั้นตอน นี่จะบอกคุณว่าระบบของคุณจะเห็นการเปลี่ยนแปลงอย่างไรเมื่อสิ่งที่คุณกำลังวัดการเปลี่ยนแปลง เพื่ออำนวยความสะดวกในการออกแบบตัวกรองเหล่านี้ (ซึ่งหมายถึงการเลือก FF และการตัดสินใจว่าจะให้น้ำตกมากเพียงใด) ฉันใช้ FILTBITS ของโปรแกรม คุณระบุจำนวนของบิต shift สำหรับแต่ละเฟรมในชุดตัวกรองแบบเรียงซ้อนและคำนวณค่าการตอบสนองขั้นตอนและค่าอื่น ๆ ที่จริงฉันมักจะใช้นี้ผ่าน wrapper script PLOTFILT ของฉัน การดำเนินการนี้จะเรียกใช้ FILTBITS ซึ่งจะสร้างไฟล์ CSV จากนั้นแปลงไฟล์ CSV ตัวอย่างเช่นนี่คือผลของ PLOTFILT 4 4: พารามิเตอร์สองตัวของ PLOTFILT หมายความว่าจะมีตัวกรองสองแบบเรียงตามลำดับชั้นดังกล่าวข้างต้น ค่าของ 4 ระบุจำนวนของกะบิตเพื่อให้เกิดการคูณด้วย FF ทั้งสองค่า FF จึงเป็น 116 ในกรณีนี้ การติดตามสีแดงคือการตอบสนองต่อหน่วยและเป็นสิ่งสำคัญที่ต้องดู ตัวอย่างเช่นข้อมูลนี้บอกให้คุณทราบว่าหากข้อมูลอินพุตเปลี่ยนแปลงทันทีผลลัพธ์ของตัวกรองรวมจะกำหนดให้เท่ากับ 90 ค่าใหม่ใน 60 ซ้ำ ถ้าคุณสนใจเกี่ยวกับเวลาการตั้งถิ่นฐาน 95 แล้วคุณต้องรอประมาณ 73 ซ้ำและสำหรับเวลาการตกตะกอนเพียง 26 ซ้ำ ร่องรอยสีเขียวแสดงให้เห็นว่าคุณได้รับเอาท์พุทจากการขยายความกว้างเต็มรูปแบบเดียว นี้จะช่วยให้คุณมีความคิดของการปราบปรามเสียงสุ่ม ดูเหมือนว่าไม่มีตัวอย่างเดียวจะทำให้เกิดการเปลี่ยนแปลงในเอาท์พุทมากกว่า 2.5 ร่องรอยสีน้ำเงินคือการให้ความรู้สึกอัตนัยของสิ่งที่ตัวกรองนี้ทำด้วยเสียงสีขาว นี่ไม่ใช่การทดสอบอย่างเข้มงวดเนื่องจากไม่มีการรับประกันว่าเนื้อหาใดเป็นตัวเลขสุ่มที่เลือกเป็นสัญญาณเสียงรบกวนสีขาวสำหรับการทำงานของ PLOTFILT นี้ เพียงเพื่อให้คุณรู้สึกขรุขระของเท่าใดก็จะถูกแบนและเรียบเป็นอย่างไร PLOTFILT บางที FILTBITS และสิ่งที่มีประโยชน์อื่น ๆ โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาเฟิร์มแวร์ของ PIC มีอยู่ในซอฟต์แวร์ PIC Development Tools ที่หน้าดาวน์โหลดซอฟต์แวร์ของฉัน เพิ่มความแม่นยำเชิงตัวเลขที่ฉันเห็นจากความคิดเห็นและตอนนี้เป็นคำตอบใหม่ที่มีความสนใจในการพูดคุยเกี่ยวกับจำนวนบิตที่จำเป็นในการใช้ตัวกรองนี้ โปรดทราบว่าคูณด้วย FF จะสร้างบิตใหม่ Log 2 (FF) ด้านล่างจุดไบนารี ในระบบขนาดเล็ก FF มักจะได้รับเลือกให้เป็น 12 N เพื่อให้การคูณนี้เกิดขึ้นจริงโดยการเปลี่ยน N บิตที่ถูกต้อง FILT จึงเป็นจำนวนเต็มจุดคงที่ โปรดทราบว่านี้ไม่ได้เปลี่ยนคณิตศาสตร์ใด ๆ จากมุมมองของตัวประมวลผล ตัวอย่างเช่นถ้าคุณกำลังกรองการอ่านโฆษณา 10 บิตและ N 4 (FF 116) คุณต้องใช้เศษเศษส่วนด้านล่าง 10 บิตจำนวนเต็ม AD อ่าน โปรเซสเซอร์ส่วนใหญ่คุณจะต้องดำเนินการเป็นจำนวนเต็ม 16 บิตเนื่องจากการอ่านค่า 10 บิต AD ในกรณีนี้คุณยังคงสามารถดำเนินการได้ตามจำนวนเต็ม 16 บิตเดิม แต่เริ่มต้นด้วยการอ่านค่า AD ด้านซ้ายที่เปลี่ยนไป 4 บิต โปรเซสเซอร์ไม่ทราบความแตกต่างและไม่จำเป็นต้องทำ การทำคณิตศาสตร์กับจำนวนเต็ม 16 บิตทั้งหมดใช้งานได้ไม่ว่าคุณจะถือว่าเป็น 12.4 จุดคงที่หรือจำนวนเต็ม 16 บิตจริง (16.0 จุดคงที่) โดยทั่วไปคุณจำเป็นต้องเพิ่มบิต N แต่ละขั้วกรองหากคุณไม่ต้องการเพิ่มเสียงเนื่องจากการแสดงตัวเลข ในตัวอย่างข้างต้นตัวกรองที่สองของสองจะต้องมี 1044 18 บิตเพื่อไม่สูญเสียข้อมูล ในทางปฏิบัติบนเครื่อง 8 บิตซึ่งหมายความว่าคุณต้องใช้ค่าบิต 24 เทคนิคเฉพาะขั้วที่สองของสองจะต้องมีค่ามากขึ้น แต่สำหรับความเรียบง่ายของเฟิร์มผมมักจะใช้การแทนเดียวกันและด้วยรหัสเดียวกันสำหรับเสาทั้งหมดของตัวกรอง ฉันมักจะเขียนโปรแกรมย่อยหรือแมโครเพื่อทำการดำเนินการของเสากรองหนึ่งตัวจากนั้นจึงนำไปใช้กับเสาแต่ละอัน ไม่ว่าจะเป็นโปรแกรมย่อยหรือแมโครขึ้นอยู่กับว่าวงจรหรือหน่วยความจำโปรแกรมมีความสำคัญมากกว่าในโครงการนั้นหรือไม่ ไม่ว่าจะด้วยวิธีใดก็ตามฉันใช้สถานะการขูดขีดเพื่อส่ง NEW เข้าไปใน subroutinemacro ซึ่งอัปเดต FILT แต่ยังโหลดข้อมูลที่เป็นสถานะการขีดข่วนเหมือนเดิม NEW ซึ่งทำให้ง่ายต่อการใช้เสาหลายอันเนื่องจาก FILT อัปเดตของเสาเดียวคือ NEW ของหน้าถัดไป เมื่อโปรแกรมย่อยมีประโยชน์ที่จะมีจุดชี้ไปที่ FILT ระหว่างทางซึ่งได้รับการอัปเดตเป็นเพียง FILT เมื่อออกไป ด้วยวิธีนี้โปรโตคอลย่อยจะทำงานกับตัวกรองข้อมูลที่ต่อเนื่องในหน่วยความจำโดยอัตโนมัติหากเรียกหลาย ๆ ครั้ง กับแมโครคุณไม่จำเป็นต้องชี้ตั้งแต่คุณผ่านในที่อยู่ในการทำงานในแต่ละซ้ำ ตัวอย่างโค้ดนี่เป็นตัวอย่างของมาโครตามที่อธิบายไว้ข้างต้นสำหรับ PIC 18: และนี่คือแมโครที่คล้ายกันสำหรับ PIC 24 หรือ dsPIC 30 หรือ 33: ทั้งสองตัวอย่างนี้ถูกใช้เป็นแมโครโดยใช้ตัวประมวลผลแอ็กเซสเซอร์ของ PIC ของฉัน ซึ่งมีความสามารถมากขึ้นกว่าสิ่งอำนวยความสะดวกที่มีมาโครภายในตัวใดตัวหนึ่ง ปัญหาอื่นที่ควรจะกล่าวถึงคือการใช้เฟิร์มแวร์ คุณสามารถเขียนโพรโทคอลต่ำผ่านโพรเซสเซอร์ได้เพียงครั้งเดียวจากนั้นใช้หลายครั้ง ในความเป็นจริงฉันมักจะเขียนเช่น subroutine เพื่อนำตัวชี้ในหน่วยความจำไปยังสถานะตัวกรองแล้วมีมันล่วงหน้าตัวชี้เพื่อที่จะสามารถเรียกอย่างต่อเนื่องในการรับรู้หลายตัวกรองขั้ว ndash Olin Lathrop Apr 20 12 at 15:03 1. ขอบคุณมากสำหรับคำตอบของคุณ - ทั้งหมด ฉันตัดสินใจที่จะใช้ตัวกรอง IIR นี้ แต่ตัวกรองนี้ไม่ได้ใช้เป็นตัวกรอง LowPass มาตรฐานเพราะฉันต้องการเฉลี่ยค่าตัวนับและเปรียบเทียบเพื่อตรวจจับการเปลี่ยนแปลงในช่วงที่กำหนด เนื่องจากค่าเหล่านี้มีมิติแตกต่างกันไปโดยขึ้นอยู่กับฮาร์ดแวร์ที่ฉันต้องการใช้โดยเฉลี่ยเพื่อให้สามารถตอบสนองต่อการเปลี่ยนแปลงเฉพาะฮาร์ดแวร์เหล่านี้ได้โดยอัตโนมัติ ถ้าคุณสามารถอยู่กับข้อ จำกัด ของจำนวนสองรายการโดยเฉลี่ย (เช่น 2,4,8,16,32 ฯลฯ ) จากนั้นหารสามารถทำได้อย่างง่ายดายและมีประสิทธิภาพใน micro ประสิทธิภาพต่ำโดยไม่มีการทุ่มเทแบ่งเพราะสามารถทำได้เป็นบิตเปลี่ยน การเปลี่ยนสิทธิแต่ละครั้งเป็นหนึ่งในพลังของสองเช่น: OP คิดว่าเขามีปัญหาสองข้อแบ่งใน PIC16 และหน่วยความจำสำหรับบัฟเฟอร์แหวนของเขา คำตอบนี้แสดงให้เห็นว่าการหารไม่ใช่เรื่องยาก เป็นที่ยอมรับมันไม่ได้อยู่ที่ปัญหาหน่วยความจำ แต่ระบบ SE ช่วยให้คำตอบบางส่วนและผู้ใช้สามารถใช้อะไรจากคำตอบสำหรับตัวเองหรือแม้กระทั่งการแก้ไขและรวมคำตอบของผู้อื่น เนื่องจากบางส่วนของคำตอบอื่น ๆ ต้องการการดำเนินการแบ่งพวกเขาจะไม่เหมือนกันเหมือนกันเนื่องจากพวกเขาไม่แสดงวิธีการอย่างมีประสิทธิภาพบรรลุนี้บน PIC16 มีคำตอบสำหรับตัวกรองค่าเฉลี่ยเคลื่อนที่ที่แท้จริง (aka boxcar filter) ที่มีความต้องการหน่วยความจำน้อยกว่าถ้าคุณไม่เข้าใจการสุ่มตัวอย่าง เรียกว่าตัวกรองแบบผสมผสาน (cascaded integrator-comb filter) (CIC) แนวคิดคือคุณมีผู้ผสานรวมที่คุณใช้ความแตกต่างในช่วงเวลาหนึ่งและอุปกรณ์ประหยัดหน่วยความจำที่สำคัญคือโดยการสุ่มตัวอย่างคุณไม่จำเป็นต้องเก็บค่าของ Integrator ทุกตัว สามารถใช้งานได้โดยใช้ pseudocode ต่อไปนี้: ความยาวเฉลี่ยที่มีประสิทธิภาพของการเคลื่อนไหวของคุณคือ decimationFactorstatesize แต่คุณต้องเก็บตัวอย่างไว้ทั่ว เห็นได้ชัดว่าคุณสามารถทำงานได้ดีขึ้นหาก stateize และ decimationFactor ของคุณมีอำนาจเท่ากับ 2 เพื่อให้ตัวหารและตัวดำเนินการที่เหลือถูกแทนที่ด้วย shift และ mask-ands Postscript: ฉันเห็นด้วยกับ Olin ว่าคุณควรพิจารณาตัวกรอง IIR แบบธรรมดาก่อนที่จะใช้ตัวกรองเฉลี่ยที่เคลื่อนที่ หากคุณไม่จำเป็นต้องใช้ null-frequency ของตัวกรองรถกระบะตัวกรองความถี่ต่ำ 1 ขั้วหรือ 2 เสาจะทำงานได้ดี ในทางตรงกันข้ามถ้าคุณกำลังกรองเพื่อให้เป็นไปตามวัตถุประสงค์ของการ decimation (การป้อนข้อมูลที่มีอัตราการสุ่มตัวอย่างสูงและค่าเฉลี่ยสำหรับการใช้งานโดยกระบวนการที่มีอัตราต่ำ) ตัวกรอง CIC อาจเป็นเพียงสิ่งที่คุณกำลังมองหา (โดยเฉพาะถ้าคุณสามารถใช้ stateize1 และหลีกเลี่ยง ringbuffer ทั้งหมดด้วยค่า integrator เดียวก่อนหน้านี้) Theres บางการวิเคราะห์ในเชิงลึกของคณิตศาสตร์ที่อยู่เบื้องหลังการใช้ตัวกรอง IIR คำสั่งแรกที่ Olin Lathrop ได้อธิบายไว้แล้วในการประมวลผลสัญญาณสแตก สมการสำหรับตัวกรอง IIR คือ: สามารถใช้งานได้โดยใช้ตัวเลขจำนวนเต็มเท่านั้นและไม่มีส่วนใดโดยใช้รหัสต่อไปนี้ (อาจจำเป็นต้องมีการดีบักขณะที่กำลังพิมพ์จากหน่วยความจำ) ตัวกรองนี้ใกล้เคียงกับค่าเฉลี่ยเคลื่อนที่ของ ตัวอย่าง K ล่าสุดโดยการกำหนดค่า alpha เป็น 1K ทำเช่นนี้ในรหัสก่อนหน้าโดยกำหนด ing BITS เพื่อ LOG2 (K) เช่นสำหรับ K 16 ชุด BITS ถึง 4 สำหรับ K 4 ตั้ง BITS เป็น 2 ฯลฯ (ตรวจสอบรหัสไม่ได้ระบุไว้ที่นี่ทันทีที่ฉันได้รับการเปลี่ยนแปลงและ แก้ไขคำตอบนี้ถ้าจำเป็น.) ตอบ 23 มิถุนายน 12 ที่ 4:04 Heres เดียวขั้วต่ำผ่านตัวกรอง (เฉลี่ยเคลื่อนที่ด้วย cutoff ความถี่ CutoffFrequency) ง่ายมากเร็วมากใช้งานได้ดีและไม่มีค่าใช้จ่ายหน่วยความจำเกือบ หมายเหตุ: ตัวแปรทั้งหมดมีขอบเขตเกินกว่าฟังก์ชันตัวกรองยกเว้นการส่งผ่านข้อมูลใหม่หมายเหตุ: นี่เป็นตัวกรองแบบขั้นตอนเดียว หลายขั้นตอนสามารถต่อเข้าด้วยกันเพื่อเพิ่มความคมชัดของตัวกรอง ถ้าคุณใช้มากกว่าหนึ่งขั้นตอนคุณจะต้องปรับ DecayFactor (เกี่ยวข้องกับ Cutoff-Frequency) เพื่อชดเชย และเห็นได้ชัดว่าสิ่งที่คุณต้องมีคือสายสองเส้นวางไว้ที่ใดก็ได้พวกเขาไม่จำเป็นต้องใช้ฟังก์ชันของตัวเอง ตัวกรองนี้มีเวลาในการเล่นทางไกลก่อนที่ค่าเฉลี่ยเคลื่อนที่จะเป็นค่าของสัญญาณขาเข้า ถ้าคุณต้องการหลีกเลี่ยงเวลาที่เพิ่มขึ้นคุณสามารถเริ่มต้น MovingAverage ให้เป็นค่าแรกของ newInput แทนที่จะเป็น 0 และหวังว่าการป้อนข้อมูลใหม่ไม่ได้เป็นข้อผิดพลาด (CutoffFrequencySampleRate) มีช่วงระหว่าง 0 ถึง 0.5 DecayFactor คือค่าระหว่าง 0 ถึง 1 โดยปกติจะใกล้เคียงกับ 1. Single-precision floats ดีพอสำหรับสิ่งต่างๆส่วนใหญ่ฉันชอบคู่ผสม ถ้าคุณต้องการติดตัวเลขจำนวนเต็มคุณสามารถแปลง DecayFactor และ Amplitude Factor เป็นจำนวนเต็มเศษซึ่งเลขจะถูกเก็บไว้เป็นจำนวนเต็มและตัวหารจะเป็นจำนวนเต็มเท่ากับ 2 (เพื่อให้คุณสามารถเปลี่ยนบิตไปทางขวาได้ ตัวแทนที่จะแบ่งช่วงวนกรอง) ตัวอย่างเช่นถ้า DecayFactor 0.99 และคุณต้องการใช้ integers คุณสามารถตั้งค่า DecayFactor 0.99 65536 64881 จากนั้นทุกครั้งที่คุณคูณด้วย DecayFactor ในลูปไส้กรองของคุณเพียงแค่เปลี่ยนผลการค้นหา 16. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ออนไลน์บทที่ 19 เกี่ยวกับตัวกรอง recursive: dspguidech19.htm PS สำหรับกระบวนทัศน์ Moving Average วิธีการที่แตกต่างในการตั้งค่า DecayFactor และ AmplitudeFactor ที่อาจเกี่ยวข้องกับความต้องการของคุณมากขึ้นให้สมมติว่าคุณต้องการก่อนหน้านี้ประมาณ 6 รายการโดยเฉลี่ยด้วยกันทำเป็น discretely คุณเพิ่ม 6 รายการและหารด้วย 6 ดังนั้น คุณสามารถตั้งค่า AmplitudeFactor เป็น 16 และ DecayFactor ไปที่ (1.0 - AmplitudeFactor) ได้ ตอบวันที่ 14 พฤษภาคมเวลา 12: 00 น. ทุกคนได้ให้ความเห็นอย่างละเอียดเกี่ยวกับประโยชน์ของ IIR กับ FIR และในส่วนของอำนาจของทั้งสองฝ่าย Id ต้องการให้รายละเอียดการใช้งาน ด้านล่างทำงานได้ดีกับไมโครคอนโทรลเลอร์ขนาดเล็กที่ไม่มี FPU ไม่มีการคูณและถ้าคุณเก็บกำลังของ N ไว้ 2 ส่วนทั้งหมดจะถูกขยับบิตรอบเดียว บัฟเฟอร์แหวน FIR พื้นฐาน: เก็บบัฟเฟอร์ที่กำลังทำงานของค่า N ล่าสุดและค่า SUM ที่ใช้งานอยู่ทั้งหมดในบัฟเฟอร์ ทุกครั้งที่มีตัวอย่างใหม่ให้ลบค่าที่เก่าแก่ที่สุดในบัฟเฟอร์จาก SUM แทนที่ด้วยตัวอย่างใหม่ให้เพิ่มตัวอย่างใหม่เป็น SUM และ SUMN ออก การแก้ไขบัฟเฟอร์วงแหวน IIR: ให้ SUM ที่ทำงานอยู่ของค่า N ล่าสุด ทุกครั้งที่มีตัวอย่างใหม่เข้ามา SUM - SUMN ให้เพิ่มตัวอย่างใหม่และเอาต์พุต SUMN ตอบอ่าน 28 สิงหาคม 13 เวลา 13:45 หากอ่านหนังสือคุณถูกต้องคุณจะอธิบายตัวกรอง IIR แรกที่สั่งซื้อค่าที่คุณลบออกไม่ใช่ค่าที่เก่าแก่ที่สุดซึ่งหลุดออก แต่แทนที่จะเป็นค่าเฉลี่ยของค่าก่อนหน้า ตัวกรอง IIR ในลำดับแรกอาจเป็นประโยชน์ แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไรเมื่อคุณแนะนำว่าเอาท์พุทจะเหมือนกันสำหรับสัญญาณเป็นระยะ ๆ อัตราการสุ่มตัวอย่าง 10 กิโลเฮิรตซ์การป้อนคลื่นความถี่ 100Hz ลงในตัวกรองกล่อง 20 ขั้นตอนจะให้สัญญาณที่เพิ่มขึ้นอย่างสม่ำเสมอสำหรับ 20 ตัวอย่างอยู่สูง 30 หยดสม่ำเสมอสำหรับ 20 ตัวอย่างและอยู่ต่ำกว่า 30 ลำดับแรก ตัวกรอง IIR ndash supercat Aug 28 13 at 15:31 จะทำให้คลื่นที่เริ่มเพิ่มขึ้นอย่างรวดเร็วและค่อยๆลดระดับลงใกล้ (แต่ไม่อยู่ที่) ค่าอินพุตสูงสุดจากนั้นจะเริ่มลดลงอย่างรวดเร็วและค่อยๆลดระดับลงใกล้ (แต่ไม่น้อยกว่า) อินพุตต่ำสุด พฤติกรรมที่แตกต่างกันมาก ndash supercat Aug 28 13 at 15:32 ประเด็นหนึ่งก็คือค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายอาจเป็นประโยชน์หรือไม่ก็ได้ ด้วยตัวกรอง IIR คุณจะได้รับตัวกรองที่ดีกับ calcs ค่อนข้างน้อย FIR ที่คุณอธิบายสามารถให้สี่เหลี่ยมผืนผ้าได้ในเวลาเดียวเท่านั้นคือ sinc in freq และคุณไม่สามารถจัดการด้านข้างได้ มันอาจจะคุ้มค่าที่จะโยนในจำนวนเต็มไม่กี่คูณเพื่อทำให้มันสมมาตรปรับ FIR ที่ดีถ้าคุณสามารถสำรองนาฬิกาเห็บ ScottSeidman: ความจำเป็นในการคูณถ้าหนึ่งมีเพียงขั้นตอนของ FIR ทั้งสองเอาท์พุทค่าเฉลี่ยของการป้อนข้อมูลไปยังขั้นตอนนั้นและค่าที่เก็บไว้ก่อนหน้านี้และจากนั้นเก็บข้อมูล (ถ้ามี ช่วงตัวเลขหนึ่งสามารถใช้ผลรวมมากกว่าค่าเฉลี่ย) (การตอบสนองขั้นตอนของตัวกรองกล่องที่มีความล่าช้าโดยรวมของ 1ms ตัวอย่างเช่นจะมีการขัดขวาง d2dt ที่น่ารังเกียจเมื่อมีการเปลี่ยนแปลงการป้อนข้อมูลและอีก 1 ล้านครั้งในภายหลัง แต่จะมีค่าต่ำสุด ddt ที่เป็นไปได้สำหรับตัวกรองที่มีความล่าช้าทั้งหมด 1ms) เมื่อ mikeselectricstuff กล่าวว่าถ้าคุณต้องการจริงๆเพื่อลดความต้องการหน่วยความจำของคุณและคุณ dont ใจตอบสนองต่อแรงกระตุ้นของคุณเป็นเลขชี้กำลัง (แทนชีพจรสี่เหลี่ยมผืนผ้า) ฉันจะไปสำหรับตัวกรองเฉลี่ยเลขยกกำลัง. . ฉันใช้พวกเขาอย่างกว้างขวาง ด้วยตัวกรองชนิดดังกล่าวคุณไม่จำเป็นต้องมีบัฟเฟอร์ใด ๆ คุณไม่ต้องเก็บตัวอย่างที่ผ่านมา N แค่หนึ่ง. ดังนั้นความต้องการหน่วยความจำของคุณได้รับการลดลงโดยปัจจัยของเอ็นนอกจากนี้คุณไม่จำเป็นต้องแบ่งใด ๆ สำหรับที่ เฉพาะ multiplications ถ้าคุณมีการเข้าถึงเลขคณิตลอยตัวใช้ multiplications ทศนิยม มิฉะนั้นให้ทำ multiplications จำนวนเต็มและเลื่อนไปทางขวา อย่างไรก็ตามเราอยู่ในปี 2012 และขอแนะนำให้คุณใช้คอมไพเลอร์ (และ MCU) ที่ช่วยให้คุณสามารถทำงานกับตัวเลขลอยตัวได้ นอกเหนือจากหน่วยความจำที่มีประสิทธิภาพมากขึ้นและเร็วขึ้น (คุณ dont ต้องปรับปรุงรายการในวงกลม buffer ใด ๆ ) ฉันจะบอกว่ามันเป็นธรรมชาติมากขึ้น เนื่องจากการตอบสนองของแรงกระตุ้นเลขชี้กำลังจะตรงกับลักษณะการทำงานของธรรมชาติในกรณีส่วนใหญ่ ตอบเมื่อ 20 เมษายน 2012 เวลา 9:59 น. ปัญหาหนึ่งที่มีตัวกรอง IIR เกือบสัมผัสกับ olin และ supercat แต่เห็นได้ชัดว่าถูกมองข้ามโดยคนอื่น ๆ ก็คือการปัดเศษลงแนะนำข้อมูลบางอย่างที่ไม่ถูกต้อง (และอาจเกิดขึ้นได้ biastruncation) สมมติว่า N เป็นพลังของสองและใช้เลขคณิตจำนวนเต็มเท่านั้นการเปลี่ยนสิทธิจะทำให้ LSBs ของตัวอย่างใหม่เป็นระบบ นั่นหมายความว่าระยะเวลาที่เคยเป็นแบบนี้ค่าเฉลี่ยจะไม่นำมาพิจารณา ตัวอย่างเช่นสมมุติว่าชุดที่ลดลงอย่างช้าๆ (8,8,8. 8,7,7,7 .7,6,6) และสมมติว่าค่าเฉลี่ยมีค่าเริ่มต้นอยู่ที่ 8 ตัวอย่างกำปั้น 7 จะนำค่าเฉลี่ยไปที่ 7 โดยไม่คำนึงถึงความแข็งแรงของตัวกรอง เพียงแค่หนึ่งตัวอย่างเท่านั้น เรื่องเดียวกันสำหรับ 6 ฯลฯ ตอนนี้คิดว่าตรงข้าม ซีรีส์ขึ้น ค่าเฉลี่ยจะอยู่ที่ 7 ตลอดไปจนกว่าตัวอย่างจะใหญ่พอที่จะทำให้การเปลี่ยนแปลง แน่นอนคุณสามารถแก้ไขอคติโดยการเพิ่ม 12N2 แต่ที่เคยชินจริงๆแก้ปัญหาความแม่นยำ ในกรณีนี้ซีรีส์ที่ลดลงจะคงอยู่ตลอดไปที่ 8 จนกว่าตัวอย่างจะเป็น 8-12 (N2) สำหรับ N4 ตัวอย่างเช่นตัวอย่างใด ๆ ที่อยู่เหนือศูนย์จะทำให้ค่าเฉลี่ยไม่เปลี่ยนแปลง ผมเชื่อว่าการแก้ปัญหาแบบนี้จะถือเป็นการสะสมแอ็คเซสเซอร LSB ที่หายไป แต่ฉันไม่ได้ทำให้ไกลพอที่จะมีรหัสพร้อมและ Im ไม่แน่ใจว่าจะไม่เป็นอันตรายต่ออำนาจ IIR ในกรณีอื่น ๆ บางชุด (ตัวอย่างเช่น 7,9,7,9 จะเฉลี่ย 8 แล้ว) โอลินน้ำตกสองขั้นตอนของคุณก็จะต้องมีคำอธิบายบ้าง คุณหมายถึงการถือครองค่าเฉลี่ยสองค่าด้วยผลลัพธ์จากการนับครั้งแรกเป็นวินาทีในแต่ละการทำซ้ำ อะไรคือประโยชน์ของการนี้การกรองค่าเฉลี่ยการเคลื่อนที่แบบ Exponential IIR การกรองตัวแปรที่วัดได้ฝังตัววงจรไมโครคอนโทรลเลอร์ที่ใช้ฝังตัวอยู่เพื่อติดตามค่าเฉลี่ยของสัญญาณและเพื่อลดความแปรปรวนของข้อมูล เนื่องจากสัญญาณมีความแตกต่างกันไปในค่าเฉลี่ยเมื่อเวลาผ่านไปตัวกรองต้องมีวิธีในการทิ้งการวัดเก่า ๆ ในขณะที่ใช้ตัวอย่างใหม่ ตัวกรองการตอบสนองต่อการตอบสนองต่อการเลียนลอดแบบไม่ จำกัด จำนวนขั้นต่ำ (IIR) ที่ได้รับการอธิบายเป็นที่เข้าใจกันมานานหลายสิบปีและถูกนำมาใช้อย่างกว้างขวางในการวิเคราะห์ทางสถิติ เป็นวิธีที่เรียบง่ายในการคำนวณค่าเฉลี่ยของตัวแปรเมื่อไม่ทราบชื่อตัวแปรต้นแบบ ถ้า v n เป็นตัวแปรที่ถูกกรองตัวประมาณค่าที่ n สำหรับค่าเฉลี่ยคือ: โดยที่ a เป็นค่าสัมประสิทธิ์น้ำหนักที่มีค่ากำหนดจำนวนของการทำให้เรียบ ค่าที่ใกล้กว่าคือ 0 ยิ่งให้ความนุ่มนวลมากขึ้นเท่านั้น ในบางกรณีอัลกอริธึมในแบบฟอร์มนี้จะให้ผลลัพธ์ที่เป็นกลางซึ่งจะมีขนาดใหญ่ ในการดำเนินการนี้โดยใช้ค่าเลขจำนวนเต็มจำนวนเต็มความแม่นยำที่แน่นอนจะมีการร่างใหม่เป็นรูปแบบที่ต่างกันเล็กน้อยซึ่งผลลัพธ์ระดับกลางจะถูก จำกัด โดยค่าที่รู้จัก ค่าสัมประสิทธิ์น้ำหนักจะแสดงเป็น 1-1c โดยที่ c คือพลังของ 2. พลังงาน k สามารถเพิ่มขึ้นเพื่อเพิ่มจำนวนของการปรับให้ราบเรียบในขณะที่ข้อ จำกัด ของกำลัง 2 จะทำให้เกิดการคูณและหน่วยงานต่างๆโดยใช้การทำงานกะพริบด้านขวาและซ้ายที่รวดเร็วในไมโครโปรเซสเซอร์ ปริมาณ cv av (n) มีการติดตามเพื่อรักษาความแม่นยำ: ตัวอย่างเช่นตัวอย่างคือปริมาณ 8 บิต (ตามที่ใช้ในหลายขั้นตอนวิธีที่อธิบายไว้สำหรับวงจร SMPS ที่อธิบายไว้ที่นี่) และ k ถูกเลือกให้เป็น 8 แล้วปริมาณ cv av (n) สามารถแสดงเป็นค่า 16 บิตโดยไม่มีการสูญเสียข้อมูล (อย่างแม่นยำ: บิต 8k ดูด้านล่าง) เมื่อได้รับการกำหนดปริมาณ v av (n) จะได้รับโดยการเปลี่ยนด้านขวาอย่างง่ายโดย k places เมื่อถึงจุดนี้การสูญเสียข้อมูลน้อยกว่า 1 lsb magnitude ซึ่งสามารถดูดซับความไม่แน่นอนของ v n ได้ (โปรดทราบว่าอาจมีความสัมพันธ์ในข้อมูลที่สูญหายซึ่งอาจทำให้เกิดข้อผิดพลาดทางระบบ) สมมติว่าตัวแปร vi มีความเป็นอิสระทางสถิติการวิเคราะห์ความแปรปรวนแสดงให้เห็นว่าค่าดังกล่าวลดลงจาก 1 (2c) สำหรับการเปลี่ยนแปลงขั้นตอนใน v n ค่าคงตัวของเวลา c คือช่วงการคำนวณ การติดตามค่าเฉลี่ยจะไม่ถูกต้องเนื่องจากการเพิ่มขึ้นของค่าคงที่ตลอดเวลาเพื่อเปรียบเทียบกับความถี่ต่ำสุดในรูปแบบสัญญาณต้นแบบ ตัวกรองจะเริ่มต้นด้วย v av (0) 0 การวัดทั้งหมด v n อยู่ระหว่าง 0 ถึงน้อยกว่า B (โดยที่ B อยู่ในตัวอย่างของเรา 256 ตัวอย่าง) ดังนั้นการทำงานกลับไปที่จุดเริ่มต้นของซีเควนซ์ (ซึ่งในทางปฏิบัติจะ จำกัด อยู่เสมอ) ซึ่งเป็นเพียง B. ดังนั้นค่าสูงสุดของค่าเฉลี่ย cv เฉลี่ย (n) คือ cB ซึ่งอยู่ภายในจำนวน 16 บิตในตัวอย่างข้างต้น ในกรณีที่ตัวอย่างมีความสำคัญทางสถิติที่แตกต่างกันนั่นคือบางส่วนมีข้อผิดพลาดมากกว่าที่อื่น ๆ น้ำหนักสามารถใช้เพื่อสร้างรูปแบบทั่วไปของตัวกรอง น้ำหนักเหล่านี้จะถูกเลือกให้มีความสัมพันธ์ผกผันกับความน่าจะเป็นข้อผิดพลาด ถ้า w n เป็นน้ำหนักที่จะนำมาประยุกต์ใช้ตัวกรองต่อไปนี้อาจใช้: สมการที่สองสร้างค่าประมาณค่าเฉลี่ยของน้ำหนักที่ IIR ซึ่งใช้ในสมการที่หนึ่ง นี้สามารถแสดงให้เห็นการประมาณการ unbiassed ของค่าเฉลี่ยของ v n กับปัจจัยการลืมของ (1-a) ก่อนที่จะมีการปรับค่าเฉลี่ยของค่าเฉลี่ย cw av (n) และ cw av (n) v av (n) ที่ด้านซ้ายมือและจำนวนที่ต้องการจะถูกแยกออกจากส่วนที่เรียบง่าย FIR Filter 1.1 ข้อมูลเบื้องต้นเกี่ยวกับตัวกรอง 1.1 What are quotFIR filters? เป็นหนึ่งในสองประเภทหลักของตัวกรองดิจิตอลที่ใช้ในแอ็พพลิเคชันการประมวลผลสัญญาณดิจิทัล (DSP) ซึ่งเป็นอีกประเภทหนึ่งคือ IIR 1.2 quotFIRquot หมายถึงอะไร quotID หมายถึง quotFinite Impulse Responsequot ถ้าคุณใส่แรงกระตุ้นนั่นคือตัวอย่าง quot1quot เดียวตามด้วยตัวอย่าง quot0quot จำนวนมาก zeroes จะออกมาหลังจากที่ตัวอย่าง quot1quot ได้ผ่านทางสายการหน่วงเวลาของตัวกรองแล้ว 1.3 ในกรณีทั่วไปการตอบสนองของอิมพัลซ์มีข้อ จำกัด เนื่องจากไม่มีข้อเสนอแนะใด ๆ ใน FIR การขาดข้อเสนอแนะรับประกันได้ว่าการตอบสนองต่อแรงกระตุ้นจะมี จำกัด เพราะฉะนั้นคำว่า terminfin finituite responsequot เกือบจะตรงกันกับ quotno feedbackquot อย่างไรก็ตามหากมีการตอบรับ แต่การตอบสนองของอิมพัลซ์ก็มี จำกัด ฟิลเตอร์ยังคงเป็น FIR ตัวอย่างคือตัวกรองค่าเฉลี่ยเคลื่อนที่ซึ่งตัวอย่างก่อนหน้า Nth ถูกหักออก (ป้อนกลับ) ทุกครั้งที่มีตัวอย่างใหม่เข้ามาตัวกรองนี้มีการตอบสนองต่อแรงกระตุ้น จำกัด แม้ว่าจะใช้ข้อมูลย้อนกลับ: หลังจากตัวอย่าง N ของแรงกระตุ้นเอาท์พุท จะเป็นศูนย์ 1.4 ฉันจะออกเสียง quotFIRquot บางคนบอกว่าตัวอักษร F-I-R คนอื่นออกเสียงว่าเป็นชนิดของต้นไม้ เราชอบต้นไม้มากกว่า (สิ่งที่แตกต่างคือคุณพูดถึงตัวกรอง F-I-R หรือตัวกรอง FIR) 1.5 ตัวกรองอื่น ๆ ที่เป็นทางเลือกของ FIR ฟิลเตอร์ DSP ยังสามารถเป็นอินวอยซ์อิมพัลส์ตอบสนอง (IIR) (ดูคำถามที่พบบ่อย dspGurus IIR) ตัวกรอง IIR ใช้ข้อเสนอแนะดังนั้นเมื่อคุณป้อนแรงกระตุ้นผลตามทฤษฎีดังขึ้นเรื่อย ๆ 1.6 ฟิลเตอร์ FIR เปรียบเทียบตัวกรอง IIR อย่างไรแต่ละข้อมีข้อดีและข้อเสีย โดยรวมแล้วแม้ว่าข้อดีของตัวกรอง FIR มีมากกว่าข้อเสียดังนั้นจึงมีการใช้งานมากกว่า IIRs 1.6.1 อะไรคือข้อดีของ FIR Filters (เทียบกับตัวกรอง IIR) เมื่อเทียบกับตัวกรอง IIR ตัวกรอง FIR มีข้อดีดังต่อไปนี้: พวกเขาสามารถออกแบบมาให้เป็นแบบไม่มีเงื่อนไข (โดยปกติจะเป็น) ใส่เพียงกรองเชิงเส้นเฟสล่าช้าสัญญาณขาเข้า แต่ donrsquot บิดเบือนระยะของ ใช้งานง่าย สำหรับไมโครโปรเซสเซอร์ DSP ส่วนใหญ่การคำนวณ FIR สามารถทำได้โดยการวนรอบคำสั่งเดียว เหมาะกับงานหลายอัตรา โดยอัตราหลายอัตราเราหมายถึง quotdecimationquot (ลดอัตราการสุ่มตัวอย่าง), quotinterpolationquot (เพิ่มอัตราการสุ่มตัวอย่าง) หรือทั้งสองอย่าง ไม่ว่าจะเป็นการ decimating หรือ interpolating การใช้ฟิลเตอร์ FIR ช่วยให้การคำนวณบางส่วนสามารถละเว้นได้ดังนั้นจึงให้ประสิทธิภาพในการคำนวณที่สำคัญ ในทางตรงกันข้ามถ้าใช้ตัวกรอง IIR เอาต์พุตแต่ละรายการจะต้องได้รับการคำนวณเป็นรายบุคคลแม้ว่าจะมีการส่งออกเอาต์พุต (ดังนั้นข้อเสนอแนะจะรวมอยู่ในตัวกรอง) มีคุณสมบัติเป็นตัวเลขที่ต้องการได้ ในทางปฏิบัติตัวกรอง DSP ทั้งหมดจะต้องดำเนินการโดยใช้คณิตศาสตร์ที่มีความแม่นยำแน่นอนนั่นคือบิตจำนวน จำกัด การใช้เครื่องคำนวณแบบ จำกัด แน่นอนในตัวกรอง IIR อาจทำให้เกิดปัญหาที่สำคัญอันเนื่องมาจากการใช้ข้อเสนอแนะ แต่ตัวกรอง FIR ที่ไม่มีข้อเสนอแนะสามารถใช้งานได้โดยใช้บิตน้อยลงและนักออกแบบมีปัญหาในทางปฏิบัติน้อยกว่าในการแก้ปัญหาเกี่ยวกับการคำนวณทางคณิตศาสตร์ที่ไม่เหมาะ สามารถประยุกต์ใช้เลขคณิตเศษส่วนได้ ซึ่งแตกต่างจากตัวกรอง IIR ก็มักจะเป็นไปได้ที่จะใช้ตัวกรอง FIR โดยใช้ค่าสัมประสิทธิ์ที่มีขนาดน้อยกว่า 1.0 (กำไรโดยรวมของฟิลเตอร์ FIR สามารถปรับเปลี่ยนได้ที่ผลลัพธ์ถ้าต้องการ) นี่เป็นข้อพิจารณาที่สำคัญเมื่อใช้ DSP แบบจุดคงที่เนื่องจากทำให้การใช้งานง่ายขึ้น 1.6.2 ข้อเสียของฟิลเตอร์ FIR (เทียบกับตัวกรอง IIR) เมื่อเทียบกับตัวกรอง IIR ตัวกรอง FIR บางครั้งอาจมีข้อเสียที่ต้องใช้การคำนวณหน่วยความจำและหน่วยความจำมากขึ้นเพื่อให้ได้ลักษณะการตอบสนองของตัวกรองที่กำหนด นอกจากนี้การตอบสนองบางอย่างยังไม่สามารถใช้กับตัวกรอง FIR ได้ 1.7 ข้อที่ใช้ในการอธิบายตัวกรอง FIR การตอบสนองต่ออิมพัลส์ - การตอบสนองต่อราคาของฟิลเตอร์ FIR เป็นเพียงชุดของค่าสัมประสิทธิ์ของ FIR เท่านั้น (ถ้าคุณใส่ quotimplusequot ลงในตัวกรอง FIR ซึ่งประกอบด้วยตัวอย่าง quot1quot ตามตัวอย่าง quot0quot จำนวนมากผลลัพธ์ของตัวกรองจะเป็นชุดค่าสัมประสิทธิ์เนื่องจากตัวอย่าง 1 ตัวเคลื่อนที่ผ่านแต่ละค่าสัมประสิทธิ์ในทางกลับกันเพื่อสร้างผลลัพธ์) แตะ - quottapquot FIR เป็นเพียงคู่ coefficientdelay จำนวนของ FIR taps, (มักเรียกว่า quotNquot) เป็นข้อบ่งชี้ของ 1) จำนวนหน่วยความจำที่จำเป็นในการใช้ตัวกรอง, 2) จำนวนการคำนวณที่ต้องการ, และ 3) จำนวนการกรองที่ต้องการตัวกรองสามารถทำผล, (MAC) - ในบริบท FIR, quotMACquot คือการดำเนินงานของการคูณค่าสัมประสิทธิ์โดยตัวอย่างข้อมูลล่าช้าที่สอดคล้องกันและสะสมผลลัพธ์ FIR มักต้องใช้ MAC หนึ่งตัวต่อการแตะ ไมโครโพรเซสเซอร์ DSP ส่วนใหญ่ใช้การดำเนินการ MAC ในรอบการสอนเดียว Transition Band - แถบความถี่ระหว่างแถบความถี่ passband และ stopband แถบการเปลี่ยนที่แคบยิ่งต้องใช้ก๊อกมากขึ้นในการใช้ตัวกรอง (แถบผลการแปลง quotsmallquot ส่งผลให้เกิดตัวกรอง quotsharpquot) Delay Line - ชุดของหน่วยความจำที่ใช้องค์ประกอบ delay delay ของ quotZ-1quot ของการคำนวณ FIR บัฟเฟอร์แบบวงกลม - บัฟเฟอร์พิเศษซึ่งเป็นส่วนข้อศอกเนื่องจากการเพิ่มทีละตอนทำให้มันห่อหุ้มรอบจุดเริ่มต้นหรือเนื่องจากการลดลงจากจุดเริ่มต้นทำให้มันห่อหุ้มไปมาจนสุด บัฟเฟอร์แบบวงกลมมักมีให้โดยไมโครโพรเซสเซอร์ DSP เพื่อใช้ชุดคำสั่งซื้อของตัวอย่างผ่านสายการผลิต FIR โดยไม่ต้องย้ายข้อมูลในหน่วยความจำอย่างแท้จริง เมื่อตัวอยางตัวอยางถูกเพิ่มเขาไปในบัฟเฟอร์ตัวอยางจะแทนที่ตัวอยางที่เก่าที่สุดโดยอัตโนมัติตัวกรอง IIR แบบเสนยอยที่เปนตัวชี้วัดการกรองตัวแปรที่วัดได เนื่องจากสัญญาณมีความแตกต่างกันไปในค่าเฉลี่ยเมื่อเวลาผ่านไปตัวกรองต้องมีวิธีในการทิ้งการวัดเก่า ๆ ในขณะที่ใช้ตัวอย่างใหม่ ตัวกรองการตอบสนองต่อการตอบสนองต่อการเลียนลอดแบบไม่ จำกัด จำนวนขั้นต่ำ (IIR) ที่ได้รับการอธิบายเป็นที่เข้าใจกันมานานหลายสิบปีและถูกนำมาใช้อย่างกว้างขวางในการวิเคราะห์ทางสถิติ เป็นวิธีที่เรียบง่ายในการคำนวณค่าเฉลี่ยของตัวแปรเมื่อไม่ทราบชื่อตัวแปรต้นแบบ ถ้า v n เป็นตัวแปรที่ถูกกรองค่าประมาณ n สำหรับค่าเฉลี่ยคือ: โดยที่ a คือค่าสัมประสิทธิ์น้ำหนักที่มีค่ากำหนดจำนวนของการทำให้เรียบ ค่าที่ใกล้กว่าคือ 0 ยิ่งให้ความนุ่มนวลมากขึ้นเท่านั้น ในบางกรณีอัลกอริธึมในแบบฟอร์มนี้จะให้ผลลัพธ์ที่เป็นกลางซึ่งจะมีขนาดใหญ่ ในการดำเนินการนี้โดยใช้ค่าเลขจำนวนเต็มจำนวนเต็มความแม่นยำที่แน่นอนจะมีการร่างใหม่เป็นรูปแบบที่ต่างกันเล็กน้อยซึ่งผลลัพธ์ระดับกลางจะถูก จำกัด ด้วยค่าที่รู้จัก ค่าสัมประสิทธิ์น้ำหนักจะแสดงเป็น 1-1c โดยที่ c คือพลังของ 2. พลังงาน k สามารถเพิ่มขึ้นเพื่อเพิ่มจำนวนของการปรับให้ราบเรียบในขณะที่ข้อ จำกัด ของกำลัง 2 จะทำให้เกิดการคูณและหน่วยงานต่างๆโดยใช้การทำงานกะพริบด้านขวาและซ้ายที่รวดเร็วในไมโครโปรเซสเซอร์ ปริมาณ cv av (n) มีการติดตามเพื่อรักษาความแม่นยำ: ตัวอย่างเช่นตัวอย่างคือปริมาณ 8 บิต (ตามที่ใช้ในหลายขั้นตอนวิธีที่อธิบายไว้สำหรับวงจร SMPS ที่อธิบายไว้ที่นี่) และ k ถูกเลือกให้เป็น 8 แล้วปริมาณ cv av (n) สามารถแสดงเป็นค่า 16 บิตโดยไม่มีการสูญหายของข้อมูล (อย่างแม่นยำ: บิต 8k ดูด้านล่าง) เมื่อได้รับการกำหนดปริมาณ v av (n) จะได้รับโดยการเปลี่ยนด้านขวาอย่างง่ายโดย k places เมื่อถึงจุดนี้การสูญเสียข้อมูลน้อยกว่า 1 lsb magnitude ซึ่งสามารถดูดซับความไม่แน่นอนของ v n (โปรดทราบว่าอาจมีความสัมพันธ์ในข้อมูลที่สูญหายซึ่งอาจทำให้เกิดข้อผิดพลาดทางระบบ) สมมติว่าตัวแปร vi มีความเป็นอิสระทางสถิติการวิเคราะห์ความแปรปรวนแสดงให้เห็นว่าค่าดังกล่าวลดลงจาก 1 (2c) สำหรับการเปลี่ยนแปลงขั้นตอนใน v n ค่าคงตัวของเวลา c คือช่วงการคำนวณ การติดตามค่าเฉลี่ยจะไม่ถูกต้องเนื่องจากการเพิ่มขึ้นของค่าคงที่ตลอดเวลาเพื่อเปรียบเทียบกับความถี่ต่ำสุดในรูปแบบสัญญาณต้นแบบ ตัวกรองจะเริ่มต้นด้วย v av (0) 0 การวัดทั้งหมด v n อยู่ระหว่าง 0 ถึงน้อยกว่า B (โดยที่ B อยู่ในตัวอย่างของเรา 256 ตัวอย่าง) ดังนั้นการทำงานกลับไปที่จุดเริ่มต้นของซีเควนซ์ (ซึ่งในทางปฏิบัติมักมี จำกัด ) ซึ่งเป็นเพียง B. ดังนั้นค่าสูงสุดของค่าเฉลี่ย cv เฉลี่ย (n) คือ cB ซึ่งอยู่ภายในจำนวน 16 บิตในตัวอย่างข้างต้น ในกรณีที่ตัวอย่างมีความสำคัญทางสถิติที่แตกต่างกันนั่นคือบางส่วนมีข้อผิดพลาดมากกว่าที่อื่น ๆ น้ำหนักสามารถใช้เพื่อสร้างรูปแบบทั่วไปของตัวกรอง น้ำหนักเหล่านี้จะถูกเลือกให้มีความสัมพันธ์ผกผันกับความน่าจะเป็นข้อผิดพลาด ถ้า w n เป็นน้ำหนักที่จะนำมาประยุกต์ใช้ตัวกรองต่อไปนี้อาจใช้: สมการที่สองสร้างค่าประมาณค่าเฉลี่ยของน้ำหนักที่ IIR ซึ่งใช้ในสมการที่หนึ่ง นี้สามารถแสดงให้เห็นการประมาณการ unbiassed ของค่าเฉลี่ยของ v n กับปัจจัยการลืมของ (1-a) ก่อนที่จะมีการปรับค่าเฉลี่ยของค่าเฉลี่ย (n) และ cw av (n) v av (n) ที่ด้านซ้ายมือและปริมาณที่ต้องการจะถูกแยกออกจากส่วนที่เรียบง่าย

Comments