فیلتر کالمن، فیلتر پایین‌گذر و فیلترهای دیجیتال در سیستم‌های صنعتی

Afra Machine | Firmware | Embedded Systems | Industrial Automation
Digital Filters

فهرست مطالب

نویز چیست؟

تقریباً هیچ سنسوری در دنیای واقعی داده‌ای کاملاً دقیق و بدون خطا تولید نمی‌کند. سیگنال‌های اندازه‌گیری شده همواره تحت تأثیر نویزهای الکتریکی، مکانیکی، محیطی و خطاهای اندازه‌گیری قرار دارند. اگر این نویزها حذف یا کاهش داده نشوند، سیستم کنترل ممکن است تصمیم‌های اشتباه بگیرد و عملکرد دستگاه با افت کیفیت، نوسان یا حتی خرابی مواجه شود.

در محیط‌های صنعتی منابع مختلفی باعث ایجاد نویز می‌شوند؛ از جمله اینورترها، موتورهای الکتریکی، تجهیزات جوشکاری، میدان‌های الکترومغناطیسی، کابل‌های طولانی، لرزش مکانیکی و حتی خطای مبدل‌های آنالوگ به دیجیتال (ADC). بنابراین استفاده از فیلترهای مناسب یکی از مهم‌ترین بخش‌های طراحی Firmware و سیستم‌های کنترل صنعتی محسوب می‌شود.

فیلتر مناسب می‌تواند بدون حذف اطلاعات مفید، بخش عمده‌ای از نویز را حذف کرده و دقت اندازه‌گیری را به شکل قابل توجهی افزایش دهد.
Sensor Noise

چرا به فیلتر نیاز داریم؟

فرض کنید سرعت یک موتور توسط انکودر اندازه‌گیری می‌شود. اگر مقدار اندازه‌گیری شده مستقیماً وارد کنترل‌کننده PID شود، نویز موجود باعث تغییرات مداوم خروجی کنترلر خواهد شد. نتیجه این وضعیت، لرزش موتور، افزایش استهلاک تجهیزات و کاهش دقت سیستم است.

به همین دلیل تقریباً در تمام سیستم‌های صنعتی، قبل از استفاده از داده‌های سنسورها، از یک یا چند فیلتر دیجیتال استفاده می‌شود. انتخاب نوع فیلتر به سرعت پاسخ موردنیاز، دقت، توان پردازشی کنترلر و نوع نویز بستگی دارد.

فیلتر پایین‌گذر (Low Pass Filter)

فیلتر پایین‌گذر یا Low Pass Filter یکی از پرکاربردترین فیلترهای دیجیتال در سیستم‌های Embedded و اتوماسیون صنعتی است. وظیفه این فیلتر عبور دادن سیگنال‌های با فرکانس پایین و حذف نویزهای با فرکانس بالا است.

به بیان ساده، این فیلتر تغییرات سریع و ناگهانی را حذف کرده و تنها روند اصلی سیگنال را حفظ می‌کند. به همین دلیل تقریباً در تمام Firmwareهای صنعتی، PLCها، CNCها و سیستم‌های کنترلی از آن استفاده می‌شود.

Low Pass Filter

نحوه عملکرد

در هر نمونه‌برداری، مقدار جدید سیگنال با مقدار قبلی ترکیب می‌شود. به این ترتیب تغییرات ناگهانی حذف شده و خروجی نرم‌تر خواهد شد.

رابطه ریاضی فیلتر پایین‌گذر به صورت زیر است:


Filtered = α × Input + (1 − α) × Previous

در این رابطه ضریب α عددی بین صفر و یک است.

در بسیاری از پروژه‌های صنعتی مقدار α بین 0.05 تا 0.30 انتخاب می‌شود.

نمونه کد C++


float alpha = 0.15;

filtered = alpha * sensorValue
         + (1-alpha) * filtered;

این کد روی Arduino، STM32، ESP32 و تقریباً تمام میکروکنترلرها قابل استفاده است.

کاربردهای Low Pass

Low Pass Example

فیلتر بالاگذر (High Pass Filter)

برخلاف Low Pass، فیلتر High Pass تغییرات سریع را عبور داده و تغییرات آهسته را حذف می‌کند.

این فیلتر بیشتر برای تشخیص تغییرات ناگهانی، ضربه، لرزش و ارتعاش استفاده می‌شود.

کاربردها

در سیستم‌های مانیتورینگ وضعیت (Condition Monitoring)، معمولاً ابتدا سیگنال توسط High Pass فیلتر شده و سپس وارد الگوریتم تحلیل ارتعاش می‌شود.

Band Pass Filter

فیلتر Band Pass تنها یک بازه مشخص از فرکانس‌ها را عبور می‌دهد و سایر فرکانس‌ها را حذف می‌کند.

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

Band Pass Filter

Notch Filter

گاهی تنها یک فرکانس خاص باعث ایجاد مشکل می‌شود. برای مثال نویز 50Hz یا 60Hz ناشی از شبکه برق.

در این شرایط بهترین گزینه استفاده از فیلتر Notch است که تنها همان فرکانس مزاحم را حذف کرده و سایر اطلاعات سیگنال را حفظ می‌کند.

کاربردهای Notch Filter

اگر نویز تنها در یک فرکانس مشخص وجود داشته باشد، Notch Filter معمولاً بهترین انتخاب است زیرا کمترین تأثیر را بر سایر قسمت‌های سیگنال دارد.

فیلتر میانگین متحرک (Moving Average Filter)

یکی از ساده‌ترین و پرکاربردترین فیلترهای دیجیتال، فیلتر میانگین متحرک یا Moving Average است. در این روش، به جای استفاده از آخرین مقدار اندازه‌گیری شده، میانگین چند نمونه اخیر محاسبه می‌شود. این کار باعث کاهش نویزهای تصادفی و افزایش پایداری سیگنال خواهد شد.

هرچه تعداد نمونه‌های مورد استفاده بیشتر باشد، خروجی نرم‌تر خواهد شد؛ اما در مقابل سرعت پاسخ سیستم کاهش می‌یابد.

Moving Average Filter

فرمول محاسبه


Output = (X1 + X2 + X3 + ... + Xn) / n

نمونه کد C++


const int N = 10;

float buffer[N];

float sum = 0;

int index = 0;

sum -= buffer[index];

buffer[index] = sensor;

sum += sensor;

index++;

if(index>=N)

index=0;

filtered = sum / N;

این روش برای حذف نویزهای تصادفی بسیار مناسب است اما در سیگنال‌هایی که تغییرات سریع دارند باعث ایجاد تأخیر خواهد شد.

Moving Average برای سنسورهای دما، فشار، وزن و اندازه‌گیری سطح مایعات انتخاب بسیار مناسبی است.

Weighted Moving Average

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

به عنوان مثال می‌توان وزن‌های زیر را در نظر گرفت:


40%

30%

20%

10%

در این حالت آخرین اندازه‌گیری بیشترین تأثیر را در خروجی خواهد داشت.

Weighted Average Filter

Exponential Moving Average (EMA)

EMA یکی از محبوب‌ترین فیلترهای Firmware است زیرا علاوه بر حذف نویز، حافظه بسیار کمی نیاز دارد و تنها از آخرین مقدار خروجی استفاده می‌کند.

در بسیاری از پروژه‌های STM32، ESP32 و Arduino از همین فیلتر به عنوان Low Pass Filter نیز استفاده می‌شود.

فرمول EMA


Filtered = α × Input

+ (1-α) × Previous

در واقع همان رابطه‌ای است که در بخش Low Pass مشاهده شد.

اگر حافظه میکروکنترلر محدود باشد، EMA نسبت به Moving Average انتخاب مناسب‌تری خواهد بود.

Median Filter

یکی از مشکلات رایج در سنسورها، ایجاد نویزهای لحظه‌ای یا Spike است. این نویزها ممکن است تنها در یک نمونه ظاهر شوند اما مقدار بسیار بزرگی داشته باشند.

در چنین شرایطی استفاده از Moving Average چندان مناسب نیست زیرا مقدار غیرعادی وارد میانگین خواهد شد.

Median Filter با مرتب‌سازی نمونه‌ها، مقدار میانی را به عنوان خروجی انتخاب می‌کند.

مثال


20

21

20

22

350

20

21

19

20

میانگین این داده‌ها به شدت تحت تأثیر عدد 350 قرار می‌گیرد، اما مقدار Median برابر 20 خواهد بود که بسیار نزدیک‌تر به مقدار واقعی است.

Median Filter

کاربردهای Median Filter

اگر سیگنال دارای نویزهای لحظه‌ای و مقادیر غیرعادی (Outlier) باشد، Median Filter معمولاً بهترین انتخاب است.

کدام فیلتر را انتخاب کنیم؟

انتخاب فیلتر مناسب به نوع سیگنال، سرعت پاسخ موردنیاز، توان پردازشی کنترلر و نوع نویز بستگی دارد. برای مثال، سنسور دما معمولاً با یک فیلتر Low Pass یا Moving Average عملکرد مناسبی دارد، در حالی که داده‌های IMU یا GPS در ربات‌ها و پهپادها اغلب به فیلتر کالمن نیاز دارند. در بخش بعدی، با فیلتر کالمن و نحوه عملکرد آن آشنا می‌شویم و تفاوت آن را با سایر فیلترهای دیجیتال بررسی خواهیم کرد.

فیلتر کالمن (Kalman Filter)

فیلتر کالمن (Kalman Filter) یکی از قدرتمندترین الگوریتم‌های تخمین حالت (State Estimation) در مهندسی کنترل، رباتیک، هوافضا و سیستم‌های Embedded است. این الگوریتم در سال 1960 توسط رودلف کالمن (Rudolf E. Kalman) معرفی شد و امروزه در هزاران سیستم صنعتی مورد استفاده قرار می‌گیرد.

برخلاف فیلترهای ساده مانند Low Pass یا Moving Average که تنها نویز را کاهش می‌دهند، فیلتر کالمن علاوه بر حذف نویز، مقدار واقعی متغیر را نیز تخمین می‌زند. به همین دلیل در بسیاری از کاربردها حتی اگر داده‌های سنسورها دارای خطا باشند، خروجی فیلتر به مقدار واقعی بسیار نزدیک خواهد بود.

Kalman Filter

چرا فیلتر کالمن متفاوت است؟

فرض کنید سرعت یک موتور توسط انکودر اندازه‌گیری می‌شود. مقدار واقعی سرعت برابر 1000 دور بر دقیقه است، اما اندازه‌گیری‌ها به صورت زیر ثبت می‌شوند:


998

1005

1002

995

1008

997

1001

استفاده از داده‌های خام باعث نوسان کنترل‌کننده خواهد شد. در حالی که فیلتر کالمن با ترکیب مدل ریاضی سیستم و داده‌های اندازه‌گیری، مقدار واقعی را تخمین می‌زند.

فیلتر کالمن تنها یک فیلتر نیست؛ بلکه یک الگوریتم تخمین هوشمند است که همواره بین پیش‌بینی مدل و اندازه‌گیری واقعی تعادل برقرار می‌کند.

مراحل عملکرد فیلتر کالمن

در هر سیکل اجرای برنامه، فیلتر کالمن دو مرحله اصلی را انجام می‌دهد.

مرحله اول: Prediction

در این مرحله، با استفاده از مدل ریاضی سیستم، مقدار بعدی پیش‌بینی می‌شود.


Current State

↓

System Model

↓

Predicted State

اگر هیچ اندازه‌گیری جدیدی وجود نداشته باشد، سیستم تنها بر اساس مدل خود به کار ادامه می‌دهد.

مرحله دوم: Correction

پس از دریافت داده جدید از سنسور، مقدار پیش‌بینی شده با مقدار اندازه‌گیری شده مقایسه می‌شود و بهترین تخمین محاسبه خواهد شد.


Prediction

+

Sensor Measurement

↓

Kalman Gain

↓

Corrected State

Kalman Prediction Correction

Kalman Gain چیست؟

یکی از مهم‌ترین پارامترهای این الگوریتم، Kalman Gain است. این ضریب مشخص می‌کند که سیستم تا چه اندازه به مدل ریاضی یا به اندازه‌گیری سنسور اعتماد کند.

فیلتر کالمن به صورت خودکار میزان اعتماد به سنسور و مدل را تنظیم می‌کند و نیازی به تنظیم دستی در هر نمونه‌برداری ندارد.

کاربرد فیلتر کالمن در سیستم‌های صنعتی

در تجهیزات صنعتی، معمولاً داده‌های اندازه‌گیری دارای نویز هستند و مستقیماً قابل استفاده نیستند. فیلتر کالمن در بسیاری از این کاربردها استفاده می‌شود:

IMU Kalman Filter

نمونه کد ساده Kalman Filter


float estimate = 0;

float errorEstimate = 1;

float errorMeasure = 2;

float q = 0.01;

float measurement;

float kalmanGain;

errorEstimate += q;

kalmanGain = errorEstimate /
             (errorEstimate + errorMeasure);

estimate = estimate +
           kalmanGain *
          (measurement - estimate);

errorEstimate =
(1-kalmanGain) *
errorEstimate;

این نمونه، یک پیاده‌سازی ساده از Kalman Filter تک‌بعدی است و برای سنسورهایی مانند دما، فشار، فاصله و سرعت مناسب است. در پروژه‌های پیچیده‌تر مانند ناوبری ربات‌ها یا پهپادها معمولاً از نسخه‌های توسعه‌یافته این الگوریتم استفاده می‌شود.

Extended Kalman Filter (EKF)

در بسیاری از سیستم‌های واقعی، مدل ریاضی خطی نیست. برای مثال در ربات‌های متحرک، پهپادها یا سیستم‌های GPS، روابط بین متغیرها غیرخطی هستند. در این شرایط از Extended Kalman Filter یا EKF استفاده می‌شود.

EKF ابتدا مدل غیرخطی را در اطراف نقطه کاری خطی‌سازی کرده و سپس مراحل پیش‌بینی و تصحیح را مشابه Kalman Filter انجام می‌دهد.

Complementary Filter

در پروژه‌هایی که توان پردازشی میکروکنترلر محدود است، استفاده از Complementary Filter انتخاب مناسبی خواهد بود. این فیلتر معمولاً داده‌های ژیروسکوپ و شتاب‌سنج را با یکدیگر ترکیب می‌کند و نسبت به Kalman Filter بسیار ساده‌تر است.

در بسیاری از پروژه‌های مبتنی بر Arduino، استفاده از Complementary Filter به دلیل سادگی و سرعت بالا رایج‌تر از Kalman Filter است، در حالی که در STM32 و ESP32 معمولاً از Kalman یا EKF استفاده می‌شود.

مقایسه انواع فیلترهای دیجیتال

فیلتر سرعت اجرا دقت مصرف پردازنده کاربرد
Low Pass ★★★★★ ★★★☆☆ بسیار کم دما، فشار، جریان
Moving Average ★★★★☆ ★★★★☆ کم لودسل، وزن، سطح
Median ★★★☆☆ ★★★★★ متوسط اولتراسونیک، لیزر
Kalman ★★★☆☆ ★★★★★ زیاد GPS، IMU، Servo
Complementary ★★★★★ ★★★★☆ بسیار کم پهپاد، ربات

کاربرد فیلترها در صنایع مختلف

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

کاربرد در PLC

کاربرد در CNC

کاربرد در Firmware

کاربرد در رباتیک

Industrial Digital Filter
در بسیاری از سیستم‌های صنعتی، تنها استفاده از یک فیلتر کافی نیست. برای مثال ممکن است ابتدا داده‌ها توسط Median Filter از نویزهای لحظه‌ای پاک‌سازی شده و سپس خروجی وارد Kalman Filter یا Low Pass Filter شود تا بهترین نتیجه حاصل گردد.

سوالات متداول

بهترین فیلتر برای سنسور دما چیست؟

در بیشتر کاربردهای صنعتی، فیلتر Low Pass یا Moving Average انتخاب مناسبی است زیرا تغییرات دما معمولاً آهسته بوده و نیازی به الگوریتم‌های پیچیده وجود ندارد.

آیا Kalman Filter همیشه بهترین انتخاب است؟

خیر. اگرچه Kalman Filter دقت بالایی دارد، اما پیاده‌سازی آن پیچیده‌تر است و به توان پردازشی بیشتری نیاز دارد. برای بسیاری از کاربردهای ساده، فیلترهای Low Pass یا Moving Average عملکرد کاملاً مناسبی دارند.

آیا Arduino توان اجرای Kalman Filter را دارد؟

بله. نسخه‌های ساده Kalman Filter روی Arduino Uno و Nano نیز قابل اجرا هستند، اما برای الگوریتم‌های پیشرفته مانند EKF یا UKF بهتر است از میکروکنترلرهای قدرتمندتری مانند STM32 یا ESP32 استفاده شود.

فیلتر Median چه زمانی استفاده می‌شود؟

زمانی که داده‌های سنسور دارای نویزهای لحظه‌ای یا مقادیر غیرعادی (Outlier) باشند، Median Filter یکی از بهترین گزینه‌ها است.

در سیستم‌های CNC معمولاً از چه فیلتری استفاده می‌شود؟

در کنترل محورهای CNC معمولاً ترکیبی از فیلترهای Low Pass، Kalman Filter و الگوریتم‌های کنترلی Servo برای افزایش دقت و کاهش ارتعاش استفاده می‌شود.

خدمات افرا ماشین

Afra Machine
طراحی، ساخت، اتوماسیون، برنامه‌نویسی Firmware، راه‌اندازی ماشین‌آلات صنعتی و خطوط نورد سرد و گرم