Nízkoprůchodový filtr: vše, co potřebujete o tomto okruhu vědět

obvod nízkoprůchodového filtru

Cívky a operační zesilovače vám umožňují vytvářet velmi zajímavé obvody, například slavné frekvenční filtry. Tyto filtry mají mnoho aplikací v elektronickém průmyslu. Stejně jako v případě nízkofrekvenčního filtru, horního filtru atd. Jsou zvláště zajímavé pro určité zvukové aplikace, protože jsou schopny filtrovat zvuky nebo více či méně závažné zvuky podle jejich frekvence. Proto jsou velmi užitečné.

Pokud se chcete dozvědět více o dolní propusta další filtry a jak vám mohou pomoci ve vašich projektech s Arduino nebo DIY, doporučuji vám pokračovat ve čtení ...

Elektrické filtry

Jak název napovídá, filtr je obvod, který se skládá z řady cívek a kondenzátorů a dokonce i některých operačních zesilovačů za účelem nechat projít pouze určité části frekvence. To znamená, že z celého spektra dostupných frekvencí budou filtrovat jednu nebo více částí, aby jim zabránily v průchodu.

Ano pro ejemplo Mluvíme o spektru slyšitelném lidskou bytostí, které se pohybuje od 20 Hz do 20 Khz, s filtry, které dokáží eliminovat nejnižší nebo nejvyšší, aby bylo možné propustit pouze více či méně výšek / basů. Je to něco, co používá mnoho systémů pro záznam nebo reprodukci zvuku, jako jsou mikrofony, reproduktory atd.

Typ

Podle typ filtru, nebo spíše v závislosti na frekvenci, kterou blokují, nebo na tom, kterou propustí, existují různé typy obvodů, které jsou:

  • Nízkoprůchodový filtr: Nazývají se tak proto, že jsou to filtry, které umožňují průchod nižších frekvencí a potlačují nebo snižují průchod vyšších frekvencí. Skládají se z jedné nebo více cívek (v sérii s napájecím zdrojem a zátěží) a jednoho nebo dvou bočních kondenzátorů s napájecím zdrojem a zátěží. Nezapomeňte, že zátěží se rozumí zařízení připojené k filtru, které shromažďuje výstup filtru ... V rámci těchto filtrů existují také varianty, jako L, T a π.
  • High pass filtr: horní propust je protikladem dolní propusti, v tomto případě to, co bude filtrovat nebo omezovat, je nízkofrekvenční průchod, který umožňuje průchod vyšších frekvencí. Do toho jsou investovány elektronické prvky, které ji tvoří. To znamená, že zde budou kondenzátory v sérii s napájením a zátěží, zatímco cívky budou posunuty. Existují také stejné podtypy jako v případě nízkoprůchodových filtrů.
  • Pásmový filtr: Tento typ filtru vykonává dva bloky frekvenční pásmové propustnosti. To znamená, že fungují jak jako nízkoprůchodový filtr, tak i jako vysokoprůchodový filtr, přičemž brání průchodu nejnižších frekvencí a zároveň nejvyššího. Jinými slovy umožňuje pouze průchod středních frekvencí.
  • Pásový filtr: Je to pravý opak toho předchozího, to, co dělá, je to, že filtruje středofrekvenční průchod a propouští pouze nejnižší a nejvyšší frekvence.

Nezapomeňte, že indukčnosti propouštějí nízké frekvence a staví se proti průchodu vysokých frekvencí. Namísto, kondenzátory propouštějí vysoké frekvence a staví se proti průchodu nízkých frekvencí.

Rád bych dodal, že filtry na praktické úrovni nejsou dokonalía vždy mohou propustit některé nízké nebo vysoké frekvence, které byste měli blokovat. U většiny aplikací však svou práci dělají docela dobře.

A nakonec bych také rád vyjasnil další věc, a to, že jste o tom už jistě slyšeli Filtry EMA a DEMA. Filtry EMA (Exponential Moving Average) umožňují implementovat tento typ filtrů jednoduchým způsobem ve vestavěných zařízeních. Pokud jde o DEMA (Double Exponential Moving Average), mají rychlejší odezvu než EMA a udržují dobré potlačení šumu, kterému se chcete vyhnout.

Alfa faktor

El alfa faktor, který uvidíte v IDE kódech Arduino v další části, je parametr, který určuje chování exponenciálního filtru. Souvisí to s mezní frekvencí:

  • Alfa = 1: poskytuje signál nefiltrovanému výstupu.
  • Alfa = 0: hodnota filtru bude vždy 0.
  • Alfa = x: jiné hodnoty mohou získat další změny ve filtru EMA. Pokud snížíte alfa faktor, změkčíte získaný frekvenční signál více a také se zvýší doba odezvy systému (stabilizace trvá déle).

Filtry a Arduino

Sběrnice Arduino I2C

Při použití těchto filtrů vám práce s knihovnou pro Arduino IDE výrazně usnadní práci. Můžeš použít tohle samé.

Měli byste vědět, že není nutné vytvářet obvod horní propust nebo dolní propust připojit k desce Arduino a pracovat s ní. I když můžete experimentovat a vytvářet tyto druhy jednoduchých filtrů, můžete také vyzkoušet, jak by EMA fungovala, pouze s deskou Arduino a jednoduchým kódem pro Arduino IDE. Je to jediná věc, kterou musíte vidět, jak má na starosti filtrování některých frekvencí (v tomto případě je akce simulována a některá celá čísla / plováky jsou jednoduše filtrována simulace toho, co bych dělal ve skutečnosti filtrovat).

Zde je několik ukázek kódu, které můžete použít k procvičení.

Příklad jednoduchého digitálního filtru typu Arduino dolní propust:

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

Příklad kódu pro typ Arduino 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
}

Příklad kódu Arduino pásmový průchod:

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

Příklad kódu Arduino pro kapelu:

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

Pamatujte, že ADC je analogový digitální převodník Arduino. Použijte rozsah 0-5v s rozdělením na rozsahy 0-1023. Pokud je hodnota 0v, je brána digitální hodnota 0, a pokud je 5v, bude jako hodnota signálu bráno 1023, 1v může být 204m, 2v bude 408 atd.

Doporučuji vám tyto kódy upravit a experimentovat. Výsledek můžete vidět velmi graficky díky sériovému plotru Arduino IDE ... Nezapomeňte, že pokud máte dotazy ohledně programování Arduino nebo jak používat IDE, můžete si stáhnout bezplatný kurz HwLibre v PDF.


Buďte první komentář

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.