Alipäästösuodatin: kaikki mitä sinun tarvitsee tietää tästä piiristä

alipäästösuodatinpiiri

Kelojen ja op-vahvistimien avulla voit luoda erittäin mielenkiintoisia piirejä, kuten kuuluisia taajuussuodattimet. Näillä suodattimilla on monia sovelluksia elektroniikkateollisuudessa. Kuten alipäästösuodattimen, ylipäästösuodattimen jne. Ne ovat erityisen mielenkiintoisia tietyille äänisovelluksille, koska ne voivat suodattaa ääniä tai enemmän tai vähemmän vakavia ääniä taajuuden mukaan. Siksi ne ovat erittäin hyödyllisiä.

Jos haluat tietää enemmän alipäästösuodatin, ja muut suodattimet ja miten ne voivat auttaa sinua Arduinon tai DIY-projektisi kanssa, kannustan sinua jatkamaan lukemista ...

Sähköiset suodattimet

Kuten nimestään käy ilmi, suodatin on piiri, joka koostuu sarjasta keloja ja kondensaattoreita, ja jopa joistakin operatiivisista vahvistimista, vain tietyt taajuuden osat päästetään kulkemaan. Toisin sanoen koko käytettävissä olevien taajuuksien spektristä ne suodattavat yhden tai useamman osan estääkseen niiden kulkemisen.

Kyllä ejemplo Puhumme ihmisen kuultavasta spektristä, joka vaihtelee 20 Hz: stä 20 Khz: iin, suodattimilla, jotka voit poistaa alimman tai korkeimman, jotta vain enemmän tai vähemmän diskantti / basso-ääniä voidaan siirtää. Se on jotain, jota monet äänen tallennus- tai toistojärjestelmät käyttävät, kuten mikrofonit, kaiuttimet jne.

Tyypit

Mukaan suodattimen tyyppitai pikemminkin riippuen estämästään taajuudesta tai päästämästään, on olemassa erityyppisiä piirejä, jotka ovat:

  • Alipäästösuodatin: Niitä kutsutaan, koska ne ovat suodattimia, jotka päästävät matalammat taajuudet läpi ja tukahduttavat tai vähentävät korkeampien taajuuksien kulkua. Ne koostuvat yhdestä tai useammasta kelasta (sarjaan virtalähteen ja kuorman kanssa) ja yhdestä tai kahdesta shunttikondensaattorista, joissa on virtalähde ja kuorma. Muista, että kuormalla tarkoitetaan suodattimeen liitettyä laitetta, joka kerää suodattimen ulostulon ... Näissä suodattimissa on myös muunnelmia, kuten L, T ja π.
  • Ylipäästösuodatin: ylipäästösuodatin on päinvastoin kuin alipäästö, tässä tapauksessa suodattaa tai rajoittaa matalataajuinen päästö, jolloin korkeammat taajuudet kulkevat. Tähän sijoitetaan sen muodostavat elektroniset elementit. Toisin sanoen kondensaattorit ovat sarjassa virtalähteen ja kuorman kanssa, kun taas kelat vaihdetaan. On myös samoja alatyyppejä kuin alipäästösuodattimien tapauksessa.
  • Kaistanpäästösuodatin: Tämän tyyppinen suodatin käyttää kahta taajuuskaistan siirtonopeuslohkoa. Toisin sanoen ne toimivat sekä alipäästösuodattimena että ylipäästösuodattimena, vastustavat samalla matalimpien ja myös korkeimpien taajuuksien kulkua. Toisin sanoen se antaa vain keskitaajuuksien kulkea.
  • Band-suodatin: se on täsmälleen päinvastainen edelliselle, mitä se tekee, on se, että se suodattaa keskitaajuuksien kulun ja päästää läpi vain alimmat ja korkeimmat taajuudet.

Muista se induktanssit he päästävät matalien taajuuksien läpi ja vastustavat korkeiden taajuuksien kulkua. Sen sijaan, kondensaattorit he päästävät läpi korkeita taajuuksia ja vastustavat matalien taajuuksien kulkua.

Haluaisin lisätä, että suodattimet käytännön tasolla ne eivät ole täydellisiä, ja he voivat aina päästää läpi matalia tai korkeita taajuuksia, jotka sinun pitäisi estää. He tekevät kuitenkin työnsä melko hyvin useimmissa sovelluksissa.

Ja lopuksi haluaisin myös selventää toista asiaa, nimittäin sitä, että olet varmasti kuullut EMA- ja DEMA-suodattimet. EMA (Exponential Moving Average) -suodattimet mahdollistavat tämän tyyppisen suodattimen yksinkertaisen toteutuksen upotetuissa laitteissa. Mitä tulee DEMA: han (kaksinkertainen eksponentiaalinen liukuva keskiarvo), niillä on nopeampi vaste kuin EMA: lla, mikä estää hyvän melutason, jonka haluat välttää.

Alfa-tekijä

El alfa-tekijä, jonka näet seuraavan osan Arduino IDE -koodeissa, on parametri, joka määrittää eksponentiaalisen suodattimen käyttäytymisen. Se liittyy rajataajuuteen:

  • Alpha = 1: joka antaa signaalin suodattamattomalle lähdölle.
  • Alpha = 0: suodatinarvo on aina 0.
  • Alpha = x: muut arvot voivat saada muita muutoksia EMA-suodattimeen. Jos pienennät alfa-kerrointa, pehmennät enemmän saatua taajuussignaalia, ja myös järjestelmän vasteaika kasvaa (vakautuminen kestää kauemmin).

Suodattimet ja Arduino

Arduino I2C -väylä

Näiden suodattimien käyttäminen kirjaston käyttäminen Arduino IDE: lle helpottaa työtäsi. Voit käyttää Tämä sama.

Sinun pitäisi tietää, että virtapiiriä ei tarvitse luoda ylipäästösuodatin tai alipäästösuodatin liittää se Arduino-korttiisi ja työskennellä sen kanssa. Vaikka voit kokeilla ja luoda tällaisia ​​yksinkertaisia ​​suodattimia, voit myös testata, kuinka EMA toimisi vain Arduino-kortin ja yksinkertaisen koodin kanssa Arduino IDE: lle. Se on ainoa asia, jonka täytyy nähdä, miten se vastaa joidenkin taajuuksien suodattamisesta (tässä tapauksessa toiminta simuloidaan ja jotkut kokonaisluvut / kelluvat suodatetaan yksinkertaisesti simuloimalla mitä tekisin suodatin).

Tässä on joitain koodinäytteitä, joita voit käyttää harjoitteluun.

Esimerkki yksinkertaisesta digitaalisuodattimesta Arduinossa alipäästö:

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

Koodiesimerkki Arduino-tyypille Ylipäästö:

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-koodiesimerkki bändin 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);                              
}

Arduino-koodiesimerkki bändille:

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

Muista, että ADC on Arduino Analog Digital -muunnin. Käytä aluetta 0-5v ja jakamalla alueet 0-1023. Jos arvo on 0v, otetaan digitaalinen arvo 0, ja jos se on 5v, signaalin arvoksi otetaan 1023, 1v voi olla 204m, 2v olisi 408 jne.

Kehotan sinua muokkaamaan näitä koodeja ja kokeilemaan niitä. Tulos voit katso hyvin graafisesti kiitos Arduino IDE -sarjan piirturin ... Muista, että jos sinulla on kysyttävää Arduino-ohjelmoinnista tai IDE: n käytöstä, voit ladata ilmainen HwLibre-kurssi PDF-muodossa.


Ole ensimmäinen kommentti

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.