Фільтр нізкіх частот: усё, што вам трэба ведаць пра гэтую схему

ланцуг фільтра нізкіх частот

Шпулькі і аперацыйныя ўзмацняльнікі дазваляюць ствараць вельмі цікавыя схемы, такія як знакамітыя частотныя фільтры. Гэтыя фільтры маюць мноства прыкладанняў у электроннай прамысловасці. Як і ў выпадку з фільтрам нізкіх частот, фільтрам высокіх частот і г.д. Яны асабліва цікавыя для пэўных гукавых праграм, паколькі могуць фільтраваць шумы альбо больш-менш сур'ёзныя гукі ў залежнасці ад іх частаты. Таму яны вельмі карысныя.

Калі вы хочаце даведацца больш пра фільтр нізкіх частот, і іншыя фільтры, і як яны могуць дапамагчы вам у вашых праектах з Arduino ці DIY, я заклікаю вас працягваць чытаць ...

Электрычныя фільтры

Як вынікае з яго назвы, фільтр - гэта схема, якая складаецца з шэрагу шпулек і кандэнсатараў і нават некаторых аперацыйных узмацняльнікаў для мэт прапускаючы толькі пэўныя часткі частоты. Гэта значыць, з усяго спектру даступных частот яны будуць фільтраваць адну ці некалькі частак, каб прадухіліць іх праходжанне.

Калі для EJEMPLO Мы гаворым пра спектр, чутны чалавеку, які пераходзіць ад 20 Гц да 20 Гц, з фільтрамі, якія вы можаце ліквідаваць самы нізкі альбо самы высокі, каб толькі прапускаць больш-менш высокія / высокія частоты. Гэта тое, што выкарыстоўваюць многія сістэмы запісу альбо прайгравання аўдыя, такія як мікрафоны, калонкі і г.д.

Тыпы

Па тып фільтра, дакладней, у залежнасці ад частаты, якую яны блакуюць, або ад той, якую яны прапускаюць, існуюць розныя тыпы схем, якія:

  • Фільтр нізкіх частот: Іх так называюць, таму што яны з'яўляюцца тымі фільтрамі, якія дазваляюць ніжнім частотам прапускаць і душаць альбо памяншаюць праходжанне больш высокіх частот. Яны складаюцца з адной або некалькіх шпулек (паслядоўна з крыніцай харчавання і нагрузкай) і аднаго ці двух шунтавальных кандэнсатараў з крыніцай харчавання і нагрузкай. Памятаеце, што пад нагрузкай разумеецца прылада, падлучанае да фільтра, і якое збірае выхад фільтра ... Унутры гэтых фільтраў ёсць таксама варыянты, такія як L, T і π.
  • Фільтр высокіх частот: фільтр высокіх частот з'яўляецца супрацьлегласцю нізкаму, у гэтым выпадку фільтр альбо абмежаванне - гэта нізкачашчынны праход, дазваляючы прайсці больш высокім частотам. У гэта ўкладваюцца электронныя элементы, якія яго складаюць. Гэта значыць, тут кандэнсатары будуць тымі, якія знаходзяцца паслядоўна з крыніцай харчавання і нагрузкай, а шпулькі будуць шунтавацца. Ёсць таксама тыя ж падтыпы, што і ў выпадку з фільтрамі нізкіх частот.
  • Дыяпазоўны фільтр: Гэты тып фільтра выкарыстоўвае два блокі частоты прапускання ў дыяпазоне частот. Гэта значыць, яны дзейнічаюць і як фільтр нізкіх частот, і як фільтр высокіх частот, супрацьстаўляючы праходжанне самых нізкіх частот і адначасова самых высокіх. Іншымі словамі, гэта дазваляе праходзіць толькі сярэднім частотам.
  • Істужачны фільтр: Гэта якраз наадварот папярэдняму, але ён фільтруе праход сярэдняй частоты і прапускае толькі самыя нізкія і высокія частоты.

Памятаеце, што індуктыўнасці яны прапускаюць нізкія частоты і выступаюць супраць праходжання высокіх частот. Замест гэтага кандэнсатары яны прапускаюць высокія частоты і выступаюць супраць праходжання нізкіх частот.

Я хацеў бы дадаць, што фільтры на практычным узроўні яны не ідэальныя, і яны заўсёды могуць прапусціць некаторыя нізкія ці высокія частоты, якія вы павінны блакаваць. Аднак яны робяць сваю працу даволі добра для большасці прыкладанняў.

І, нарэшце, я хацеў бы таксама ўдакладніць яшчэ адно, і гэта тое, што вы напэўна чулі пра Фільтры EMA і DEMA. Фільтры EMA (экспаненцыяльная слізгальная сярэдняя) дазваляюць рэалізаваць гэты тып фільтраў простым спосабам ва ўбудаваных прыладах. Што тычыцца DEMA (падвойная экспаненцыяльная слізгальная сярэдняя), яны маюць больш хуткі водгук, чым EMA, падтрымліваючы добрае падаўленне шуму, якога вы хочаце пазбегнуць.

Альфа-фактар

El альфа-фактар, які вы ўбачыце ў наступным раздзеле ў кодах IDE Arduino, - гэта параметр, які вызначае паводзіны экспанентнага фільтра. Гэта звязана з частатой адсячэння:

  • Альфа = 1: які падае сігнал на нефільтраваны выхад.
  • Альфа = 0: значэнне фільтра заўсёды будзе 0.
  • Альфа = x: іншыя значэнні могуць атрымаць іншыя змены ў фільтры EMA. Калі вы паменшыце каэфіцыент альфа, вы больш змякчыце атрыманы частотны сігнал, і час водгуку сістэмы таксама павялічыцца (для стабілізацыі патрабуецца больш часу).

Фільтры і Arduino

Аўтобус Arduino I2C

Для выкарыстання гэтых фільтраў выкарыстанне бібліятэкі для IDE Arduino значна палегчыць вашу працу. Вы можаце выкарыстоўваць гэта самае.

Вы павінны ведаць, што не абавязкова ствараць ланцуг фільтр высокіх частот або фільтр нізкіх частот падключыць яго да платы Arduino і працаваць з ёй. Хоць вы можаце эксперыментаваць і ствараць падобныя простыя фільтры, вы таксама можаце праверыць, як EMA будзе працаваць толькі з платай Arduino і простым кодам IDE Arduino. Гэта адзінае, што вам трэба ўбачыць, як ён адказвае за фільтрацыю некаторых частот (у гэтым выпадку дзеянне мадэлюецца, а некаторыя цэлыя лікі / плавалыя проста фільтруюцца мадэлюючы, што б я зрабіў фільтр на самай справе).

Вось некаторыя ўзоры кода, якія вы можаце выкарыстоўваць на практыцы.

Прыклад простага лічбавага фільтра ў тыпе Arduino нізкі праход:

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 Высокі пас:

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 групавы пропуск:

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 для групы:

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

Памятаеце, што ADC - гэта аналагавы лічбавы пераўтваральнік Arduino. Выкарыстоўвайце дыяпазон 0-5v, дзелячыся на дыяпазоны 0-1023. Калі значэнне 0v, прымаецца лічбавае значэнне 0, а калі яно 5v, 1023 будзе прымацца як значэнне сігналу, 1v можа быць 204m, 2v будзе 408 і г.д.

Я раю вам змяніць і паэксперыментаваць з гэтымі кодамі. Вынік вы можаце бачыць вельмі графічна дзякуючы серыйнаму плотэру IDE Arduino ... Памятаеце, што калі ў вас ёсць пытанні па праграмаванні Arduino ці як карыстацца IDE, вы можаце загрузіць бясплатны курс HwLibre у PDF.


Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

Будзьце першым, каб каментаваць

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.