فیلتر کم عبور: هر آنچه در مورد این مدار باید بدانید

مدار فیلتر پایین گذر

کویل ها و آمپ های عملیاتی به شما امکان می دهد مدارهای بسیار جالب مانند معروف را ایجاد کنید فیلترهای فرکانس. این فیلترها کاربردهای زیادی در صنعت الکترونیک دارند. همانطور که در مورد فیلتر پایین گذر ، فیلتر عبور زیاد و غیره وجود دارد. خصوصاً برای برخی از کاربردهای صوتی ، امکان فیلتر کردن صداها یا اصوات کم و بیش جدی با توجه به فرکانس آنها بسیار جالب است. بنابراین ، آنها بسیار مفید هستند.

اگر می خواهید اطلاعات بیشتری کسب کنید فیلتر پایین گذر، و سایر فیلترها و اینکه چگونه می توانند در پروژه های شما با Arduino یا DIY به شما کمک کنند ، شما را به ادامه مطالعه تشویق می کنم ...

فیلترهای برقی

همانطور که از نام آن پیداست ، فیلتر مداراتی است که از مجموعه سیم پیچ ها و خازن ها و حتی برخی تقویت کننده های عملیاتی به منظور اجازه می دهد فقط قسمتهای خاصی از یک فرکانس عبور کند. یعنی از کل طیف فرکانسهای موجود ، آنها یک یا چند قسمت را فیلتر می کنند تا از عبور آنها جلوگیری کند.

اگر برای ejemplo ما در مورد طیف قابل شنیدن توسط انسان صحبت می کنیم ، که از 20 هرتز به 20 کیلو هرتز می رسد ، با فیلترهایی که می توانید کمترین یا بالاترین را از بین ببرید تا فقط صدای تربل / باس کم و بیش عبور کند. این چیزی است که بسیاری از سیستم های ضبط یا تولید مثل صدا مانند میکروفن ، بلندگو و غیره از آن استفاده می کنند.

انواع

مطابق نوع فیلتر، یا بهتر بگوییم ، بسته به فرکانس مسدود شده یا دمایی که از آن عبور می کنند ، انواع مختلفی از مدارها وجود دارد:

  • فیلتر پایین گذر: آنها اصطلاحاً نامیده می شوند زیرا فیلترهایی هستند که اجازه می دهند کمترین فرکانس ها عبور کرده و عبور فرکانسهای بالاتر را سرکوب یا کاهش دهند. آنها از یک یا چند سیم پیچ (به صورت سری با منبع تغذیه و بار) و یک یا دو خازن شنت با منبع تغذیه و بار تشکیل شده اند. به یاد داشته باشید که بار این است که دستگاه متصل به فیلتر است و خروجی فیلتر را جمع می کند ... در این فیلترها انواع مختلفی مانند L ، T و π.
  • فیلتر عبور بالا: فیلتر عبور زیاد مخالف پایین گذر است ، در این حالت ، چیزی که فیلتر می کند یا محدود می کند عبور فرکانس پایین است ، که باعث می شود فرکانس های بالاتر عبور کنند. در این قسمت عناصر الکترونیکی سازنده آن سرمایه گذاری می شوند. یعنی در اینجا خازن ها از نظر سری و منبع تغذیه و بار سری هستند ، در حالی که سیم پیچ ها از بین می روند. در مورد فیلترهای کم گذر نیز انواع فرعی وجود دارد.
  • فیلتر میان گذر: این نوع فیلتر دو بلوک سرعت عبور باند باند را اعمال می کند. یعنی هم به عنوان یک فیلتر کم عبور و هم به عنوان یک فیلتر با عبور زیاد عمل می کنند ، در مقابل عبور پایین ترین فرکانس ها و همچنین بالاترین همزمان هستند. به عبارت دیگر ، فقط به فرکانس های میانی اجازه عبور می دهد.
  • فیلتر باند: این دقیقاً برعکس مورد قبلی است ، آنچه انجام می دهد این است که عبور فرکانس های میانی را فیلتر می کند و فقط پایین ترین و بالاترین فرکانس ها را عبور می دهد.

به یاد داشته باشید که استقرا آنها از طریق فرکانس های پایین عبور می کنند و با عبور فرکانس های بالا مخالفت می کنند. بجای، خازن ها آنها از طریق فرکانس های بالا عبور می کنند و با عبور فرکانس های پایین مخالفت می کنند.

می خواهم فیلترها را در سطح عملی اضافه کنم آنها کامل نیستند، و آنها همیشه می توانند از طریق برخی از فرکانسهای کم یا زیاد که باید آنها را مسدود کنید ، عبور کنند. با این حال ، آنها وظیفه خود را برای اکثر برنامه ها کاملاً خوب انجام می دهند.

و در آخر ، من می خواهم نکته دیگری را نیز روشن کنم ، و آن این است که شما مطمئناً در مورد آن شنیده اید فیلترهای EMA و DEMA. فیلترهای EMA (Exponential Moving Average) به شما امکان می دهد این نوع فیلترها را به روشی ساده در دستگاه های تعبیه شده پیاده سازی کنید. در مورد DEMA (Double Exponential Moving Average) ، آنها پاسخ سریعتری نسبت به EMA دارند و سرکوب نویز را که می خواهید از آن جلوگیری کنید ، حفظ می کنند.

فاکتور آلفا

El فاکتور آلفا، که در قسمت بعدی در کدهای Arduino IDE مشاهده خواهید کرد ، پارامتری است که رفتار فیلتر نمایی را شرطی می کند. این مربوط به فرکانس قطع است:

  • Alpha = 1: سیگنالی را به خروجی فیلتر نشده ارائه می دهد.
  • آلفا = 0: مقدار فیلتر همیشه 0 خواهد بود.
  • Alpha = x: مقادیر دیگر می توانند تغییرات دیگری را در فیلتر EMA بدست آورند. اگر ضریب آلفا را کاهش دهید ، سیگنال فرکانس به دست آمده را بیشتر نرم می کنید و زمان پاسخگویی سیستم نیز افزایش می یابد (تثبیت آن بیشتر طول می کشد).

فیلترها و آردوینو

اتوبوس آردوینو I2C

برای استفاده از این فیلترها ، استفاده از کتابخانه برای Arduino IDE کار شما را بسیار آسان می کند. شما می توانید استفاده کنید این همان.

باید بدانید که ایجاد مدار ضروری نیست فیلتر عبور بالا یا فیلتر پایین گذر تا آن را به برد آردوینو متصل کرده و با آن کار کنید. اگرچه می توانید این نوع فیلترهای ساده را آزمایش کرده و ایجاد کنید ، اما می توانید نحوه عملکرد EMA را فقط با برد آردوینو و یک کد ساده برای Arduino IDE آزمایش کنید. این تنها چیزی است که شما باید ببینید چگونه فیلتر برخی از فرکانس ها را انجام می دهد (در این حالت عمل شبیه سازی می شود و برخی از اعداد صحیح / شناور به سادگی فیلتر می شوند) شبیه سازی کاری که می خواهم انجام دهم در واقع فیلتر کنید).

در اینجا چند نمونه کد وجود دارد که می توانید برای تمرین استفاده کنید.

نمونه فیلتر دیجیتال ساده در آردوینو از نوع پایین گذار:

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

مثال کد برای نوع آردوینو پاس بالا:

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
}

مثال کد آردوینو پاس باند:

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

مثال کد آردوینو برای گروه:

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 و غیره باشد.

من به شما توصیه می کنم این کدها را اصلاح و آزمایش کنید. نتیجه ای که می توانید خیلی گرافیکی ببینید با تشکر از پلاتر سریال Arduino IDE… بخاطر داشته باشید که اگر در مورد برنامه نویسی آردوینو یا نحوه استفاده از IDE س questionsالی دارید ، می توانید دوره رایگان HwLibre به صورت PDF.


محتوای مقاله به اصول ما پیوست اخلاق تحریریه. برای گزارش یک خطا کلیک کنید اینجا.

اولین کسی باشید که نظر

نظر خود را بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند با *

*

*

  1. مسئول داده ها: میگل آنخل گاتون
  2. هدف از داده ها: کنترل هرزنامه ، مدیریت نظرات.
  3. مشروعیت: رضایت شما
  4. ارتباط داده ها: داده ها به اشخاص ثالث منتقل نمی شوند مگر با تعهد قانونی.
  5. ذخیره سازی داده ها: پایگاه داده به میزبانی شبکه های Occentus (EU)
  6. حقوق: در هر زمان می توانید اطلاعات خود را محدود ، بازیابی و حذف کنید.