Niskopropusni filter: sve što trebate znati o ovom krugu

niskopropusni krug filtra

Zavojnice i opcijska pojačala omogućuju vam stvaranje vrlo zanimljivih sklopova, poput poznatih frekvencijski filtri. Ovi filtri imaju mnoštvo aplikacija u elektroničkoj industriji. Kao što je slučaj sa niskopropusnim filterom, visokopropusnim filterom itd. Posebno su zanimljivi za određene zvučne aplikacije, jer mogu filtrirati šumove ili manje ili više ozbiljne zvukove prema njihovoj frekvenciji. Stoga su vrlo korisni.

Ako želite znati više o tome niskopropusni filter, i druge filtere, i kako vam mogu pomoći u vašim projektima s Arduinom ili Uradi sam, savjetujem vam da nastavite čitati ...

Električni filtri

Kao što mu samo ime govori, filter je sklop koji se sastoji od niza zavojnica i kondenzatora, pa čak i nekih operativnih pojačala, u svrhu propuštajući samo određene dijelove frekvencije. Odnosno, od čitavog spektra dostupnih frekvencija filtrirat će jedan ili više dijelova kako bi spriječili njihov prolazak.

Ako je za ejemplo Govorimo o spektru koji čuje ljudsko biće, koji se kreće od 20 Hz do 20 Khz, s filtrima koje biste mogli eliminirati najniži ili najviši, kako biste samo omogućili prolazak više ili manje visokih ili niskih tonova. To je nešto što mnogi sistemi za snimanje ili reprodukciju zvuka koriste, poput mikrofona, zvučnika itd.

Vrste

Prema rečima tip filtra, tačnije, ovisno o frekvenciji koju blokiraju ili onoj koju propuste, postoje različite vrste sklopova koji su:

  • Niskopropusni filter: oni se tako zovu jer su oni filtri koji propuštaju najniže frekvencije i potiskuju ili smanjuju prolaz viših frekvencija. Sastoje se od jedne ili više zavojnica (u seriji sa napajanjem i opterećenjem) i jednog ili dva ranžirna kondenzatora sa napajanjem i opterećenjem. Imajte na umu da se pod opterećenjem podrazumijeva uređaj povezan na filter i koji prikuplja izlazne podatke filtra ... Unutar ovih filtara postoje i varijante, poput L, T i π.
  • Visokopropusni filter: visokopropusni filter je suprotan niskopropusnom, u ovom slučaju ono što će filtrirati ili ograničiti je prolazak niske frekvencije, propuštajući više frekvencije. U to se ulažu elektronički elementi koji ga čine. Odnosno, ovdje će kondenzatori biti oni u seriji s napajanjem i opterećenjem, dok će zavojnice biti montirane. Postoje i isti podtipovi kao u slučaju niskopropusnih filtara.
  • Opsežni filtar: Ova vrsta filtera koristi dva bloka brzine prolaska frekvencijskog pojasa. Odnosno, djeluju i kao niskopropusni filtar i kao visokopropusni filter, suprotstavljajući se prolasku najnižih frekvencija, a istovremeno i najviših. Drugim riječima, omogućava samo prolazak srednjih frekvencija.
  • Trakasti filter: upravo je suprotno od prethodne, ono što radi je da filtrira prolaz srednjih frekvencija i propušta samo najniže i najviše frekvencije.

Zapamtite da induktivnosti propuštaju niske frekvencije i protive se prolasku visokih frekvencija. Umjesto toga, kondenzatori propuštaju visoke frekvencije i protive se prolasku niskih frekvencija.

Želio bih dodati da su filtri na praktičnom nivou nisu savršeni, i oni uvijek mogu propustiti neke niske ili visoke frekvencije koje biste trebali blokirati. Međutim, svoj posao rade prilično dobro za većinu aplikacija.

I na kraju, želio bih pojasniti još jednu stvar, a to je da ste sigurno čuli za EMA i DEMA filtri. EMA (eksponencijalni pokretni prosjek) filtri omogućavaju implementaciju ove vrste filtera na jednostavan način u ugrađenim uređajima. Što se tiče DEMA-e (dvostrukog eksponencijalnog pokretnog prosjeka), oni imaju brži odziv od EMA-e, održavajući dobro potiskivanje šuma koji želite izbjeći.

Alfa faktor

El alfa faktor, koji ćete vidjeti da se pojavljuje u Arduino IDE kodovima u sljedećem odjeljku, parametar je koji određuje ponašanje eksponencijalnog filtra. To je povezano sa graničnom frekvencijom:

  • Alfa = 1: koja daje signal nefiltriranom izlazu.
  • Alfa = 0: vrijednost filtra uvijek će biti 0.
  • Alfa = x: ostale vrijednosti mogu dobiti druge izmjene u EMA filtru. Ako smanjite faktor Alfa, više ćete omekšati dobiveni signal frekvencije, a vrijeme odziva sistema se također povećava (treba više vremena da se stabilizuje).

Filteri i Arduino

Arduino I2C autobus

Za upotrebu ovih filtara, korištenje biblioteke za Arduino IDE znatno će vam olakšati rad. Možeš koristiti ovo isto.

Trebali biste znati da nije potrebno stvarati sklop visokopropusni filter ili niskopropusni filter da ga povežete sa Arduino pločom i radite s njom. Iako možete eksperimentirati i stvoriti ove vrste jednostavnih filtara, možete i testirati kako bi EMA radila samo sa Arduino pločom i jednostavnim kodom za Arduino IDE. To je jedina stvar koju trebate vidjeti kako je ona zadužena za filtriranje nekih frekvencija (u ovom slučaju akcija se simulira, a neke cijele brojeve / plutajuće prosto filtriraju simulirajući šta bih radio filter zapravo).

Evo nekoliko uzoraka koda koje možete koristiti za vježbanje.

Primjer jednostavnog digitalnog filtra u Arduinu tipa low pass:

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);

Primjer koda za Arduino tip High pass:

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
}

Primjer Arduino koda band pass:

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);                              
}

Primjer Arduino koda za bend:

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);                                
}

Zapamtite da je ADC Arduino analogni digitalni pretvarač. Koristite opseg od 0-5v, dijeleći se na opsege od 0-1023. Ako je vrijednost 0v, uzima se digitalna vrijednost 0, a ako je 5v, 1023 će se uzeti kao vrijednost signala, 1v može biti 204m, 2v bi bilo 408 itd.

Savjetujem vam da modificirate i eksperimentirate s ovim kodovima. Rezultat koji možete vidi vrlo grafički zahvaljujući serijskom crtaču Arduino IDE-a ... Imajte na umu da ako imate pitanja o Arduino programiranju ili kako koristiti IDE, možete preuzeti besplatni kurs HwLibre u PDF-u.


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.