ขดลวดและออปแอมป์ช่วยให้คุณสร้างวงจรที่น่าสนใจเช่นที่มีชื่อเสียง ตัวกรองความถี่. ตัวกรองเหล่านี้มีแอพพลิเคชั่นมากมายในอุตสาหกรรมอิเล็กทรอนิกส์ เช่นเดียวกับกรณีของตัวกรองความถี่ต่ำตัวกรองความถี่สูงเป็นต้น เป็นสิ่งที่น่าสนใจอย่างยิ่งสำหรับแอปพลิเคชั่นเสียงบางประเภทความสามารถในการกรองเสียงหรือเสียงที่รุนแรงมากหรือน้อยตามความถี่ ดังนั้นจึงมีประโยชน์มาก
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ กรองผ่านต่ำและตัวกรองอื่น ๆ และจะช่วยคุณในโครงการของคุณด้วย Arduino หรือ DIY ได้อย่างไรฉันขอแนะนำให้คุณอ่านต่อ ...
ตัวกรองไฟฟ้า
ตามชื่อของมันตัวกรองคือวงจรที่ประกอบด้วยชุดของขดลวดและตัวเก็บประจุและแม้แต่แอมพลิฟายเออร์ที่ใช้งานได้บางตัวเพื่อจุดประสงค์ในการ ปล่อยให้ความถี่บางส่วนผ่านไปเท่านั้น. นั่นคือจากสเปกตรัมทั้งหมดของความถี่ที่มีอยู่พวกมันจะกรองส่วนหนึ่งหรือหลายส่วนเพื่อป้องกันไม่ให้ผ่านไป
ถ้าสำหรับ ejemplo เรากำลังพูดถึงสเปกตรัมที่มนุษย์สามารถได้ยินได้ซึ่งเปลี่ยนไปจาก 20 Hz ถึง 20 Khz โดยมีฟิลเตอร์ที่คุณสามารถกำจัดค่าต่ำสุดหรือสูงสุดเพื่อให้เสียงแหลม / เบสผ่านได้มากหรือน้อยเท่านั้น เป็นสิ่งที่ระบบบันทึกเสียงหรือการทำสำเนาเสียงจำนวนมากใช้เช่นไมโครโฟนลำโพง ฯลฯ
ชนิด
ตาม ประเภทตัวกรองหรือมากกว่านั้นขึ้นอยู่กับความถี่ที่ปิดกั้นหรือความถี่ที่พวกเขาปล่อยให้มีวงจรประเภทต่าง ๆ ได้แก่ :
- กรองผ่านต่ำ: พวกมันถูกเรียกอย่างนั้นเพราะเป็นตัวกรองที่ปล่อยให้ความถี่ต่ำสุดผ่านและระงับหรือลดความถี่ที่ผ่านไป ประกอบด้วยขดลวดหนึ่งตัวขึ้นไป (อยู่ในชุดที่มีแหล่งจ่ายไฟและโหลด) และตัวเก็บประจุแบบแบ่งหนึ่งหรือสองตัวพร้อมแหล่งจ่ายไฟและโหลด โปรดจำไว้ว่าโหลดเป็นที่เข้าใจว่าเป็นอุปกรณ์ที่เชื่อมต่อกับตัวกรองและรวบรวมเอาท์พุทของตัวกรอง ... ภายในตัวกรองเหล่านี้ยังมีตัวแปรเช่น L, T และ π.
- ตัวกรองความถี่สูง: ตัวกรองความถี่สูงจะตรงกันข้ามกับความถี่ต่ำในกรณีนี้สิ่งที่จะกรองหรือ จำกัด คือการส่งผ่านความถี่ต่ำโดยปล่อยให้ความถี่ที่สูงขึ้นผ่านไป ในองค์ประกอบอิเล็กทรอนิกส์ที่ประกอบขึ้นมีการลงทุน นั่นคือที่นี่ตัวเก็บประจุจะเป็นตัวเก็บประจุในอนุกรมที่มีแหล่งจ่ายไฟและโหลดในขณะที่ขดลวดจะถูกปัด นอกจากนี้ยังมีประเภทย่อยเช่นเดียวกับในกรณีของตัวกรองความถี่ต่ำ
- แบนด์พาสฟิลเตอร์: ฟิลเตอร์ประเภทนี้ใช้แถบความถี่การส่งผ่านสองช่วงความถี่ นั่นคือพวกมันทำหน้าที่เป็นทั้งตัวกรองความถี่ต่ำและตัวกรองความถี่สูงซึ่งตรงข้ามกับทางเดินของความถี่ต่ำสุดและสูงสุดในเวลาเดียวกัน กล่าวอีกนัยหนึ่งก็คืออนุญาตให้ความถี่กลางผ่านเท่านั้น
- ตัวกรองวงดนตรี: มันตรงข้ามกับความถี่ก่อนหน้าทุกประการสิ่งที่ทำคือกรองการส่งผ่านของความถี่กลางและปล่อยให้ผ่านความถี่ต่ำสุดและสูงสุดเท่านั้น
จำไว้ การเหนี่ยวนำ พวกเขาปล่อยผ่านความถี่ต่ำและต่อต้านการผ่านของความถี่สูง แทน, ตัวเก็บประจุ พวกเขาปล่อยผ่านความถี่สูงและต่อต้านการผ่านของความถี่ต่ำ
ฉันต้องการเพิ่มตัวกรองนั้นในระดับที่ใช้งานได้จริง พวกเขาไม่สมบูรณ์แบบและพวกเขาสามารถปล่อยผ่านความถี่ต่ำหรือสูงที่คุณควรปิดกั้นได้เสมอ อย่างไรก็ตามพวกเขาทำงานได้ค่อนข้างดีสำหรับการใช้งานส่วนใหญ่
และในที่สุดฉันก็อยากจะชี้แจงอีกเรื่องหนึ่งและนั่นคือคุณเคยได้ยินเกี่ยวกับไฟล์ ตัวกรอง EMA และ DEMA. ตัวกรอง EMA (Exponential Moving Average) อนุญาตให้ใช้ตัวกรองประเภทนี้ได้ง่ายๆในอุปกรณ์ฝังตัว สำหรับ DEMA (Double Exponential Moving Average) พวกเขามีการตอบสนองที่เร็วกว่า EMA โดยยังคงรักษาระดับเสียงรบกวนที่คุณต้องการหลีกเลี่ยงได้ดี
ปัจจัยอัลฟ่า
El ปัจจัยอัลฟาซึ่งคุณจะเห็นว่าปรากฏในรหัส Arduino IDE ในส่วนถัดไปคือพารามิเตอร์ที่กำหนดเงื่อนไขการทำงานของตัวกรองเลขชี้กำลัง มันเกี่ยวข้องกับความถี่คัตออฟ:
- Alpha = 1: ที่ให้สัญญาณไปยังเอาต์พุตที่ไม่มีการกรอง
- Alpha = 0: ค่าตัวกรองจะเป็น 0 เสมอ
- Alpha = x: ค่าอื่น ๆ สามารถรับการเปลี่ยนแปลงอื่น ๆ ได้ในตัวกรอง EMA หากคุณลด Alpha factor คุณจะทำให้สัญญาณความถี่ที่ได้รับมีความนุ่มนวลมากขึ้นและเวลาตอบสนองของระบบก็จะเพิ่มขึ้นด้วย (ใช้เวลาในการคงที่นานขึ้น)
ฟิลเตอร์และ Arduino
คุณควรทราบว่าไม่จำเป็นต้องสร้างวงจร ตัวกรองความถี่สูงหรือตัวกรองความถี่ต่ำ เพื่อเชื่อมต่อกับบอร์ด Arduino ของคุณและใช้งานได้ แม้ว่าคุณจะสามารถทดลองและสร้างฟิลเตอร์ง่ายๆประเภทนี้ได้ แต่คุณยังสามารถทดสอบว่า EMA จะทำงานอย่างไรกับบอร์ด Arduino และรหัสง่ายๆสำหรับ Arduino IDE เป็นสิ่งเดียวที่คุณต้องดูว่ามีหน้าที่ในการกรองความถี่บางส่วนอย่างไร (ในกรณีนี้เป็นการจำลองการกระทำและจำนวนเต็ม / ลอยบางส่วนจะถูกกรองเพียงอย่างเดียว จำลองสิ่งที่ฉันจะทำ กรองจริง)
นี่คือตัวอย่างโค้ดบางส่วนที่คุณสามารถใช้ฝึกฝนได้
ตัวอย่างของตัวกรองดิจิตอลอย่างง่ายในประเภท Arduino ผ่านต่ำ:
float lowpass_prev_out[LOWPASS_ANALOG_PIN_AMT], lowpass_cur_out[LOWPASS_ANALOG_PIN_AMT]; int lowpass_input[LOWPASS_ANALOG_PIN_AMT]; int adcsample_and_lowpass(int pin, int sample_rate, int samples, float alpha, char use_previous) { // pin: Pin analógico de Arduino usado // sample_rate: El ratio adecuado // samples: Samples // alpha: El factor Alpha para el filtro paso bajo // use_previous: Si es true se sigue ajustando hasta el valor más reciente. float one_minus_alpha = 1.0-alpha; int micro_delay=max(100, (1000000/sample_rate) - 160); if (!use_previous) { lowpass_input[pin] = analogRead(pin); lowpass_prev_out[pin]=lowpass_input[pin]; } int i; for (i=samples;i>0;i--) { delayMicroseconds(micro_delay); lowpass_input[pin] = analogRead(pin); lowpass_cur_out[pin] = alpha*lowpass_input[pin] + one_minus_alpha*lowpass_prev_out[pin]; lowpass_prev_out[pin]=lowpass_cur_out[pin]; } return lowpass_cur_out[pin]; } int resulting_value; void setup() { Serial.begin(9600); resulting_value = adcsample_and_lowpass(0, 1000, 300, 0.015, false); } void loop() { resulting_value = adcsample_and_lowpass(0, 1000, 150, 0.015, true); Serial.println(resulting_value);
ตัวอย่างโค้ดสำหรับประเภท Arduino ผ่านสูง:
int sensorPin = 0; //pin usado para el ADC int sensorValue = 0; //Inicia sensor variable equivalente a EMA Y float EMA_a = 0.3; //Inicialización del EMA Alpha int EMA_S = 0; //Iniciación del EMA s int highpass = 0; void setup(){ Serial.begin(115200); EMA_S = analogRead(sensorPin); } void loop(){ sensorValue = analogRead(sensorPin); //Lee el valor del sensor ADC EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S); //Ejecuta el filtro EMA highpass = sensorValue - EMA_S; //Calcula la seña alta Serial.println(highpass); delay(20); //Espera 20ms }
ตัวอย่างรหัส Arduino วงดนตรีผ่าน:
int sensorPin = 0; //Pin para el ADC int sensorValue = 0; //Inicia la variable del sensor, equivale a EMA Y float EMA_a_low = 0.3; //Inicia EMA Alpha float EMA_a_high = 0.5; int EMA_S_low = 0; //Inicia EMA S int EMA_S_high = 0; int highpass = 0; int bandpass = 0; void setup(){ Serial.begin(115200); EMA_S_low = analogRead(sensorPin); EMA_S_high = analogRead(sensorPin); } void loop(){ sensorValue = analogRead(sensorPin); //Lee el valor del sensor ADC EMA_S_low = (EMA_a_low*sensorValue) + ((1-EMA_a_low)*EMA_S_low); //Ejecuta EMA EMA_S_high = (EMA_a_high*sensorValue) + ((1-EMA_a_high)*EMA_S_high); highpass = sensorValue - EMA_S_low; bandpass = EMA_S_high - EMA_S_low; Serial.print(highpass); Serial.print(" "); Serial.println(bandpass); delay(20); }
ตัวอย่างรหัส Arduino สำหรับวงดนตรี:
int sensorPin = 0; //Pin usado para el ADC int sensorValue = 0; //Inicio para EMA Y float EMA_a_low = 0.05; //Inicio de EMA alpha float EMA_a_high = 0.4; int EMA_S_low = 0; //Inicia EMA S int EMA_S_high = 0; int highpass = 0; int bandpass = 0; int bandstop = 0; void setup(){ Serial.begin(115200); EMA_S_low = analogRead(sensorPin); EMA_S_high = analogRead(sensorPin); } void loop(){ sensorValue = analogRead(sensorPin); //Lee el valor del sensor ADC EMA_S_low = (EMA_a_low*sensorValue) + ((1-EMA_a_low)*EMA_S_low); //Ejecuta EMA EMA_S_high = (EMA_a_high*sensorValue) + ((1-EMA_a_high)*EMA_S_high); bandpass = EMA_S_high - EMA_S_low; bandstop = sensorValue - bandpass; Serial.print(sensorValue); Serial.print(" "); Serial.print(EMA_S_low); Serial.print(" "); Serial.println(bandstop); delay(20); }
ฉันแนะนำให้คุณแก้ไขและทดลองใช้รหัสเหล่านี้ ผลลัพธ์ที่คุณสามารถทำได้ ดูแบบกราฟิกมาก ขอบคุณ Serial Plotter ของ Arduino IDE …โปรดจำไว้ว่าหากคุณมีคำถามเกี่ยวกับการเขียนโปรแกรม Arduino หรือวิธีใช้ IDE คุณสามารถดาวน์โหลด หลักสูตร HwLibre ฟรีในรูปแบบ PDF.