Фільтр низьких частот: все, що вам потрібно знати про цю схему

ланцюг фільтра низьких частот

Котушки та операційні підсилювачі дозволяють створювати дуже цікаві схеми, такі як знамениті частотні фільтри. Ці фільтри мають безліч застосувань в електронній промисловості. Як у випадку з фільтром низьких частот, фільтром високих частот тощо. Вони особливо цікаві для певних звукових програм, оскільки вони можуть фільтрувати шуми або більш-менш серйозні звуки відповідно до їх частоти. Тому вони дуже корисні.

Якщо ви хочете дізнатися більше про фільтр низьких частот, та інші фільтри, і як вони можуть допомогти вам у ваших проектах з Arduino або "зроби сам", я рекомендую вам продовжувати читати ...

Електричні фільтри

Як випливає з назви, фільтр - це ланцюг, який складається з ряду котушок і конденсаторів і навіть деяких операційних підсилювачів для цілей пропускаючи лише певні частини частоти. Тобто з усього спектру доступних частот вони будуть фільтрувати одну або кілька частин, щоб запобігти їх проходженню.

Якщо для приклад Ми говоримо про спектр, чутний людині, який переходить від 20 Гц до 20 Гц, за допомогою фільтрів, які ви можете усунути найнижчий або найвищий, щоб лише пропускати більш-менш високі / низькі частоти. Це те, що використовують багато систем звукозапису чи відтворення, такі як мікрофони, динаміки тощо.

Види

За тип фільтра, вірніше, залежно від частоти, яку вони блокують, або частоти, яку вони пропускають, існують різні типи ланцюгів, які:

  • Фільтр низьких частот: їх так називають, тому що вони є тими фільтрами, які пропускають нижчі частоти та придушують або зменшують пропуск більш високих частот. Вони складаються з однієї або декількох котушок (послідовно з джерелом живлення та навантаженням) та одного або двох шунтуючих конденсаторів із джерелом живлення та навантаженням. Пам'ятайте, що під навантаженням розуміється пристрій, підключений до фільтра, і який збирає вихід фільтра ... У цих фільтрах також є варіанти, такі як L, T та π.
  • Фільтр високих частот: фільтр високих частот протилежний низькочастотному, в цьому випадку те, що буде фільтрувати або обмежувати, це низькочастотний прохід, дозволяючи пройти більш високим частотам. У це вкладаються електронні елементи, що її складають. Тобто тут конденсатори будуть послідовно послідовними з джерелом живлення та навантаженням, тоді як котушки будуть шунтироваться. Існують також ті самі підтипи, що і у випадку з фільтрами низьких частот.
  • Смуговий фільтр: Цей тип фільтра використовує два блоки частоти пропускання смуги частот. Тобто вони діють і як фільтр низьких частот, і як фільтр високих частот, протидіючи проходженню найнижчих частот, а також найвищих одночасно. Іншими словами, це дозволяє проходити лише середнім частотам.
  • Смуговий фільтр: це прямо протилежне попередньому, він робить те, що фільтрує прохід середніх частот і пропускає лише найнижчі та найвищі частоти.

Пам'ятайте про це індуктивності вони пропускають низькі частоти і виступають проти проходження високих частот. Натомість, конденсатори вони пропускають високі частоти і виступають проти проходження низьких частот.

Я хотів би додати, що фільтри на практичному рівні вони не ідеальні, і вони завжди можуть пропустити деякі низькі або високі частоти, які ви повинні блокувати. Однак вони роблять свою роботу досить добре для більшості додатків.

І нарешті, я хотів би також пояснити ще одне, а саме те, що ви напевно чули про Фільтри EMA та DEMA. EMA (експоненціальне ковзне середнє) фільтри дозволяють реалізувати цей тип фільтрів простим способом у вбудованих пристроях. Що стосується DEMA (подвійного експоненціального ковзаючого середнього), вони мають швидший відгук, ніж EMA, підтримуючи належне придушення шуму, якого ви хочете уникнути.

Альфа-фактор

El альфа-фактор, який ви побачите в кодах IDE Arduino в наступному розділі, - це параметр, який визначає поведінку експоненціального фільтра. Це пов’язано з частотою відсічення:

  • Альфа = 1: що подає сигнал на нефільтрований вихід.
  • Альфа = 0: значення фільтра завжди буде 0.
  • Альфа = x: інші значення можуть отримати інші зміни у фільтрі EMA. Якщо ви зменшите коефіцієнт альфа, ви більше пом'якшите отриманий частотний сигнал, а також збільшить час відгуку системи (для стабілізації потрібно більше часу).

Фільтри та Arduino

Шина Arduino I2C

Для використання цих фільтрів використання бібліотеки для Arduino IDE значно полегшить вашу роботу. Можна використовувати це те саме.

Ви повинні знати, що не потрібно створювати схему фільтр високих частот або фільтр низьких частот щоб підключити його до вашої плати Arduino і працювати з ним. Хоча ви можете експериментувати та створювати подібні прості фільтри, ви також можете перевірити, як EMA працюватиме лише з платою Arduino та простим кодом для IDE Arduino. Це єдине, що вам потрібно побачити, як він відповідає за фільтрацію деяких частот (у цьому випадку дія моделюється, а деякі цілі числа / плаваючі елементи просто фільтруються симулюючи, що б я робив фільтр власне).

Ось кілька зразків коду, які ви можете використовувати на практиці.

Приклад простого цифрового фільтра типу 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. Використовуйте діапазон 0-5v, поділяючи на діапазони 0-1023. Якщо значення 0v, приймається цифрове значення 0, а якщо воно 5v, 1023 буде прийнято як значення сигналу, 1v може бути 204m, 2v буде 408 і т.д.

Я раджу вам модифікувати та експериментувати з цими кодами. Результат ви можете див. дуже графічно завдяки послідовному плоттеру IDE Arduino ... Пам'ятайте, що якщо у вас є питання щодо програмування Arduino або як користуватися IDE, ви можете завантажити безкоштовний курс HwLibre у форматі PDF.


Будьте першим, щоб коментувати

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.