ตัวกรองความถี่ต่ำ: ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับวงจรนี้

วงจรกรองความถี่ต่ำ

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

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ กรองผ่านต่ำและตัวกรองอื่น ๆ และจะช่วยคุณในโครงการของคุณด้วย 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 I2C

สำหรับการใช้ตัวกรองเหล่านี้การใช้ไลบรารีสำหรับ Arduino IDE จะทำให้งานของคุณง่ายขึ้นมาก คุณสามารถใช้ได้ เดียวกันนี้.

คุณควรทราบว่าไม่จำเป็นต้องสร้างวงจร ตัวกรองความถี่สูงหรือตัวกรองความถี่ต่ำ เพื่อเชื่อมต่อกับบอร์ด 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);                                
}

โปรดจำไว้ว่า ADC คือตัวแปลง Arduino Analog Digital ใช้ช่วง 0-5v แบ่งเป็นช่วง 0-1023 ถ้าค่าเป็น 0v จะใช้ค่าดิจิตอลเป็น 0 และถ้าเป็น 5v จะใช้ 1023 เป็นค่าสัญญาณ 1v สามารถเป็น 204m, 2v จะเป็น 408 เป็นต้น

ฉันแนะนำให้คุณแก้ไขและทดลองใช้รหัสเหล่านี้ ผลลัพธ์ที่คุณสามารถทำได้ ดูแบบกราฟิกมาก ขอบคุณ Serial Plotter ของ Arduino IDE …โปรดจำไว้ว่าหากคุณมีคำถามเกี่ยวกับการเขียนโปรแกรม Arduino หรือวิธีใช้ IDE คุณสามารถดาวน์โหลด หลักสูตร HwLibre ฟรีในรูปแบบ PDF.


เป็นคนแรกที่จะแสดงความคิดเห็น

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา