Zemfrekvences filtrs: viss, kas jums jāzina par šo ķēdi

zemfrekvences filtru ķēde

Spoles un op amperi ļauj jums izveidot ļoti interesantas shēmas, piemēram, slavenās frekvences filtri. Šiem filtriem ir daudz pielietojumu elektronikas nozarē. Tāpat kā zemfrekvences filtra, augstfrekvences filtra utt. Tie ir īpaši interesanti dažām skaņas lietojumprogrammām, kas spēj filtrēt trokšņus vai vairāk vai mazāk nopietnas skaņas atbilstoši to biežumam. Tāpēc tie ir ļoti noderīgi.

Ja vēlaties uzzināt vairāk par zemfrekvences filtrs, un citi filtri, un kā tie var jums palīdzēt jūsu projektos ar Arduino vai DIY, es iesaku turpināt lasīt ...

Elektriskie filtri

Kā norāda tā nosaukums, filtrs ir ķēde, kuru veido virkne ruļļu un kondensatoru, un pat daži darbības pastiprinātāji, lai ļaujot iziet tikai noteiktām frekvences daļām. Tas ir, no visa pieejamo frekvenču spektra, tie filtrēs vienu vai vairākas daļas, lai neļautu tām iziet cauri.

Ja par ejemplo Mēs runājam par cilvēka dzirdamo spektru, kas svārstās no 20 Hz līdz 20 Khz, ar filtriem, kurus jūs varētu novērst zemākos vai augstākos, lai ļautu iziet tikai vairāk vai mazāk augsto / zemo frekvenču skaņām. Tas ir kaut kas, ko izmanto daudzas audio ierakstīšanas vai reproducēšanas sistēmas, piemēram, mikrofoni, skaļruņi utt.

Veidi

Atbilstoši filtra tips, Pareizāk sakot, atkarībā no to bloķēšanas biežuma vai caurlaides, ir dažādi ķēžu veidi, kas ir:

  • Zemfrekvences filtrs: tos sauc par to, ka tie ir tie filtri, kas ļauj iziet zemākajām frekvencēm un nomāc vai samazina augstāko frekvenču pāreju. Tie sastāv no vienas vai vairākām spolēm (virknē ar barošanas avotu un slodzi) un no viena vai diviem šunta kondensatoriem ar barošanas avotu un slodzi. Atcerieties, ka par slodzi saprot ierīci, kas savienota ar filtru un kas savāc filtra izvadi. Šajos filtros ir arī varianti, piemēram, L, T un π.
  • Augstas caurlaidības filtrs: augstfrekvences filtrs ir pretējs zemfrekvences signālam, šajā gadījumā tas, ko tas filtrēs vai ierobežos, ir zemfrekvences pāreja, ļaujot pāriet augstākām frekvencēm. Tajā tiek ieguldīti elektroniskie elementi, kas to veido. Tas ir, šeit kondensatori būs tie, kas atrodas virknē ar strāvas padevi un slodzi, savukārt spoles tiks manevrētas. Ir arī tādi paši apakštipi kā zemfrekvences filtru gadījumā.
  • Joslu caurlaides filtrs: Šāda veida filtri nodrošina divas frekvenču joslas caurlaides ātruma bloķēšanas. Tas ir, tie darbojas gan kā zemas caurlaidības filtrs, gan kā augstfrekvences filtrs, vienlaikus pretojoties zemāko frekvenču un arī augstāko frekvenču pārejai. Citiem vārdiem sakot, tas ļauj iziet cauri tikai vidējām frekvencēm.
  • Joslu filtrs: tas ir tieši pretējs iepriekšējam, tas, ka tas filtrē vidējo frekvenču pāreju un izlaiž tikai zemākās un augstākās frekvences.

Atcerieties, ka induktivitātes viņi izlaiž zemas frekvences un iebilst pret augsto frekvenču pāreju. Tā vietā kondensatori viņi izlaiž augstas frekvences un iebilst pret zemu frekvenču pāreju.

Es gribētu piebilst, ka filtri praktiskā līmenī tie nav ideāli, un viņi vienmēr var izlaist dažas zemas vai augstas frekvences, kuras jums vajadzētu bloķēt. Tomēr viņi diezgan labi veic savu darbu lielākajā daļā lietojumu.

Un, visbeidzot, es vēlētos arī precizēt citu lietu, tas ir, ka jūs noteikti esat dzirdējuši par EMA un DEMA filtri. EMA (eksponenciālā slīdošā vidējā) filtri ļauj jums vienkārši ievietot šāda veida filtrus iegultās ierīcēs. Kas attiecas uz DEMA (Double Exponential Moving Average), tiem ir ātrāka reakcija nekā EMA, saglabājot labu trokšņa slāpēšanu, no kura vēlaties izvairīties.

Alfa faktors

El alfa faktors, kuru redzēsiet nākamās sadaļas Arduino IDE kodos, ir parametrs, kas nosaka eksponenciālā filtra darbību. Tas ir saistīts ar sliekšņa biežumu:

  • Alfa = 1: kas nodrošina signālu nefiltrētai izejai.
  • Alfa = 0: filtra vērtība vienmēr būs 0.
  • Alfa = x: citas vērtības var iegūt citas izmaiņas EMA filtrā. Samazinot alfa koeficientu, jūs mīkstināsiet vairāk iegūto frekvences signālu, un palielināsies arī sistēmas reakcijas laiks (stabilizācijai nepieciešams ilgāks laiks).

Filtri un Arduino

Arduino I2C autobuss

Šo filtru izmantošanai Arduino IDE bibliotēkas izmantošana ievērojami atvieglos jūsu darbu. Tu vari izmantot tas pats.

Jums vajadzētu zināt, ka nav nepieciešams izveidot ķēdi augstfrekvences vai zemfrekvences filtrs lai to savienotu ar Arduino dēli un strādātu ar to. Lai gan jūs varat eksperimentēt un izveidot šāda veida vienkāršus filtrus, varat arī pārbaudīt, kā EMA darbotos tikai ar Arduino dēli un vienkāršu kodu Arduino IDE. Tas ir vienīgais, kas jums nepieciešams, lai redzētu, kā tas atbild par dažu frekvenču filtrēšanu (šajā gadījumā darbība tiek simulēta un daži veseli skaitļi / pludiņi tiek vienkārši filtrēti simulējot to, ko es darītu filtru faktiski).

Šeit ir daži kodu paraugi, kurus varat izmantot, lai praktizētu.

Vienkārša digitālā filtra piemērs Arduino tipa mazas caurlaidības:

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 tipa koda piemērs Augsta piespēle:

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 koda piemērs grupas caurlaide:

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 koda piemērs grupai:

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

Atcerieties, ka ADC ir Arduino Analog Digital pārveidotājs. Izmantojiet diapazonu 0-5v, dalot diapazonos 0-1023. Ja vērtība ir 0v, tiek ņemta digitālā vērtība 0, un, ja tā ir 5v, par signāla vērtību tiks ņemts 1023, 1v var būt 204m, 2v būtu 408 utt.

Es iesaku jums pārveidot un eksperimentēt ar šiem kodiem. Rezultāts jūs varat redzēt ļoti grafiski pateicoties Arduino IDE seriālajam ploterim ... Atcerieties, ka, ja jums ir jautājumi par Arduino programmēšanu vai kā izmantot IDE, varat lejupielādēt bezmaksas HwLibre kurss PDF formātā.


Esi pirmais, kas komentārus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.