Žemo dažnio filtras: viskas, ką reikia žinoti apie šią grandinę

žemo dažnio filtro grandinė

Ritės ir op stiprintuvai leidžia jums sukurti labai įdomias grandines, pavyzdžiui, garsiąsias dažnio filtrai. Šie filtrai turi daugybę pritaikymų elektronikos pramonėje. Kaip yra žemo dažnio filtro, aukšto pralaidumo filtro ir kt. Jie ypač įdomūs tam tikroms garso programoms, galintys filtruoti triukšmus ar daugiau ar mažiau rimtus garsus pagal jų dažnį. Todėl jie yra labai naudingi.

Jei norite sužinoti daugiau apie žemo dažnio filtras, ir kitus filtrus, ir kaip jie gali jums padėti įgyvendinant „Arduino“ ar „pasidaryk pats“ projektus, raginu tęsti skaitymą ...

Elektriniai filtrai

Kaip rodo jo pavadinimas, filtras yra grandinė, kurią sudaro ritinių ir kondensatorių serija ir netgi kai kurie operaciniai stiprintuvai, leidžiant praeiti tik tam tikras dažnio dalis. Tai yra, iš viso turimų dažnių spektro, jie filtruos vieną ar daugiau dalių, kad neleistų jiems praeiti.

Taip už ejemplo Mes kalbame apie žmogaus girdimą spektrą, kuris eina nuo 20 Hz iki 20 Khz, naudojant filtrus, kuriuos galėtumėte pašalinti mažiausią arba aukščiausią, kad tik daugiau ar mažiau girdėtų aukštų / žemų dažnių garsai. Tai yra kažkas, ką naudoja daugelis garso įrašymo ar atkūrimo sistemų, pavyzdžiui, mikrofonai, garsiakalbiai ir kt.

Tipas

Pagal filtro tipasarba, tiksliau, priklausomai nuo jų blokuojamo dažnio arba to, kurį jie praleidžia, yra skirtingų tipų grandinės:

  • Žemo dažnio filtras: jie taip vadinami, nes jie yra tie filtrai, leidžiantys praeiti žemiausiems dažniams ir slopinantys arba sumažinantys aukštesnių dažnių praėjimą. Jie susideda iš vienos ar kelių ritinių (nuosekliai su maitinimo šaltiniu ir apkrova) ir vieno ar dviejų šunto kondensatorių su maitinimo šaltiniu ir apkrova. Atminkite, kad apkrova suprantama kaip įrenginys, prijungtas prie filtro ir surenkantis filtro išvestį. Šiuose filtruose taip pat yra variantų, tokių kaip L, T ir π.
  • Aukšto dažnio filtras: aukšto dažnio filtras yra priešingas žemo dažnio filtrui, šiuo atveju tai, ką jis filtruos ar ribos, yra žemo dažnio praėjimas, leidžiantis praeiti aukštesniems. Į tai investuojami elektroniniai elementai. Tai yra, čia kondensatoriai bus nuosekliai su maitinimo šaltiniu ir apkrova, o ritės bus manevruojamos. Taip pat yra tų pačių potipių, kaip ir žemų dažnių filtrų atveju.
  • Juostos leidimo filtras: Šio tipo filtrai veikia dviem dažnių juostos perdavimo greičio užraktais. Tai yra, jie veikia ir kaip žemo dažnio filtrai, ir kaip aukšto dažnio filtrai, prieštaraujantys žemiausių dažnių ir tuo pačiu aukščiausių dažnių praėjimui. Kitaip tariant, tai leidžia praleisti tik vidutinius dažnius.
  • Juostos filtras: jis yra visiškai priešingas ankstesniam, o tai, kad jis filtruoja vidutinių dažnių praėjimą ir praleidžia tik žemiausius ir aukščiausius dažnius.

Atminkite, kad induktyvumai jie praleidžia žemus dažnius ir priešinasi aukštų dažnių praėjimui. Vietoj to kondensatoriai jie praleidžia aukštus dažnius ir priešinasi žemų dažnių praėjimui.

Norėčiau pridurti, kad filtrai yra praktiški jie nėra tobuliir jie visada gali perduoti žemus ar aukštus dažnius, kuriuos turėtumėte užblokuoti. Tačiau jie gana gerai atlieka savo darbą daugelyje programų.

Ir galiausiai norėčiau patikslinti dar vieną dalyką, t. Y. Tai, kad jūs tikrai girdėjote apie EMA ir DEMA filtrai. EMA (eksponentinis slenkamasis vidurkis) filtrai leidžia paprastai įdiegti tokio tipo filtrus įterptuosiuose įrenginiuose. Kalbant apie DEMA (dvigubą eksponentinį slenkantį vidurkį), jie reaguoja greičiau nei EMA, išlaikydami gerą triukšmą, kurio norite išvengti.

Alfa faktorius

El alfa faktorius, kurį pamatysite kitame skyriuje esančiuose „Arduino IDE“ koduose, yra parametras, kuris sąlygoja eksponentinio filtro veikimą. Tai yra susijusi su ribiniu dažniu:

  • Alfa = 1: tai suteikia signalą nefiltruotam išėjimui.
  • Alfa = 0: filtro vertė visada bus 0.
  • Alfa = x: kitos reikšmės gali pakeisti EMA filtrą. Jei sumažinsite „Alpha“ koeficientą, sušvelninsite daugiau gautą dažnio signalą, taip pat pailgės sistemos atsako laikas (stabilizuotis reikia ilgiau).

Filtrai ir „Arduino“

„Arduino I2C“ autobusas

Jei norite naudoti šiuos filtrus, naudodami „Arduino IDE“ biblioteką, jūsų darbas bus daug lengvesnis. Tu gali naudoti tas pats.

Turėtumėte žinoti, kad nebūtina sukurti grandinės aukšto dažnio filtras arba žemo dažnio filtras prijungti jį prie „Arduino“ plokštės ir dirbti su ja. Nors galite eksperimentuoti ir kurti tokius paprastus filtrus, taip pat galite išbandyti, kaip EMA veiktų tik su „Arduino“ lenta ir paprastu „Arduino IDE“ kodu. Tai yra vienintelis dalykas, kurį reikia pamatyti, kaip jis atsakingas už kai kurių dažnių filtravimą (šiuo atveju veiksmas imituojamas, o kai kurie skaičiai / plūdės paprasčiausiai filtruojami imituodamas tai, ką daryčiau filtras iš tikrųjų).

Štai keletas kodų pavyzdžių, kuriuos galite naudoti praktikai.

Paprasto tipo „Arduino“ skaitmeninio filtro pavyzdys žemas perdavimas:

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“ tipo kodo pavyzdys Aukšta perėja:

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“ kodo pavyzdys grupės leidimas:

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“ kodo pavyzdys grupei:

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

Atminkite, kad ADC yra „Arduino Analog Digital“ keitiklis. Naudokite 0-5v diapazoną, padalydami į 0-1023. Jei vertė yra 0v, imama skaitmeninė vertė 0, o jei ji yra 5v, signalo reikšmė bus 1023, 1v gali būti 204m, 2v būtų 408 ir kt.

Aš patariu jums keisti ir eksperimentuoti su šiais kodais. Rezultatas, kurį galite matyti labai grafiškai dėka „Arduino IDE“ nuosekliojo braižytuvo ... Atminkite, kad jei turite klausimų apie „Arduino“ programavimą arba kaip naudoti IDE, galite atsisiųsti nemokamas „HwLibre“ kursas PDF formatu.


Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.