Sunday, 9 July 2017

การย้าย ค่าเฉลี่ย ลดขนาด


คำถามนี้มีคำตอบ here. I มี 2 ชุดข้อมูลใน Matlab ที่ฉันต้องพล็อตกับอีกคนหนึ่ง - หนึ่งใน xaxis และหนึ่งใน yaxis ข้อมูลสำหรับแต่ละชุดถูกเก็บรวบรวมโดยใช้วิธีการที่แตกต่างกันเพื่อให้อัตราการสุ่มตัวอย่างอย่างมีนัยสำคัญ แตกต่างกันและจนกว่าฉัน don t จำนวนเดียวกันของจุดข้อมูลในทั้งสองชุดฉันไม่สามารถวางแผนหนึ่งกับ other. Its ค่อนข้างง่ายเพื่อ downsample ข้อมูลใน Matlab ใช้ downsample ฟังก์ชัน Matlab. The อัตราการสุ่มตัวอย่างเป็น 1 5s และอัตราการสุ่มตัวอย่าง B เป็น 0 1s ฉันได้รับสามารถใช้ downsample สำเร็จเป็น downsample B, 15,10 เพื่อให้มันเริ่มต้นในเวลาเดียวกัน -3s ซึ่งหมายความว่าบางอย่างในข้อมูลของฉันดังนั้นฉันต้องได้รับมันเพื่อเริ่มต้นที่จุดนั้นและเป็นที่ ตัวอย่างอัตราการสุ่มตัวอย่างของ 1 5 แต่ตอนนี้ผมสงสัยว่ามีวิธีการที่อนุญาตให้ฉันใช้ค่าเฉลี่ยของ 15 คะแนนแทนการหยิบจุดหนึ่งทุก 15 คะแนน downsample วิธีที่ฉันได้ใช้มันเพียงหยิบทุก อย่างไรก็ตามจุดที่ 15 ผมต้องการให้เฉลี่ย 1 5 คะแนนสำหรับฉันแทนมีวิธีการทำเช่นนี้ฉันเขียนห่วงสำหรับเวกเตอร์ขนาดเล็กที่เรียบง่ายเพื่อดูว่าฉันสามารถทำสำหรับ A 1 2 3 4 ฉันต้องการควบแน่นข้อมูลเพื่อให้มีเพียง 2 รายการ เช่นว่าค่าเฉลี่ย A 1 และ A 2 แล้ว A 3 และ A 4. นี้ แต่ไม่ได้ผลเช่นฉันต้องการเพราะฉัน don t ต้องการให้เฉลี่ย A 2 และ A 3 ฉันต้องการให้ใช้ครั้งแรก 2 รายการเฉลี่ยพวกเขาแล้ว 2 รายการถัดไปแล้วเฉลี่ยพวกเขาเพื่อ on. Can ใคร help. asked มกราคม 8 15 ที่ 10 42.marked เป็นซ้ำโดย Shai matlab ผู้ใช้ที่มีป้าย MATLAB สามารถเดี่ยวเดียวดายปิดคำถาม MATLAB เป็นรายการที่ซ้ำกัน และเปิดใหม่อีกครั้งเมื่อต้องการ 8 ม. ค. 15 ที่ 15 02 คำถามนี้ได้รับการถามก่อนหน้าและมีคำตอบอยู่แล้วหากคำตอบเหล่านี้ไม่สามารถตอบคำถามของคุณได้อย่างเต็มที่โปรดตั้งคำถามใหม่อ๊ะใช่ขออภัยฉันพยายามค้นหาคำตอบที่มีอยู่ คำถามฉันคิดว่าคำค้นหาของฉันแตกต่างจากชื่อเรื่อง Maheen Siddiqui 8 ม. ค. 51 ที่ 10 49.Upsampling การสุ่มตัวอย่างแบบ Downsampling และ Discrete-time Mo dulation วัตถุประสงค์ของห้องทดลองนี้คือการทำความเข้าใจกับหลักการของการมอดูเลตแบบไม่ต่อเนื่อง, demodulation, upsampling และ down sampling. Upsampling และ Downsampling ในห้องทดลองนี้คุณจะทดลองด้วยการสุ่มตัวอย่างขึ้นและลง 3. ก่อนอื่นให้ดาวน์โหลดไฟล์และโหลด h ที่หน้าจอ MATLAB prompt ซึ่งจะโหลด h ตัวแปรลงในพื้นที่ทำงานของ Matlab เริ่มต้น Simulink และสร้างโมเดลการสุ่มตัวอย่างแบบสุ่มและแบบสุ่มขึ้นเรียกว่าการสุ่มตัวอย่างต้องมีการประมวลผลสองช่วงการมอดูเลตด้วยแรงกระตุ้นเป็นระยะ ๆ รถไฟและ 2 ลบตัวอย่างศูนย์เป็นวิธีที่ง่ายในการปรับโดยลำดับคือการกำหนดลำดับในพื้นที่ทำงาน Matlab แล้วนำมาลงในรูปแบบโดยใช้สัญญาณจากบล็อก Workspace นี่คือบางส่วนของรหัสที่จะต้องพิจารณา M 3 Factor for up และลดการสุ่มตัวอย่าง N length hp zeros N, 1 กำหนดเวกเตอร์ของศูนย์ทั้งหมด p 1 MN 1 ตั้งค่าทุกตัวที่สามให้เป็นหนึ่งเดียวไลบรารีบล็อกการดำเนินงานสัญญาณในไลบรารี DSP Blockset ประกอบด้วยไฟล์ Downsample block ซึ่งลบออก ตัวอย่างศูนย์ตัวอย่างเช่นนี้การสุ่มตัวอย่างประกอบด้วยการดำเนินการ 1 รายการแทรกศูนย์และ 2 การกรองข้อมูลต่ำเพื่อลบภาพไลบรารีบล็อกการดำเนินการสัญญาณนี้ในไลบรารี DSP Blockset ประกอบด้วยชุดข้อมูล Upsample ที่แทรกศูนย์ซึ่งดูเหมือนว่าคุณรู้แล้ว เกี่ยวกับการออกแบบตัวกรอง low-pass โดยใช้ฟังก์ชัน Matlab remez ต่อไปนี้เป็นตัวอย่างของแบบจำลอง Simulink สาขาบนไม่สุ่มตัวอย่างและสาขาด้านล่างไม่สุ่มตัวอย่างหมายเหตุในการสุ่มตัวอย่างขึ้นและลงให้ระมัดระวังในการกำหนดอัตราตัวอย่างในแต่ละ block เมื่อมีให้ตั้งค่าช่วงเวลาตัวอย่างในบล็อคตัวกรองเป็น -1 จากนั้นตัวกรองจะสืบทอดเวลาตัวอย่างจากบล็อกก่อนหน้ามิฉะนั้นคุณต้องตั้งเวลาตัวอย่างอย่างชัดเจนในโมเดลนี้มีการเพิ่มบล็อก Signal To Workspace เพื่อจับภาพสัญญาณต่างๆในไดอะล็อกกำหนดพารามิเตอร์จำลองให้ตั้งเวลาเริ่มต้นเป็น 0 และเวลาหยุดไปที่ N-1 โดยที่ N คือความยาวของสัญญาณอินพุต h นอกจากนี้ในหมวดตัวเลือก Solver ให้ตั้งค่า T ype to Fixed-step. Run การจำลองสถานการณ์จะทำให้ spectra และลำดับโดเมนเป็นเวลาสามสัญญาณ h, hpd, hdown เขียนคำอธิบายของสิ่งที่คุณเห็นทำสองบล็อคการประมวลผลที่ใช้สำหรับฟังก์ชั่นการสุ่มตัวอย่างแบบลดลงตามที่คาดไว้ แสดงด้านล่างด้วยการเขียนของคุณขึ้นด้านล่างเป็นสเปกตรัมและลำดับโดเมนเวลาตัวอย่างแรกเพียงคำนวณโดยใช้แบบจำลอง Simulink abovepare สเปกตรัมและลำดับโดเมนเวลาของสามสัญญาณ h, hpu, hup เขียนคำอธิบายของสิ่งที่คุณเห็นทำ สองบล็อกการประมวลผลที่ใช้สำหรับการสุ่มตัวอย่างขึ้นตามคาด Turn แปลงเช่นเดียวกับที่แสดงด้านล่างด้วยการเขียนของคุณ up. Explain วิธีการที่คุณออกแบบตัวกรองต่ำผ่านสำหรับ upsampling ขอบของแถบการเปลี่ยนแปลงคืออะไรกำไรของตัวกรองคืออะไร? ต่อไปนี้เป็นตัวอย่างของสเปกตรัมและไทม์โดเมนตัวอย่างแรกที่คำนวณโดยใช้แบบจำลอง Simulink ข้างต้นดังที่แสดงไว้ด้านบนลำดับเวลาโดเมนที่สุ่มตัวอย่างจะผ่านตัวอย่างของสัญญาณต้นฉบับนี่คือความสำเร็จ ร้องเพลงกำไรจาก 3 ในตัวกรองความถี่ต่ำคุณสามารถเห็นการเพิ่มขึ้นของสามในโดเมนความถี่โปรดทราบว่าตัวกรองความถี่ต่ำจะทำให้เกิดสัญญาณล่าช้าในสัญญาณอัพแม็ปไฟลที่สัมพันธ์กับสัญญาณเดิมในภาพด้านบนความล่าช้าได้รับ ลบออกเวลาการปรับและ Demodulation. Download ไฟล์ใด ๆ มัลติมีเดียที่ติดตั้งเครื่องคอมพิวเตอร์กับชุดซอฟต์แวร์มาตรฐานจะสามารถเล่นไฟล์เสียงนี้ลองดูคุณรู้สิ่งที่ผู้หญิงกำลังอ่านคุณสามารถอ่านข้อมูล wav ลงใน Matlab โดยการพิมพ์ นี้โหลดสามตัวแปรในคุณพื้นที่ทำงาน Matlab y เป็นข้อมูลเสียง fs เป็นอัตราตัวอย่าง 11025 ในกรณีนี้และ nbits เป็นจำนวนบิตที่ใช้ในการแสดงแต่ละตัวอย่างใน y สเปกตรัมของ y ดังแสดงด้านล่างขณะที่คุณ สามารถดู, y มีเนื้อหาความถี่ที่มีนัยสำคัญทั้งหมดออกไปเป็น 0 5 ความถี่เวลาแบบไม่ต่อเนื่องซึ่งสอดคล้องกับ 11025 ความถี่ Hz 2 เฮกตาร์ตลอดเวลาครึ่งหนึ่งของอัตราตัวอย่างสร้างโมเดล Simulink เพื่อ amplulate y ในผู้ให้บริการร่วม sinusoidal โดยใช้ ผู้ให้บริการ ความถี่ของความถี่ที่ไม่ต่อเนื่อง 0 2 แล้วทำ demodulation ซิงโครนัสและ downsampling เพื่อคืนค่าสเปกตรัมให้เป็นรูปร่างดั้งเดิมของมันเพื่อหลีกเลี่ยงการ aliasing ต้อง y upsampled ก่อน modulating it. Recall ว่าใน discrete เวลาข้อ จำกัด ในผู้ให้บริการ ความถี่ที่ความถี่เหล่านี้เป็นเวลา discrete เวลา f requms ในหน่วยของ rads ถ้าคุณต้องการใช้หน่วยที่สอดคล้องกับวิธีการที่เราสร้างแปลงของเราแล้วหารความไม่เสมอภาคข้างต้นโดย 2 pi ปัจจัยที่นำไปสู่ข้อ จำกัด ต่อไปนี้ ความถี่ของผู้ให้บริการใช้ปัจจัยการสุ่มตัวอย่างของ 3. ความถี่สูงสุดคือระหว่าง -0 5 และ 0 5 หลังจาก upsampling โดย 3.What คือความถี่สูงสุดระหว่าง -0 5 และ 0 5 ในสัญญาณ modulated จะ upsampling โดย 3 หลีกเลี่ยงการเลียนแบบในสัญญาณ modulated ขั้นตอนที่สองใน demodulation synchronous มีการคูณ 1 คูณโดยผู้ให้บริการและ 2 low-pass filtering เพื่อลบส่วนประกอบความถี่คู่ความถี่สูงสุดคืออะไรหลังจากที่ modulat ion ขั้นตอน แต่ก่อน low-pass filtering ไม่ aliasing เกิดขึ้นอะไรคือขอบวงการเปลี่ยนแปลงและได้รับการกรองต่ำผ่านที่คุณใช้สำหรับ demodulation. Does demodulated และ downsampled สัญญาณเสียงเช่นเดียวกับสัญญาณเดิม By the way, ถ้าคุณต้องการเขียนสัญญาณ yr ออกไปเป็นไฟล์ wav เพื่อที่จะฟังให้พิมพ์คำสั่งต่อไปนี้ที่ Matlab prompt ใส่คำตอบของคุณสำหรับคำถามด้านบนและตัวเลขด้านล่างที่แสดงโมเดลและสเปกตรัมตัวอย่าง ของสเปกตรัมที่มีลักษณะเหมือนจุดต่างๆปรากฏที่ด้านล่างของหน้านี้ Simulink Model ของระบบที่สมบูรณ์อาจมีลักษณะดังนี้สเปกตรัมของสัญญาณหลายระดับกลางดูเหมือนว่านี้ Copyopy 2008 โดยผู้ร่วมให้ข้อมูล Cite attribute ผู้ดูแลทรัพยากร 2006, 28 มิถุนายนการสุ่มตัวอย่างการสุ่มตัวอย่างการสุ่มตัวอย่างและการปรับเวลาแบบไม่ต่อเนื่องดึงมกราคม 07, 2011 จาก Free Materials หลักสูตรหลักสูตรเว็บไซต์ USU OpenCourseWare งานนี้ได้รับอนุญาตภายใต้ใบอนุญาตครีเอทีฟคอมมอนส์ ได้กล่าวถึงคุณควรพิจารณาตัวกรองการตอบสนอง IIR infinite impulse มากกว่าตัวกรองการตอบสนอง FIR Impulse จำกัด ที่คุณกำลังใช้อยู่ตอนนี้มีอะไรมากกว่า แต่ในตอนแรกจะใช้ตัวกรอง FIR เป็น convolutions ที่ชัดเจนและตัวกรอง IIR ที่มีสมการโดยเฉพาะ IIR กรองฉันใช้มากในไมโครคอนโทรลเลอร์เป็นตัวกรองผ่านต่ำขั้วเดียวนี่คือเทียบเท่าดิจิตอลของตัวกรองอะนาล็อกแบบ RC ง่ายสำหรับแอพพลิเคชันส่วนใหญ่เหล่านี้จะมีลักษณะที่ดีกว่าตัวกรองช่องที่คุณใช้การใช้ส่วนใหญ่ของตัวกรองกล่องที่ฉัน ได้พบเป็นผลมาจากคนไม่ให้ความสนใจในชั้นการประมวลผลสัญญาณดิจิตอลไม่ได้เป็นผลจากการต้องลักษณะเฉพาะของพวกเขาหากคุณต้องการเพียงเพื่อลดความถี่สูงที่คุณรู้ว่าเป็นเสียงเสาเดียวผ่านต่ำกรองจะดีกว่าวิธีที่ดีที่สุด เพื่อใช้แบบดิจิทัลในไมโครคอนโทรลเลอร์โดยปกติแล้ว FILT - FILT FF NEW - FILT. FILT เป็นชิ้นส่วนของรัฐที่มีความคงทน u ต้องคำนวณตัวกรองนี้ NEW คือค่าใหม่ที่ตัวกรองถูกอัพเดตด้วยการวนซ้ำนี้ FF คือส่วนของตัวกรองที่ปรับความหนาแน่นของตัวกรองมองไปที่อัลกอริทึ่มนี้และดูว่าสำหรับ FF 0 ตัวกรองมีขนาดใหญ่มากตั้งแต่เอาท์พุท ไม่มีการเปลี่ยนแปลงสำหรับ FF 1 จริงๆแล้วไม่มี filter เลยตั้งแต่เอาท์พุททำตาม input ค่าที่เป็นประโยชน์อยู่ระหว่างระหว่างระบบขนาดเล็กที่คุณเลือก FF เป็น 1 2 N เพื่อให้คูณโดย FF สามารถทำได้เป็น shift ขวาโดย N บิตตัวอย่างเช่น FF อาจเป็น 1 16 และคูณด้วย FF ดังนั้นการเปลี่ยนด้านขวาของ 4 บิตมิฉะนั้นตัวกรองนี้ต้องการเพียงหนึ่งหักและหนึ่งเพิ่มแม้ว่าตัวเลขจะต้องกว้างกว่าค่าอินพุตเพิ่มเติมเกี่ยวกับความแม่นยำเชิงตัวเลขใน ส่วนที่แยกต่างหากด้านล่างฉันมักจะใช้เวลาอ่านโฆษณาอย่างมีนัยสำคัญได้เร็วกว่าที่จำเป็นและใช้ตัวกรองเหล่านี้สองตัวเรียงกันนี่คือดิจิตอลเทียบเท่าของตัวกรอง RC สองชุดและลดทอนตาม dB 12 dB เหนือความถี่ rolloff อย่างไรก็ตามสำหรับการอ่านโฆษณามักจะมีความเกี่ยวข้องกับการตรวจสอบตัวกรองในโดเมนเวลาโดยการพิจารณาการตอบสนองขั้นตอนนี้จะบอกคุณว่าระบบของคุณเร็วแค่ไหนจะเห็นการเปลี่ยนแปลงเมื่อสิ่งที่คุณกำลังวัดเปลี่ยนแปลงเพื่อช่วยในการออกแบบตัวกรองเหล่านี้ซึ่งมีเพียง หมายถึงการเลือก FF และการตัดสินใจว่าจะกี่ของน้ำตกฉันใช้ FILTBITS โปรแกรมของคุณคุณระบุจำนวนของบิตเปลี่ยนสำหรับแต่ละ FF ในชุด cascaded ของตัวกรองและจะคำนวณการตอบสนองขั้นตอนและค่าอื่น ๆ ที่จริงฉันมักจะทำงานนี้ผ่านทางของฉัน wrapper script PLOTFILT เรียกใช้ FILTBITS ซึ่งสร้างไฟล์ CSV จากนั้นแปลงไฟล์ CSV ตัวอย่างเช่นนี่เป็นผลมาจาก PLOTFILT 4 4. พารามิเตอร์สองตัวของ PLOTFILT หมายความว่าจะมีตัวกรองสองแบบเรียงตามลำดับชั้นที่ระบุไว้ข้างต้นค่าของ 4 ระบุจำนวนของกะบิตเพื่อให้เกิดการคูณด้วย FF ค่า FF สองตัวจึงเป็นดังนี้ 1 16 ในกรณีนี้การติดตามสีแดงคือการตอบสนองต่อหน่วยและเป็นสิ่งสำคัญในการมองตัวอย่างเช่นนี้จะบอกคุณว่า เอาท์พุทของตัวกรองรวมจะตัดสินถึง 90 ของค่าใหม่ใน 60 iterations ถ้าคุณสนใจเกี่ยวกับ 95 เวลาการตกตะกอนแล้วคุณต้องรอประมาณ 73 ซ้ำและสำหรับเวลาการตกตะกอนเพียง 26 ซ้ำ. สีเขียวแสดงให้เห็นว่าคุณเอาท์พุทจากการขัดจังหวะความกว้างเต็มรูปแบบเดียวนี้จะช่วยให้คุณมีความคิดในการปราบปรามการสุ่มเสียงดูเหมือนว่าไม่มีตัวอย่างเดียวจะทำให้เกิดการเปลี่ยนแปลงมากกว่า 2 5 ในการแสดงผลร่องรอยสีน้ำเงินคือการให้ความรู้สึกอัตนัยของ สิ่งที่ตัวกรองนี้จะทำอย่างไรกับสัญญาณรบกวนสีขาวนี่ไม่ใช่การทดสอบอย่างเข้มงวดเนื่องจากไม่มีการรับประกันว่าเนื้อหาใดเป็นตัวเลขสุ่มที่เลือกเป็นสัญญาณเสียงรบกวนสีขาวสำหรับการทำงานของ PLOTFILT นี้เพียงเพื่อให้คุณรู้สึกหยาบเท่าไหร่ มันจะถูกบีบและเรียบวิธีคือ PLOTFILT อาจ FILTBITS และอื่น ๆ อีกมากมายของสิ่งที่มีประโยชน์อื่น ๆ โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาเฟิร์มแวร์มีอยู่ในการพัฒนาซอฟต์แวร์ PIC ออกซอฟต์แวร์ที่หน้าดาวน์โหลดซอฟต์แวร์ของฉันเกี่ยวกับ ความแม่นยำเชิงตัวเลขเห็นจากความคิดเห็นและตอนนี้เป็นคำตอบใหม่ที่มีความสนใจในการพูดคุยเกี่ยวกับจำนวนบิตที่จำเป็นในการใช้ตัวกรองนี้โปรดทราบว่าการคูณด้วย FF จะสร้าง Log 2 FF บิตใหม่ใต้จุดไบนารีบนระบบขนาดเล็ก FF มักจะได้รับการเลือกให้เป็น 1 2 N เพื่อให้การคูณนี้เกิดขึ้นจริงโดยการเปลี่ยนด้านขวาของ N bits. FILT จึงเป็นจุดจำนวนเต็มคงที่หมายเหตุว่าไม่มีการเปลี่ยนแปลงใด ๆ ของคณิตศาสตร์จากจุดประมวลผลของมุมมองตัวอย่างเช่น ถ้าคุณกำลังกรองการอ่านโฆษณา 10 บิตและ N 4 FF 1 16 จากนั้นคุณต้องใช้เศษเศษส่วนด้านล่าง 10 บิตจำนวนเต็ม AD อ่านโปรเซสเซอร์ส่วนใหญ่หนึ่งเครื่องคุณต้องทำการดำเนินการจำนวนเต็ม 16 บิตเนื่องจากการอ่านค่า 10 บิตใน AD กรณีที่คุณยังสามารถทำเหมือนกัน opertions จำนวนเต็ม 16 บิตเดียวกัน แต่เริ่มต้นด้วยการอ่าน AD ซ้ายเลื่อนโดย 4 บิตหน่วยประมวลผล doesn t ทราบความแตกต่างและ doesn t ต้องทำคณิตศาสตร์ในทั้ง 16 จำนวนเต็มบิตทำงานได้ไม่ว่าคุณจะพิจารณา เป็น 12 4 คงที่ p oint หรือ 16 จำนวนเต็มจริง 16 0 จุดคงที่โดยทั่วไปคุณต้องเพิ่มบิต N แต่ละขั้วกรองหากคุณ don t ต้องการเพิ่มเสียงเนื่องจากการเป็นตัวแทนตัวเลขในตัวอย่างข้างต้นตัวกรองที่สองของทั้งสองจะต้องมี ในทางปฏิบัติบนเครื่อง 8 บิตซึ่งหมายความว่าคุณต้องใช้ค่าบิต 24 ค่าทางเทคนิคเฉพาะขั้วที่สองของสองจะต้องมีค่ามากขึ้น แต่สำหรับความเรียบง่ายของเฟิร์มผมมักจะใช้แทนเดียวกันและด้วยเหตุนี้ รหัสเดียวกันสำหรับเสาทั้งหมดของตัวกรองโดยปกติฉันเขียนโปรแกรมย่อยหรือแมโครเพื่อดำเนินการการดำเนินงานเสาหนึ่งกรองแล้วใช้ที่แต่ละเสาไม่ว่าจะเป็น subroutine หรือ macro ขึ้นอยู่กับว่าหน่วยความจำรอบหรือโปรแกรมมีความสำคัญมากขึ้นในโครงการนั้น ไม่ว่าจะด้วยวิธีใดก็ตามฉันใช้สถานะการขูดขีดเพื่อส่ง NEW เข้าไปในมาโครย่อยของโปรแกรมย่อยซึ่งปรับปรุง FILT แต่ยังโหลดข้อมูลที่เป็นสถานะการขีดข่วนเหมือนเดิม NEW ซึ่งทำให้ง่ายต่อการใช้เสาหลายอันเนื่องจาก FILT อัปเดตของเสาหนึ่งอันใหม่ ของ next subroutine เมื่อมี subroutine เป็นประโยชน์ที่จะมีจุดชี้ไปที่ FILT ระหว่างทางซึ่งจะมีการอัพเดตหลังจาก FILT ออกไปวิธีนี้ subroutine จะทำงานกับตัวกรองต่อเนื่องในหน่วยความจำถ้าเรียกหลาย ๆ ครั้งด้วยแมโคร คุณ don t ต้องการตัวชี้ตั้งแต่คุณผ่านในที่อยู่ในการทำงานในแต่ละ iteration. Code ตัวอย่างนี่เป็นตัวอย่างของแมโครตามที่อธิบายไว้ข้างต้นสำหรับ PIC 18.And นี่คือแมโครที่คล้ายกันสำหรับ PIC 24 หรือ dsPIC 30 หรือ 33. ทั้งสองตัวอย่างนี้ถูกใช้เป็นแมโครโดยใช้ตัวประมวลผลแอ็คเซ็คเทอร์ของ PIC ซึ่งมีความสามารถมากกว่าทั้งสองแบบของมาโครในตัว clabacchio ปัญหาอื่นที่ควรจะกล่าวถึงคือการใช้งานเฟิร์มแวร์คุณสามารถเขียนโพรโตคอลผ่านต่ำโพรเซสเซอร์ subroutine เพียงครั้งเดียวจากนั้นใช้มันหลายครั้งในความเป็นจริงฉันมักจะเขียนเช่น subroutine เพื่อนำตัวชี้ในหน่วยความจำไปยังสถานะตัวกรองแล้วมีมันล่วงหน้า ตัวชี้เพื่อให้สามารถเรียกได้อย่างต่อเนื่องเพื่อให้ทราบตัวกรองแบบหลายขั้ว Olin Lathrop 20 เม. ย. 55 ที่ 15 03.1 ขอบคุณมากสำหรับคำตอบของคุณ - ทั้งหมดของพวกเขาฉันตัดสินใจที่จะใช้ตัวกรอง IIR นี้ แต่ตัวกรองนี้ไม่ได้ใช้เป็น Standard LowPass Filter เนื่องจากต้องใช้ Counter Values ​​ค่าเฉลี่ยและเปรียบเทียบเพื่อตรวจจับการเปลี่ยนแปลงใน Range เนื่องจากค่าเหล่านี้เป็นมิติที่แตกต่างกันไปโดยขึ้นอยู่กับฮาร์ดแวร์ที่ฉันต้องการใช้โดยเฉลี่ยเพื่อให้สามารถตอบสนองต่อฮาร์ดแวร์เหล่านี้ได้ การเปลี่ยนแปลงที่เฉพาะเจาะจงโดยอัตโนมัติ sensslen 21 พฤษภาคมที่ 12 06. ถ้าคุณสามารถอยู่กับข้อ จำกัด ของอำนาจของสองจำนวนรายการเฉลี่ยเช่น 2,4,8,16,32 ฯลฯ แล้วแบ่งได้อย่างง่ายดายและมีประสิทธิภาพสามารถทำได้ใน ไมโครประสิทธิภาพต่ำโดยไม่แบ่งเฉพาะเพราะสามารถทำได้เป็นเปลี่ยนบิตกะขวาแต่ละคนเป็นหนึ่งในอำนาจของทั้งสองเช่น OP คิดว่าเขามีสองปัญหาแบ่งใน PIC16 และหน่วยความจำสำหรับแหวนของเขา buffer คำตอบนี้แสดงให้เห็นว่าการแบ่ง ไม่ใช่เรื่องยากเป็นที่ยอมรับมันไม่ได้อยู่ที่ปัญหาหน่วยความจำ แต่ระบบ SE ช่วยให้คำตอบบางส่วนและผู้ใช้สามารถใช้อะไรจากคำตอบสำหรับตัวเองหรือแม้กระทั่งการแก้ไขและรวมคำตอบอื่น ๆ s เนื่องจากบางส่วนของคำตอบอื่น ๆ ต้องมีการดำเนินการแบ่งพวกเขา ยังไม่สมบูรณ์เหมือนกันเนื่องจากไม่แสดงวิธีการอย่างมีประสิทธิภาพบรรลุนี้ใน PIC16 มาร์ติน 20 เมษายน 12 ที่ 13 01. มีคำตอบสำหรับการกรองเฉลี่ยจริงกรอง aka boxcar กรองกับความต้องการหน่วยความจำน้อยลงถ้าคุณ don t ใจ downsampling It s เรียกว่าตัวกรองแบบผสมผสานแบบเรียงซ้อน (Cascaded Integrator-comb filter) CIC แนวคิดก็คือคุณมีตัวรวบรวมข้อมูลซึ่งคุณใช้ความแตกต่างในช่วงเวลาหนึ่ง ๆ และอุปกรณ์ประหยัดหน่วยความจำที่สำคัญคือโดยการสุ่มตัวอย่างคุณจะไม่ต้องเก็บอีเวน ry ค่าของ integrator สามารถดำเนินการโดยใช้ pseudocode ต่อไปนี้ความยาวเฉลี่ยที่มีประสิทธิภาพของการเคลื่อนที่ของคุณคือ decimationFactor stateize แต่คุณจะต้องเก็บตัวอย่างเกี่ยวกับ statesize แน่นอนคุณจะได้รับประสิทธิภาพที่ดีขึ้นถ้า statesize และ decimationFactor ของคุณมีอำนาจของ 2 เพื่อให้ ส่วนแบ่งและตัวดำเนินการที่เหลือได้รับการแทนที่โดยการเปลี่ยนแปลงและหน้ากาก - ands. Postscript ฉันเห็นด้วยกับ Olin ว่าคุณควรพิจารณาตัวกรอง IIR แบบธรรมดาก่อนที่ตัวกรองค่าเฉลี่ยที่เคลื่อนที่ถ้าคุณไม่จำเป็นต้องมี nulls ค่าของตัวกรอง boxcar 1 ขั้ว หรือตัวกรองความถี่ต่ำ 2 ขั้วอาจจะทำงานได้ดีในทางกลับกันถ้าคุณกำลังกรองเพื่อจุดประสงค์ในการ decimation โดยใช้อินพุตที่มีอัตราการสุ่มตัวอย่างสูงและใช้ค่าเฉลี่ยสำหรับการใช้งานโดยกระบวนการที่มีอัตราต่ำ อาจเป็นเพียงสิ่งที่คุณกำลังมองหาโดยเฉพาะอย่างยิ่งถ้าคุณสามารถใช้ stateize 1 และหลีกเลี่ยง ringbuffer ทั้งหมดพร้อมเพียง value. There integrator ก่อนหน้านี้มีการวิเคราะห์ในเชิงลึกของคณิตศาสตร์ที่อยู่เบื้องหลังการใช้คำสั่งแรก er IIR filter ที่ Olin Lathrop ได้อธิบายไว้แล้วเกี่ยวกับการแลกเปลี่ยน stack การประมวลผลสัญญาณภาพดิจิตอลรวมถึงภาพสวย ๆ มากมายสมการนี้เป็นตัวกรอง IIR ซึ่งสามารถใช้งานได้โดยใช้ integers เพียงอย่างเดียวและไม่มีการหารโดยใช้โค้ดต่อไปนี้อาจต้องมีการดีบั๊กตามที่ฉัน กำลังพิมพ์จากหน่วยความจำตัวกรองนี้ประมาณค่าเฉลี่ยเคลื่อนที่ของตัวอย่าง K ล่าสุดด้วยการกำหนดค่าของอัลฟาไปเป็น 1 K ให้ทำดังนี้ในโค้ดข้างต้นด้วยการกำหนด BITS ไปที่ LOG2 K นั่นคือ K 16 ชุด BITS ถึง 4 สำหรับ K 4 ชุด BITS ถึง 2 ฯลฯ ฉันจะตรวจสอบรหัสที่ระบุไว้ที่นี่ทันทีที่ฉันได้รับการเปลี่ยนแปลงและแก้ไขคำตอบถ้า needed. answered 23 มิถุนายนที่ 4 04.Here sa เดียวขั้วต่ำผ่านกรองเฉลี่ยเคลื่อนที่ด้วย cutoff ความถี่ CutoffFrequency ง่ายมากอย่างรวดเร็วทำงานได้ดีและเกือบจะไม่มีหน่วยความจำ overhead. Note ตัวแปรทั้งหมดมีขอบเขตเกินกว่าฟังก์ชั่นการกรองยกเว้นผ่านใน newInput. Note นี่คือตัวกรองขั้นตอนเดียวหลายขั้นตอนสามารถ cascaded กันเพื่อเพิ่ม ความคมชัดของ ตัวกรองถ้าคุณใช้มากกว่าหนึ่งขั้นตอนคุณจะต้องปรับ DecayFactor เป็นที่เกี่ยวข้องกับ Cutoff ความถี่เพื่อชดเชยและเห็นได้ชัดทั้งหมดที่คุณต้องเป็นทั้งสองสายที่วางไว้ที่ใดก็ได้พวกเขา don t จำเป็นต้องใช้ฟังก์ชันของตัวเองตัวกรองนี้จะมี เวลาเริ่มทำงานก่อนค่าเฉลี่ยเคลื่อนที่ของสัญญาณอินพุตหากคุณต้องการหลีกเลี่ยงเวลาในการรับส่งสัญญาณคุณสามารถเริ่มต้น MovingAverage ให้เป็นค่าแรกของ newInput แทน 0 และหวังว่าอินเทอร์เฟซใหม่จะไม่เป็นค่าผิดปกติ CutRequest SampleRate มีช่วงระหว่าง 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.For ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้เป็นหนังสือที่ยอดเยี่ยมที่ s บทที่ 19 เกี่ยวกับตัวกรอง recursive. PS สำหรับกระบวนทัศน์ Moving Average วิธีการที่แตกต่างกันในการตั้งค่า DecayFactor และ AmplitudeFactor ที่อาจเกี่ยวข้องกับความต้องการของคุณมากขึ้นสมมติว่าคุณต้องการก่อนหน้านี้ประมาณ 6 รายการโดยเฉลี่ย tog ether ทำ discretely คุณ d เพิ่ม 6 รายการและหารด้วย 6 เพื่อให้คุณสามารถตั้งค่า AmplitudeFactor เป็น 1 6 และ DecayFactor เป็น 1 0 - AmplitudeFactor. answered 14 พฤษภาคม 12 ที่ 22 55 ทุกคนอื่นได้แสดงความคิดเห็นอย่างละเอียดเกี่ยวกับยูทิลิตี้ ของ IIR vs FIR และในอำนาจของสองฝ่ายฉัน d ต้องการให้รายละเอียดการใช้งานด้านล่างทำงานได้ดีใน microcontrollers ขนาดเล็กไม่มี FPU ไม่มีการคูณและถ้าคุณเก็บ N พลังของทั้งสองฝ่าย เป็น single-cycle bit-shifting บัฟเฟอร์ ring FIR พื้นฐานเก็บบัฟเฟอร์ที่กำลังทำงานของค่า N ล่าสุดและ SUM ที่ใช้งานของค่าทั้งหมดในบัฟเฟอร์แต่ละครั้งที่มีตัวอย่างใหม่เข้ามาให้ลบค่าที่เก่าแก่ที่สุดในบัฟเฟอร์จาก SUM แทนที่ด้วยตัวอย่างใหม่เพิ่มตัวอย่างใหม่ให้ SUM และ SUM N Modified IIR buffer เอาต์พุตจะมีค่า SUM ที่กำลังทำงานอยู่ของค่า N ล่าสุดทุกครั้งที่มีตัวอย่างใหม่มาให้ SUM - SUM N เพิ่มในใหม่ ตัวอย่างและผลลัพธ์ SUM ตอบเมื่อสิงหาคม 28 13 เวลา 13 45. ถ้าฉันอ่านคุณถูกต้องคุณจะอธิบายคำสั่งแรก IIR กรองค่าที่คุณลบออกใหม่ไม่ใช่ค่าที่เก่าแก่ที่สุดซึ่งหลุดออก แต่แทนที่จะเป็นค่าเฉลี่ยของค่าก่อนหน้าตัวกรอง IIR ของ First-order จะเป็นประโยชน์อย่างแน่นอน แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไรเมื่อคุณแนะนำว่าเอาต์พุต เป็นเหมือนกันสำหรับทุกสัญญาณเป็นระยะ ๆ ที่อัตราการสุ่มตัวอย่าง 10 กิโลเฮิรตซ์การป้อนคลื่นความถี่ 100Hz ลงในตัวกรองกล่อง 20 เฟสจะทำให้สัญญาณที่เพิ่มขึ้นอย่างสม่ำเสมอสำหรับ 20 ตัวอย่างอยู่สูง 30 หยดอย่างสม่ำเสมอสำหรับ 20 ตัวอย่างและอยู่ต่ำ สำหรับ 30 A แรกสั่ง IIR supercat กรอง 28 สิงหาคม 13 ที่ 15 31.will ผลคลื่นที่รุนแรงเริ่มเพิ่มขึ้นและค่อยๆระดับออกใกล้ แต่ไม่ได้ใส่ที่สูงสุดแล้วอย่างรวดเร็วเริ่มลดลงและค่อยๆระดับปิดใกล้ แต่ไม่ได้ที่อินพุท น้อยมาก supercat พฤติกรรมที่แตกต่างกัน Aug 28 13 at 15 32.One ก็คือค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายอาจจะหรืออาจจะไม่เป็นประโยชน์กับตัวกรอง IIR คุณจะได้รับตัวกรองที่ดีกับ calcs ค่อนข้างน้อย FIR ที่คุณอธิบายสามารถให้คุณได้ รูปสี่เหลี่ยมผืนผ้าในเวลา - sinc in freq - และคุณสามารถ t จัดการด้าน lobes มันอาจจะดีคุ้มค่าที่จะโยนในจำนวนเต็มไม่กี่คูณเพื่อให้เป็น FIR ปรับสมมาตรที่ดีถ้าคุณสามารถประหยัดนาฬิกา ticks Scott Seidman 29 สิงหาคม 13 ที่ 13 50 ScottSeidman No ต้องคูณถ้าหนึ่งมีเพียงขั้นตอนของ FIR ทั้งสองเอาท์พุทค่าเฉลี่ยของการป้อนข้อมูลไปยังขั้นตอนนั้นและค่าที่เก็บไว้ก่อนหน้านี้และจากนั้นเก็บข้อมูลถ้ามีช่วงตัวเลขหนึ่งสามารถใช้ผลรวมมากกว่าเฉลี่ยไม่ว่าจะเป็น s ดีกว่าตัวกรองกล่องขึ้นอยู่กับโปรแกรมการตอบสนองขั้นตอนของตัวกรองกล่องที่มีความล่าช้ารวม 1ms ตัวอย่างเช่นจะมีการบีบ d2 dt น่ารังเกียจเมื่อการเปลี่ยนแปลงการป้อนข้อมูลและอีกครั้ง 1ms ต่อมา แต่จะมีขั้นต่ำที่เป็นไปได้ d dt สำหรับตัวกรองที่มี superms 1ms ล่าช้า 29 สิงหาคม 13 ที่ 15 25. เป็น mikeselectricstuff กล่าวว่าถ้าคุณต้องการจริงๆเพื่อลดความต้องการหน่วยความจำของคุณและคุณ don t ใจการตอบสนองต่อแรงกระตุ้นของคุณเป็นเลขแทนของชีพจรรูปสี่เหลี่ยมผืนผ้าฉัน จะไปสำหรับการเคลื่อนที่แบบเอ็กซ์เรย์แทน กรองความโกรธฉันใช้พวกเขาอย่างกว้างขวางกับชนิดของตัวกรองที่คุณ don t ต้อง buffer คุณ don t ต้องเก็บตัวอย่างที่ผ่านมา N เพียงหนึ่งดังนั้นความต้องการหน่วยความจำของคุณได้รับการลดลงโดยปัจจัยของ N. นอกจากนี้คุณ don t ต้องใด สำหรับ multiplications เฉพาะที่ถ้าคุณมีการเข้าถึงเลขคณิตลอยเลขใช้ทศนิยม multiplications มิฉะนั้นจะทำ multiplications จำนวนเต็มและเลื่อนไปทางขวา แต่เราอยู่ในปี 2012 และผมอยากจะแนะนำให้คุณใช้คอมไพเลอร์และ MCUs ที่ช่วยให้คุณ เพื่อทำงานกับตัวเลข floating-point นอกจากนี้หน่วยความจำที่มีประสิทธิภาพมากขึ้นและเร็วขึ้นคุณ don t ต้องปรับปรุงรายการในบัฟเฟอร์วงกลมใด ๆ ที่ฉันจะบอกว่ามันเป็นธรรมชาติมากขึ้นเพราะการตอบสนองแรงกระตุ้นเลขชี้ตรงกับลักษณะทางธรรมชาติจะทำงานในกรณีส่วนใหญ่ ได้ตอบ 20 เมษายนที่ 9 59.One กับตัวกรอง IIR เกือบสัมผัสโดย olin และ supercat แต่เห็นได้ชัดว่าละเลยโดยคนอื่น ๆ ก็คือการปัดเศษแนะนำบางอย่างไม่ถูกต้องและอาจตัดทรราชสมมติว่า N i อำนาจของสองและใช้เลขคณิตจำนวนเต็มเท่านั้นการเปลี่ยนสิทธิจะทำให้ LSBs ของตัวอย่างใหม่เป็นระบบอย่างเป็นระบบนั่นหมายความว่าระยะเวลาที่ชุดข้อมูลจะยาวนานเท่าใดค่าเฉลี่ยจะไม่นำค่าเหล่านี้เข้าสู่บัญชีตัวอย่างเช่นสมมติว่าช้า ลดลงชุด 8,8,8 8,7,7,7 7,6,6 และสมมติว่าค่าเฉลี่ยเป็นจริง 8 ที่จุดเริ่มต้นกำปั้น 7 ตัวอย่างจะนำค่าเฉลี่ยไป 7 ไม่ว่าสิ่งที่กรองความแข็งแรงเพียงแค่หนึ่งตัวอย่างเดียวกัน เรื่องราวสำหรับ 6 ฯลฯ ตอนนี้คิดว่าตรงข้ามซีรีย์ขึ้นค่าเฉลี่ยจะอยู่ที่ 7 ตลอดไปจนกว่าตัวอย่างมีขนาดใหญ่พอที่จะทำให้มันเปลี่ยนแปลงได้แน่นอนคุณสามารถแก้ไขความอคติโดยการเพิ่ม 1 2 N 2 แต่ ที่ได้รับรางวัล t จริงๆแก้ปัญหาความแม่นยำในกรณีที่ชุดลดลงจะอยู่ที่ 8 ตลอดจนตัวอย่างเป็น 8-1 2 N 2 สำหรับ N 4 ตัวอย่างใด ๆ เหนือศูนย์จะให้ค่าเฉลี่ยไม่เปลี่ยนแปลงผมเชื่อว่าการแก้ปัญหาสำหรับ นั่นหมายความว่าจะถือสะสมของ LSBs หายไป แต่ฉัน didn t ทำให้ไกลพอที่จะมีรหัสพร้อม, และฉันไม่แน่ใจว่ามันจะไม่เป็นอันตรายต่ออำนาจ IIR ในกรณีอื่น ๆ ของชุดเช่น 7,9,7,9 จะเฉลี่ย 8 แล้ว. โอลินน้ำตกสองขั้นตอนของคุณก็จะต้องมีคำอธิบายอยู่บ้างคุณหมายถึงการเก็บค่าเฉลี่ย 2 ค่าด้วยผลลัพธ์จากการป้อนข้อมูลครั้งแรกเป็นครั้งที่สองในแต่ละรอบข้อมูลสิ่งที่เป็นประโยชน์นี้

No comments:

Post a Comment