อัตราตัวอย่างสูงสุดของ Arduino Duemilanove?


11

ทุกวัน!

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

ฉันต้องการตัวอย่างที่ ~ 44.1 kHz ถ้าเป็นไปได้

สำหรับการอ้างอิงสิ่งแรกที่ฉันอยากลองคือเครื่องจูนเนอร์กีต้าร์ที่เรียบง่าย


อ๊ะ - เป็นรุ่น ATMega168
Sketchy Fletchy

4
@Sketchy คุณสามารถแก้ไขคำถามของคุณหากคุณต้องการแทนที่จะเพิ่มรายละเอียดในความคิดเห็น
Clint Lawrence

1
สำหรับจูนเนอร์กีต้าร์มีคำถามมากมายเกี่ยวกับสแต็คโอเวอร์โฟลว์เกี่ยวกับการประมาณความถี่ stackoverflow.com/questions/65268/ …ฉันได้ตอบคำถามเหล่านี้แล้วโพสต์โค้ดตัวอย่างสำหรับวิธีการบางอย่างที่นี่: gist.github.com/255291
endolith

คำตอบ:


15

ฉันไม่คิดว่าคุณจะได้ตัวอย่างที่รวดเร็วด้วยความละเอียดสูงสุด ATMega168 สามารถสุ่มตัวอย่างที่ 15 ksps ที่ความละเอียดเต็มเท่านั้น

ต้องบอกว่าคุณควรจะได้รับอัตราตัวอย่างที่เหมาะสมเพื่อรับกีต้าร์จูนเนอร์ที่ใช้งานได้ 44.1 kHz น่าจะเป็นบิตที่เร็วกว่าที่คุณต้องการเนื่องจากพื้นฐานของสาย E สูงที่กีตาร์มีประมาณ 330 Hz


ยอดเยี่ยม - นั่นตอบคำถามของฉันอย่างคล่องแคล่ว ฉันไม่คิดว่า 168 จะสามารถสุ่มตัวอย่างคลื่นความถี่เสียงของมนุษย์ได้ทั้งหมด แต่ถ้าฉันสามารถรับอัตราตัวอย่างอย่างน้อย 660 Hz ฉันควรจะสามารถระบุสตริง e สูงที่ไม่มีนามแฝง ฉันจะชนมันเล็กน้อยเพื่อความปลอดภัยและความรู้สึก ขอบคุณ!
Sketchy Fletchy

ตัวอย่างระบบโทรศัพท์ที่ 8000 Hz
joeforker


4

Google สำหรับ 'จูนเนอร์กีต้าร์ AVR' มีสองสามโครงการที่ทำเช่นนี้อยู่แล้วและดูเหมือนว่าพวกเขาจะสามารถทำได้โดยไม่มีปัญหากับความเร็วของ AVR มากเกินไป


3

หากคุณใช้เครื่องเปรียบเทียบแบบอะนาล็อก (ภายในเครื่องหนึ่งใน AVR หรือ opamp หนึ่งภายนอก) ที่เปลี่ยนอินพุตอนาล็อกเป็นคลื่นสี่เหลี่ยมคุณสามารถสุ่มตัวอย่างการแกว่งด้วยความเร็วสูงกว่ามาก ในขณะที่นี่ไม่ใช่การสุ่มตัวอย่างเสียงที่แท้จริงสำหรับการสร้างเครื่องรับกีต้าร์ก็มักจะเป็นสิ่งที่คุณต้องการเนื่องจากรหัสทั้งหมดของคุณจะทำอยู่แล้วจะนับเป็นศูนย์ข้ามต่อหน่วยเวลา


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

เอาต์พุตกีตาร์แบบ Single-note (โดยเฉพาะไฟฟ้า) เป็นการประมาณคลื่นไซน์อย่างใกล้ชิดเมื่อคุณผ่านช่วงเริ่มต้นชั่วคราวไปแล้ว ไม่มีฮาร์โมนิกแปลก ๆ ใกล้กับแอมพลิจูดพื้นฐาน จูนเนอร์กีต้าร์ดิจิตอล cheapie ทุกคนทำจังหวะข้ามเป็นศูนย์และไม่ทำอะไรเลยในโดเมนความถี่ นี่คือตัวอย่างหนึ่งของเทคนิคบน AVR 2323 (ใกล้เคียงกับ Arduino) myplace.nu/avr/gtuner/index.htm และนี่เป็นอีกตัวอย่างหนึ่งที่ใช้ Arduino พร้อม MIDI out youtube.com/watch?v=oGKE1vmAWCA
todbot

ฉันไม่คิดว่าตัวจูนเนอร์กีต้าร์จะนับการข้ามศูนย์และนี่ก็ไม่ใช่วิธีที่ดี มันไม่ได้อยู่ใกล้กับคลื่นไซน์และสามารถมีการข้ามผ่านศูนย์ได้หลายรอบ: flic.kr/p/7ns9nu
endolith

เครื่องรับสัญญาณที่ฉันเคยเห็นมีตัวกรองความถี่ต่ำเพื่อเปลี่ยนสัญญาณอินพุตให้เป็นคลื่นไซน์มากที่สุด
todbot

3

มี ADC จำนวนหนึ่งที่พร้อมใช้งานแบบอนุกรม I2S เป็นมาตรฐานของ NXP ที่ใช้ I2C ช่วยให้คุณสามารถดึงอะนาล็อกได้อย่างง่ายดายแม้ในความเร็วที่สูงกว่ามาก ลิงค์นี้จะพาคุณไปยังส่วนของ NXP ที่ออกแบบมาสำหรับเสียง: UDA1361TS

ตัวอย่างฟรีเป็นเพื่อนของคุณ :)


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

1

ครั้งแรกสำหรับแอพลิเคชันของคุณโดยเฉพาะที่คุณต้องการจริงๆเพียง 1 kHz หรืออัตราการสุ่มตัวอย่างเพื่อสมมติว่าคุณกำลังจูนความถี่พื้นฐานและไม่ได้เป็นหนึ่งใน partials inharmonic ...

อย่างไรก็ตามสำหรับอัตราการสุ่มตัวอย่างที่เป็นไปได้สูงสุดคู่มือ Arduinoกล่าวว่า:

ใช้เวลาประมาณ 100 microseconds (0.0001 s) ในการอ่านอินพุตแบบอะนาล็อกดังนั้นอัตราการอ่านสูงสุดคือประมาณ 10,000 ครั้งต่อวินาที

นี่หมายถึงความถี่การสุ่มตัวอย่าง 10 kHz คือสูงสุด อย่างไรก็ตาม คุณจะได้รับอัตราการสุ่มตัวอย่างที่สูงขึ้นโดยการเข้าถึงลงทะเบียน ADC โดยตรง ตัวอย่างเช่นหน้าArduino Realtime Audio Processingใช้สองช่องสัญญาณที่ 15 kHz ดังนั้นสูงสุด 10 kHz เป็นเพียงในขณะที่ใช้ฟังก์ชั่น AnalogRead () ในตัวเพราะมันมีค่าใช้จ่ายจำนวนมาก

ADC ได้รับการปรับเพื่อการทำงานที่ดีที่สุดด้วยความเร็วสัญญาณนาฬิการะหว่าง 50 kHz และ 200 kHz:

โดยค่าเริ่มต้นวงจรการประมาณต่อเนื่องต้องใช้ความถี่สัญญาณนาฬิกา [นาฬิกา ADC] ระหว่าง 50 kHz และ 200 kHz เพื่อให้ได้ความละเอียดสูงสุด

เนื่องจากการแปลง ADC ใช้เวลา 13 รอบนาฬิกานี่จะเป็นอัตราการสุ่มตัวอย่างที่ 4 kHz ถึง 15 kHz ตามAVR120: ลักษณะและการสอบเทียบของ ADC บน AVR :

เพื่อประสิทธิภาพสูงสุดนาฬิกา ADC ไม่ควรเกิน 200 kHz อย่างไรก็ตามความถี่สูงถึง 1 MHz จะไม่ลดความละเอียดของ ADC ลงอย่างมาก

การใช้งาน ADC ที่มีความถี่มากกว่า 1 MHz จะไม่มีลักษณะ

1 MHz clock frequency = 77 kHz frequency sampling, นั่นคือค่าสูงสุดที่สมจริง

ฟอรัมด้ายเร็วกว่าอนาล็อกอ่านแล้ว? มีมากขึ้นเกี่ยวกับเรื่องนี้


0

ตัวแปลงบนชิปจะทำงานกับแอปพลิเคชั่นนี้ตามที่คนอื่น ๆ ชี้ แต่คุณควรใช้ ADC ภายนอก สิ่งนี้จะช่วยให้คุณประหยัดปัญหาได้มากและปลดปล่อยไมโครของคุณให้ทดลองใช้ SPI หรือ I2C ได้มากอัตราการส่งข้อมูลที่สูงขึ้นด้วยสัญญาณรบกวนน้อยลงจากนาฬิกาของไมโครและมีความแม่นยำมากกว่าการใช้ ADC ภายใน หากคุณต้องการความละเอียดมากขึ้นและ / หรืออัตราการส่งข้อมูลที่สูงขึ้นให้ใช้ LTC1867 ซึ่งจะช่วยให้คุณสามารถสุ่มตัวอย่างได้มากถึง 175kHz (แม้ว่าคุณจะสามารถนาฬิกาได้อย่างรวดเร็ว แต่คุณต้องการ) แล้วอ่านข้อมูลแบบ 24 บิต ที่สูงถึง 20MHz กว่า SPI ดูว่า ADC ตัวจริงสามารถทำอะไรได้บ้าง :) ด้วยพลังแบบนั้น (และ DSP แบบ 24 หรือ 32 บิต) คุณสามารถบีบอัดและจัดเก็บเสียงของคุณกรองปรับเปลี่ยนเล่นกลับ ... ความเป็นไปได้ไม่มีที่สิ้นสุด


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