Bộ lọc thông thấp: mọi thứ bạn cần biết về mạch này

mạch lọc thông thấp

Coils và op amps cho phép bạn tạo ra các mạch rất thú vị, chẳng hạn như bộ lọc tần số. Các bộ lọc này có vô số ứng dụng trong ngành công nghiệp điện tử. Như trường hợp của bộ lọc thông thấp, bộ lọc thông cao, v.v. Chúng đặc biệt thú vị đối với một số ứng dụng âm thanh nhất định, có thể lọc tiếng ồn, hoặc âm thanh ít hoặc nhiều hơn theo tần số của chúng. Do đó, chúng rất hữu ích.

Nếu bạn muốn biết thêm về bộ lọc thông thấpvà các bộ lọc khác cũng như cách chúng có thể giúp bạn trong các dự án của bạn với Arduino hoặc DIY, tôi khuyến khích bạn tiếp tục đọc ...

Bộ lọc điện

Như tên gọi của nó, bộ lọc là một mạch được tạo thành từ một loạt các cuộn dây và tụ điện, và thậm chí một số bộ khuếch đại hoạt động, nhằm mục đích chỉ cho phép một số phần nhất định của tần số đi qua. Có nghĩa là, trong toàn bộ phổ tần số có sẵn, chúng sẽ lọc một hoặc nhiều phần để ngăn chúng đi qua.

Có cho ejemplo Chúng ta đang nói về phổ mà con người có thể nghe được, từ 20 Hz đến 20 Khz, với các bộ lọc, bạn có thể loại bỏ mức thấp nhất hoặc cao nhất, để chỉ cho phép âm treble / bass đi qua nhiều hơn hoặc ít hơn. Nó là thứ mà nhiều hệ thống ghi hoặc tái tạo âm thanh sử dụng, chẳng hạn như micrô, loa, v.v.

Loại

Theo tuýt lọc, hay đúng hơn, tùy thuộc vào tần số mà chúng chặn hoặc tần số chúng cho qua, có các loại mạch khác nhau:

  • Bộ lọc thông thấp: chúng được gọi như vậy bởi vì chúng là những bộ lọc cho phép các tần số thấp nhất đi qua và triệt tiêu hoặc giảm bớt sự vượt qua của các tần số cao hơn. Chúng bao gồm một hoặc nhiều cuộn dây (mắc nối tiếp với nguồn điện và tải), và một hoặc hai tụ điện shunt với nguồn điện và tải. Hãy nhớ rằng tải được hiểu là thiết bị được kết nối với bộ lọc và thu thập đầu ra của bộ lọc ... Trong các bộ lọc này cũng có các biến thể, chẳng hạn như L, T và π.
  • Bộ lọc thông cao: bộ lọc thông cao ngược lại với thông thấp, trong trường hợp này, những gì nó sẽ lọc hoặc giới hạn là thông tần thấp, cho các tần số cao hơn đi qua. Trong đó, các yếu tố điện tử tạo nên nó được đầu tư. Có nghĩa là, ở đây các tụ điện sẽ là những cái mắc nối tiếp với nguồn điện và tải, trong khi các cuộn dây sẽ được đóng lại. Ngoài ra còn có các kiểu con tương tự như trong trường hợp bộ lọc thông thấp.
  • Bộ lọc băng thông: Loại bộ lọc này sử dụng hai khối tỷ lệ vượt qua dải tần số. Có nghĩa là, chúng hoạt động như một bộ lọc thông thấp và bộ lọc thông cao, chống lại việc đi qua các tần số thấp nhất và cũng là cao nhất cùng một lúc. Nói cách khác, nó chỉ cho phép các tần số trung bình đi qua.
  • Bộ lọc dải: nó hoàn toàn ngược lại với cái trước, những gì nó làm được là nó lọc các tần số trung bình và chỉ cho phép thông qua các tần số thấp nhất và cao nhất.

Hãy nhớ rằng điện cảm chúng cho qua các tần số thấp và chống lại việc đi qua các tần số cao. Thay thế, tụ điện chúng cho qua các tần số cao và chống lại việc đi qua các tần số thấp.

Tôi muốn thêm các bộ lọc đó ở mức độ thực tế họ không hoàn hảovà chúng luôn có thể vượt qua một số tần số thấp hoặc cao mà bạn nên chặn. Tuy nhiên, họ thực hiện công việc của mình khá tốt đối với hầu hết các ứng dụng.

Và cuối cùng, tôi cũng muốn làm rõ một điều khác, đó là bạn chắc chắn đã nghe về Bộ lọc EMA và DEMA. Bộ lọc EMA (Đường trung bình trượt theo cấp số nhân) cho phép triển khai loại bộ lọc này một cách đơn giản trong các thiết bị nhúng. Đối với DEMA (Đường trung bình động hàm mũ kép), chúng có phản hồi nhanh hơn EMA, duy trì việc triệt tiêu tốt nhiễu mà bạn muốn tránh.

Yếu tố alpha

El yếu tố alpha, mà bạn sẽ thấy xuất hiện trong mã Arduino IDE trong phần tiếp theo, là tham số điều kiện hoạt động của bộ lọc hàm mũ. Nó liên quan đến tần số cắt:

  • Alpha = 1: cung cấp tín hiệu cho đầu ra chưa được lọc.
  • Alpha = 0: giá trị bộ lọc sẽ luôn là 0.
  • Alpha = x: các giá trị khác có thể nhận được các thay đổi khác trong bộ lọc EMA. Nếu bạn giảm hệ số Alpha, bạn sẽ làm dịu tín hiệu tần số thu được nhiều hơn, và thời gian đáp ứng của hệ thống cũng tăng lên (mất nhiều thời gian hơn để ổn định).

Bộ lọc và Arduino

Bus Arduino I2C

Để sử dụng các bộ lọc này, sử dụng thư viện cho Arduino IDE sẽ giúp công việc của bạn dễ dàng hơn nhiều. Bạn có thể dùng này cùng.

Bạn nên biết rằng không cần thiết phải tạo mạch bộ lọc thông cao hoặc bộ lọc thông thấp để kết nối nó với bảng Arduino của bạn và làm việc với nó. Mặc dù bạn có thể thử nghiệm và tạo các loại bộ lọc đơn giản này, bạn cũng có thể kiểm tra cách hoạt động của EMA chỉ với bảng Arduino và một mã đơn giản cho Arduino IDE. Đó là điều duy nhất bạn cần xem nó phụ trách việc lọc một số tần số như thế nào (trong trường hợp này, hành động được mô phỏng và một số số nguyên / số nổi được lọc đơn giản mô phỏng những gì tôi sẽ làm lọc thực tế).

Dưới đây là một số mẫu mã mà bạn có thể sử dụng để thực hành.

Ví dụ về bộ lọc kỹ thuật số đơn giản trong loại Arduino vượt qua thấp:

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

Ví dụ về mã cho loại Arduino Vượt qua cao:

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
}

Ví dụ về mã Arduino băng chuyền:

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

Ví dụ về mã Arduino cho ban nhạc:

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

Hãy nhớ rằng ADC là bộ chuyển đổi Arduino Analog Digital. Sử dụng phạm vi 0-5v, chia thành các phạm vi 0-1023. Nếu giá trị là 0v, giá trị kỹ thuật số là 0 được lấy và nếu là 5v, 1023 sẽ được lấy làm giá trị tín hiệu, 1v có thể là 204m, 2v sẽ là 408, v.v.

Tôi khuyên bạn nên sửa đổi và thử nghiệm với những mã này. Kết quả bạn có thể xem rất đồ họa nhờ Trình vẽ nối tiếp của Arduino IDE ... Hãy nhớ rằng nếu bạn có câu hỏi về lập trình Arduino hoặc cách sử dụng IDE, bạn có thể tải xuống khóa học HwLibre miễn phí dưới dạng PDF.


Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.