در این مقاله، میآموزید که چگونه از ابزار FDATool در نرمافزار متلب برای طراحی یک فیلتر استفاده کنید.
کلمه FDATool، مخفف عبارت Filter Design and Analysis Tool است.
این یک ابزار ویژه است که برای طراحی و آنالیز فیلتر استفاده میشود.
در واقع، شما بهکمک ابزار FDATool میتوانید فیلتر را طراحی، تحلیل، کوانتیزه و پیادهسازی کنید.
این ابزار، کار کوانتیزاسیون فیلتر را برای شما بسیار راحت میکند.
More...
اکنون، وارد محیط FDATool میشوم تا شما را با امکانات آن آشنا کنم.
شروع کار با ابزار FDATool
برای شروع کار با ابزار FDATool، مطابق شکل زیر، نام آن را در بخش command line نرمافزار متلب مینویسیم:
سپس، محیط این ابزار بهصورت شکل زیر ظاهر میشود:
در قسمت شماره 1، بخش Filter Specifications را مشاهده میکنید.
اکنون ویژگیهای فیلتر پایینگذری که در تصویر مشاهده میکنید را بررسی میکنم.
ویژگیهای یک فیلتر پایینگذر
در این بخش، نمودار پاسخ فرکانسی فیلتر قرار دارد؛ این نمودار دامنه پاسخ فرکانسی فیلتر را نسبت به فرکانس نشان میدهد.
همانطور که مشاهده میکنید، محور افقی، محور فرکانس بر حسب هرتز است.
محور عمودی نیز دامنه فیلتر را بهصورت لگاریتمی و بر اساس دسیبل (dB) نشان میدهد؛ مقدار صفر dB معادل با یک است.
در واقع، این نمودار، عکسالعمل فیلتر نسبت به مولفههای فرکانسی مختلف را منعکس میکند.
فیلتری که در نمودار مشاهده میکنید یک فیلتر پایینگذر است.
این فیلتر، فرکانسهای کم را از خود عبور میدهد و فرکانسهای زیاد را از خود عبور نمیدهد.
بنابراین، چنانچه سیگنال عبوری از فیلتر دارای مولفههای فرکانسی بین صفر تا Fpass هرتز باشد، فیلتر، این مولفهها را در یک ضرب میکند و از خود عبور میدهد. به این ترتیب، این مولفهها، بدون تغییر از فیلتر عبور میکنند.
در واقع، بهره فیلتر در ناحیه فرکانسی صفر تا Fpass هرتز، حدود یک است.
در این نمودار، فرکانس دیگری بهنام Fstop را مشاهده میکنید.
پاسخ فرکانسی این فیلتر، از Fstop به بعد، عدد بسیار کوچکی است.
این موضوع به این معنی است که اگر سیگنال شما دارای مولفههای فرکانسی با فرکانس بیشتر از Fstop باشد، با عبور از این فیلتر دامنه آنها در عدد بسیار کوچکی ضرب شده و بهشدت کاهش مییابد.
در حالت ایدهآل، باید دامنه خروجی فیلتر در فرکانس بیشتر از Fstop، برابر با صفر باشد.
پارامتر Apass، بهره در ناحیه عبور فیلتر است؛ البته در این نمودار، Apass ، تغییرات بهره را نشان میدهد.
در حالت ایدهآل، انتظار داریم که در ناحیه گذر فیلتر، بهره فیلتر برابر با یک باشد؛ یعنی اگر هر سیگنالی با فرکانس ناحیه گذر فیلتر وارد آن شود بدون تغییر به خروجی منتقل شود.
اما در عمل این مسئله امکانپذیر نیست؛ در واقع، بهره فیلترهایی که در عمل میسازیم دقیقاً برابر با یک نیستند. اختلاف بهره فیلتر با مقدار یک، همان Apass است که در نمودار بالا آن را مشاهده میکنید.
بنابراین، هر چه مقدار Apass کمتر باشد، فیلتر شما به یک فیلتر ایدهآل نزدیکتر است.
ناحیه بین Fpass و Fstop، یک ناحیه گذار است؛ در یک فیلتر ایدهآل، انتظار داریم بعد از Fpass سیگنالی از فیلتر عبور نکند.
اما در فیلترهای واقعی این ناحیه گذار وجود دارد. از این ناحیه، سیگنال بهصورت تضعیف شده عبور میکند.
همچنین، بخشهایی از سیگنال که دارای مولفههای فرکانسی با فرکانس بیشتر از Fstop هستند، به اندازه Astop تضعیف شده و از فیلتر عبور میکنند.
هر چه Astop بزرگتر باشد، تضعیف سیگنال بیشتر خواهد بود.
اکنون به توضیح امکانات مختلف ابزار FDATool برای طراحی فیلتر میپردازم.
طراحی فیلتر بهکمک ابزار FDATool
همانطور که قبلاً اشاره کردم، کار ما بهعنوان پیادهساز، طراحی فیلتر نیست؛ در واقع، طراحی فیلتر، همان طراحی الگوریتم است و افرادی که در حوزه system level فعالیت میکنند، این وظیفه را بر عهده دارند.
اما برای آشنایی بیشتر شما با ابزار FDATool از نرمافزار متلب، اکنون به بحث طراحی فیلتر اشارهای خواهم داشت.
اولین قدم برای طراحی یک فیلتر با ابزار FDATool، مشخص کردن نوع پاسخ آن است.
در قسمت Response Type (بخش شماره 2) شکل زیر، میتوانید نوع فیلتر را از بین گزینههای موجود (پایینگذر، بالاگذر، میاننگذر و ..) مشخص کنید:
همچنین، این ابزار، میتواند فیلترها را با الگوریتمهای مختلفی پیادهسازی کند. شما میتوانید الگوریتم موردنظرتان را از میان آنها انتخاب کنید:
در بخش شماره 3 از شکل زیر، (بخش Design Method)، روش طراحی را مشخص میکنیم:
در این بخش میتوانیم مشخص کنیم که فیلتر دیجیتال ما از نوع FIR یا IIR باشد.
همانطور که در شکل زیر مشاهده میکنید، این ابزار میتواند از الگوریتمهای مختلفی برای پیادهسازی این فیلترها استفاده کند:
بخش Filter Order (قسمت شماره 4 شکل زیر)، مخصوص تعیین درجه فیلتر است:
میتوانید در قسمت Specify order، درجه موردنظرتان برای فیلتر را مشخص کنید.
همچنین، با انتخاب گزینه Minimum order، نرمافزار بهصورت خودکار، فیلتر شما را با حداقل درجه ممکن طراحی میکند.
درجه فیلتر، ارتباط مستقیمی با میزان سختافزارهایی که در هنگام پیادهسازی فیلتر بر روی FPGA مصرف میکنیم دارد.
به این ترتیب که هر چه درجه فیلتر کمتر باشد، ما در پیادهسازی به منابع سخت افزاری کمتری نیاز داریم.
هر چه درجه فیلتر کمتر باشد، پیادهسازی آن، به منابع سخت افزاری کمتری از FPGA نیاز دارد.
در بخش Frequency Specification (بخش شماره 5 شکل زیر)، شما میتوانید مشخصات فرکانسی فیلتر را مشخص کنید:
ابتدا، پارامتر Units یا واحد فرکانسی را مشخص کنید؛ معمولاً از واحد مگاهرتز استفاده میکنیم.
پس از آن، میتوانید پارامتر Fs یا فرکانس نمونهبرداری را مشخص کنید.
توجه داشته باشید که ما در حال طراحی یک فیلتر دیجیتال هستیم؛ ورودی و خروجی چنین فیلتری گسسته است.
بنابراین، اگر یک سیگنال آنالوگ دارید، ابتدا باید آن را بهکمک یک مبدل آنالوگ به دیجیتال نمونهبرداری کرده و سپس، آن را به یک سیگنال دیجیتال تبدیل کنید.
فرکانس نمونهبرداری از سیگنال آنالوگ، در پاسخ فرکانسی فیلتر تاثیرگذار است.
اگر در حال کار با یک مبدل آنالوگ به دیجیتال ۵۰ مگاهرتز هستید، فرکانس نمونهبرداری (پارامتر Fs در شکل بالا) را ۵۰ مگاهرتز انتخاب کنید.
پارامتر بعدی، Fpass یا فرکانس گذر است. در واقع، در یک فیلتر پایینگذر، فرکانس گذر به این معنی است که شما میخواهید مولفههای فرکانسی، از فرکانس صفر تا چه فرکانسی از فیلتر عبور کنند.
برای مثال، من این عدد (پارامتر Fpass در شکل بالا) را روی ۱۰ مگاهرتز قرار میدهم. یعنی، این فیلتر، تا فرکانس ۱۰ مگاهرتز را عبور میدهد.
پارامتر Fstop یا فرکانس قطع، تعیین کننده فرکانسی است که فیلتر، فرکانس بیشتر از آن را عبور نمیدهد. برای مثال، من این عدد را برابر با ۱۵ انتخاب میکنم.
به این ترتیب، بین فرکانسهای ۱۰ مگاهرتز و ۱۵ مگاهرتز، ناحیه گذار ما محسوب میشود.
بخش Magnitude Specifications از تنظیمات، به موضوع تضعیف اختصاص دارد. در قسمت شماره 6 شکل زیر، این بخش را مشاهده میکنید:
بهصورت پیشفرض، Apass یا بهره ناحیه عبور، یک دسیبل انتخاب شده است؛ به این معنا که به میزان 0.5± دسبیل در اطراف صفر دسیبل تضعیف اندکی خواهیم داشت.
همانطور که پیش از این نیز گفتم، در حالت ایدهآل، باید بهره ناحیه عبور فیلتر صفر دسیبل باشد تا سیگنال ما بدون تغییر از این ناحیه عبور کند.
میزان تضعیف (Astop) در ناحیه قطع فیلتر نیز بهصورت پیشفرض برابر با ۸۰dB انتخاب شده است که تضعیف نسبتاً زیادی است.
من بهره این ناحیه (پارامتر Astop در شکل بالا) را برای مثال برابر با ۶۰ دسیبل قرار میدهم.
پس از انجام تمامی این تنظیمات، میتوانید گزینه Design Filter را انتخاب کرده و منتظر بمانید تا نرمافزار، فیلتر موردنظرتان را طراحی کند.
همانطور که در شکل زیر مشاهده میکنید، پس از طراحی فیلتر، نرمافزار پاسخ فرکانسی آن را نیز نمایش میدهد:
نمودار پاسخ فرکانسی که قبل از این نمایش داده میشد، یک پاسخ فرکانسی نمادین بود؛ اما پس از طراحی فیلتر، نمودار پاسخ فرکانسی فیلتر طراحی شده با تنظیماتی شما مشخص کردید، به نمایش گذاشته میشود.
در قسمت Current Filter Information، در شکل بالا، اطلاعاتی از فیلتر طراحی شده را مشاهده میکنید.
برای مثال، ساختار فیلتر از نوع Direct Form FIR نمایش داده شده است.
همچنین، درجه فیلتر برابر با ۱۹ است؛ این مقدار، حداقل درجهای است که نرمافزار توانسته است به آن دست پیدا کند. وضعیت فیلتر نیز پایدار یا stable گزارش شده است.
اما آیا راهی وجود دارد که درجه فیلتر از مقدار ۱۹ کاهش یابد؟
بله؛ برای این هدف، اصطلاحاً باید مشخصات فیلتر را ریلکس کنیم.
وقتی مشخصات فیلتری ریلکس میشود، میتواند با درجه پایینتری پیادهسازی شود.
اگر به نمودار پاسخ فرکانسی با دقت نگاه کنید، مشاهده میکنید که در ناحیه عبوری فیلتر (بین صفر تا ۱۰ مگاهرتز)، بهره فیلتر، در اطراف صفر دسیبل تغییر میکند.
اگر از تنظیمات بخش Magnitude Specifications (قسمت شماره 6)، به خاطر داشته باشید، ما با انتخاب مقدار یک برای Apass، به فیلتر اجازه دادیم که به اندازه نیم دسیبل، در اطراف مقدار صفر، تلورانس داشته باشد.
از فرکانس ۱۵ مگاهرتز به بعد نیز بهره فیلتر به شدت کاهش پیدا کرده است.
توجه داشته باشید که ابزار طراحی، نتوانسته است بهره را در بعضی نقاط، کمتر از ۶۰ دسیبل نگه دارد و در برخی فرکانسها، مقادیری بیشتر از ۶۰ مشاهده میشود.
ناحیه فرکانسی ۱۰ تا ۱۵ مگاهرتز نیز ناحیه گذار فیلتر است.
روشهای کاهش درجه فیلتر
برای کاهش درجه فیلتر (اصطلاحاً، ریلکس کردن مشخصات آن) چند راه وجود دارد.
یکی از راهها این است که فاصله فرکانس عبوری و فرکانس قطع را بیشتر کنیم.
برای مثال، من فرکانس قطع را از ۱۵ مگاهرتز به ۲۰ مگاهرتز افزایش میدهم (قسمت شماره 1 شکل زیر):
اگر اکنون گزینه Design Filter (قسمت شماره 2 از شکل بالا) را انتخاب کنیم، شاهد کاهش درجه فیلتر خواهیم بود.
همانطور که در قسمت شماره 3 از شکل بالا مشاهده میکنید، درجه فیلتر جدید برابر با ۸ است؛ این در حالی است که درجه فیلتر قبلی، ۱۹ بود.
البته، اگر به پاسخ فرکانسی فیلتر دقت کنید، در این حالت، فیلتر ما از حالت ایدهآل دور شده است. اما در عوض، درجه فیلتر کمتر شده است.
راه دیگری که برای ریلکس کردن فیلتر وجود دارد، انتخاب مقدار تضعیف کمتر برای ناحیه قطع فیلتر است. برای مثال، من مطابق شکل زیر، پارامتر Astop را از ۶۰ دسیبل به ۵۰ دسیبل کاهش میدهم:
همانطور که مشاهده میکنید، در این حالت، فیلتر جدیدی که طراحی میشود دارای درجه ۷ است.
به این ترتیب، با تغییر مشخصات فیلتر میتوان به فیلتری با ویژگیهای دلخواه رسید.
اکنون امکانات دیگر ابزار FDATool را بررسی میکنم.
همانطور که در مقاله ساختارهای محبوب بلوکهای پرکاربرد فیلترهای دیجیتال FIR و IIR گفتم، برای پیادهسازی یک فیلتر، کافی است طراح فیلتر ضرایب آن را در اختیار شما قرار دهد.
در واقع، ضرایب یک فیلتر تمام ویژگیهای آن را در بر دارد.
برای مشاهده ضرایب فیلتری که توسط ابزار FDATool طراحی شده است، میتوانیم مطابق شکل زیر، از منوی بالای صفحه، گزینه Filter Coefficients را انتخاب کنیم:
همانطور که مشاهده می کنید، ضرایب این فیلتر شامل اعداد اعشاری با رقمهای اعشار نسبتاً طولانی است؛ در واقع، این ضرایب floating point با عرض بیت ۶۴ بیت هستند.
زیرا بهصورت پیشفرض، طراحی بر اساس سیستم floating point انجام شده است. اما با امکاناتی که در ابزار FDATool وجود دارد میتوان ضرایب فیلتر را کوانتیزه کرد.
همانطور که در شکل زیر مشاهده میکنید، در منوی بالای صفحه، گزینههایی برای مشاهده انواع پاسخهای این فیلتر وجود دارد:
برای مثال، در شکل زیر، پاسخ فاز این فیلتر را مشاهده میکنید:
نکته قابل توجه در پاسخ فاز این فیلتر این است که در ناحیه گذر فیلتر، فاز آن، خطی است. پاسخ فاز خطی به این معنی است که اختلاف فازی که فیلتر، بین سیگنال ورودی و خروجی، نسبت به فرکانس، ایجاد میکند، یک نمودار خطی است.
توجه کنید که خطی بودن فاز فیلتر بر اساس ناحیه عبور فیلتر تعیین میشود.
در واقع، وجود مناطق غیرخطی در ناحیه قطع فیلتر، تاثیری بر این موضوع ندارد.
از دیگر نمودارهای بسیار مهم، نمودار پاسخ پله است (شکل زیر):
پاسخ پله به این معنی است که به ورودی فیلتر سیگنال پله اعمال کرده و خروجی آن را رسم کنیم.
اگر بخواهید تعداد نمونههای بیشتری را در پاسخ پله مشاهده کنید، میتوانید مطابق شکل زیر، روی نمودار، کلیک راست کرده و گزینه آنالیز پارامترها (Analysis Parameters) را انتخاب کنید:
سپس، مطابق شکل زیر، از منوی Specify Length، گزینه Specified را انتخاب کنید:
سپس، میتوانید تعداد نمونهها را مشخص کنید؛ برای مثال، من تعداد ۲۰ نمونه را انتخاب میکنم:
فیلتر تمام گذر، همه فرکانسها را از خود عبور میدهد.
اگر یک فیلتر تمام گذر داشته باشیم و به آن ورودی پله را اعمال کنیم، خروجی نیز سیگنال پله خواهد بود.
در واقع، ورودی و خروجی یک فیلتر تمام گذر، یکسان است.
سیگنال پله به این صورت است که بهصورت ناگهانی مقدارش از صفر به یک میرسد.
این تغییر ناگهانی باعث میشود در طیفش شاهد تمام فرکانسها باشیم.
بنابراین، با اعمال سیگنال پله به هر فیلتر، میتوانیم اطلاعات خوبی از آن فیلتر بهدست آوریم.
چون ما یک فیلتر پایینگذر طراحی کردهایم، انتظار داریم در پاسخ پله این فیلتر، سیگنالی متفاوت از سیگنال پله مشاهده کنیم؛ زیرا یک فیلتر پایینگذر، تعدادی از مولفههای فرکانسی را حذف میکند.
همانطور که در شکل زیر مشاهده میکنیم، پاسخ پله این فیلتر به این صورت است که ابتدا دامنه فیلتر در اطراف صفر تغییر میکند و حتی در برخی نواحی به زیر صفر میرود. برای نواحی زیر صفر اصطلاحاً میگوییم فیلتر دارای undershoot است:
سپس، دامنه فیلتر با یک شیب ملایم، خود را به مقدار یک رسانده است (بین زمانهای 50 تا 100 نانوثانیه در شکل بالا).
همچنین، مشاهده میکنید که گاهی مقدار دامنه فیلتر از یک فراتر رفته است (زمان 100 نانوثانیه در شکل بالا)؛ اصطلاحاً به این رفتار، overshoot میگوییم.
اما در نهایت، دامنه فیلتر در اطراف مقدار یک به پایداری رسیده است.
میزان اختلاف فیلتر از مقدار یک، خطای فیلتر است.
بهطور کلی، پاسخ پله، بسیار بسیار مهم است و ما با بررسی آن میتوانیم نتایج بسیار مهمی از رفتار فیلتر بگیریم.
ما یک فیلتر پایینگذر FIR با ساختار Direct Form طراحی کردیم؛ اگر قصد تغییر ساختار فیلتر را داشته باشید، می توانید، همانند شکل زیر، در قسمت اطلاعات فیلتر فعلی یا Current Filter Information کلیک راست کرده و گزینه Convert Structure را انتخاب کنید:
در پنجرهای که ظاهر میشود، میتوانید ساختارهای محبوب را مشاهده کنید:
برای مثال، من ساختار ترانسفر را انتخاب میکنم؛ در شکل زیر، مشاهده میکنید که در پاسخ فیلتر تغییری ایجاد نمیشود:
همانطور که در مقاله ساختارهای محبوب بلوکهای پرکاربرد فیلترهای دیجیتال FIR و IIR اشاره کردم، ساختاری که فیلتر را بر اساس آن پیادهسازی می کنیم تاثیری در پاسخ فرکانسی فیلتر ندارد.
قبل از پیادهسازی فیلتر و ایجاد بلوک آن، لازم است محیط سیمولینک متلب را باز کنیم.
برای این کار، به صفحه اصلی نرمافزار متلب میرویم و مطابق شکل زیر، گزینه New را انتخاب کرده و سپس Simulink Model را انتخاب میکنیم:
اکنون برای ساخت فیلتر و استفاده از بلوک آن در محیط سیمولینک متلب، به محیط FDATool بازگردید و مطابق شکل زیر، از منوی سمت چپ و پایین صفحه، گزینه Realize Model را انتخاب کنید:
سپس، گزینه Build model using basic elements را تیک بزنید تا فیلتر شما، بهکمک بلوکهای پایه مانند جمع، ضرب و تاخیر پیادهسازی شود. در نهایت، مطابق شکل زیر، گزینه Realize Model را انتخاب کنید:
به این ترتیب، فیلتر بهصورت زیر در محیط سیمولینک ایجاد میشود:
اگر روی این بلوک دبل کلیک کنیم، مطابق شکل زیر، میتوانیم مدار درون آن را مشاهده کنیم:
همانطور که مشاهده میکنید، نرمافزار یک فیلتر با ساختار Transposed برای ما ایجاد کرده است.
شماتیک این ساختار را در شکل زیر مشاهده میکنید:
در این ساختار، ابتدا ورودی فیلتر وارد بلوکهای بهره (gain) میشود. اگر مکاننما را روی یکی از این بلوکها قرار دهید، متوجه میشوید که بهره بهصورت floating point است.
مشاهده میکنید که خروجی بلوکهای بهره از بلوکهای تاخیر عبور میکند.
پس از آن، خروجی بلوکهای تاخیر با یکدیگر جمع شده و خروجی را میسازند.
در حال حاضر، محاسبات داخلی این فیلتر بهصورت floating point انجام میشود.
طبق هفت گام پیادهسازی الگوریتمهای پردازش سیگنال که در مقاله ۷ گام پیادهسازی الگوریتمهای پردازش سیگنال در FPGA به آن اشاره شد، در گام بعدی باید این فیلتر را کوانتزه کنیم.
ابزار FDATool، برای کوانتزه کردن فیلتر امکاناتی را در اختیار ما قرار میدهد.
مطابق شکل زیر، از منوی سمت چپ، گزینه Set quantization parameters را انتخاب میکنیم:
مشاهده میکنیم که بهصورت پیشفرض گزینه Double-precision floating point انتخاب شده است؛ در این حالت، اعداد ۶۴ بیتی خواهند بود.
اگر منوی کشویی را باز کنید، گزینههای دیگر را مشاهده میکنید.
گزینه Single-precision floating point، بهمعنای floating point با عرض بیت ۳۲ است.
گزینه سوم، گزینه fixed point است که برای کوانیزه کردن باید آن را انتخاب کنید.
به این ترتیب، ابزارهای کوانتیزه کردن فیلتر مانند شکل زیر ظاهر میشوند:
محتویات این مقاله، برگرفته از دوره آنلاین پردازش سیگنال با FPGA است که در آن با نحوه پیادهسازی بهینه انواع الگوریتمهای دیجیتال در FPGA آشنا میشوید.
ادامه مراحل کوانتیزاسیون فیلتر این مقاله که بسیار مفصل است، به همراه دهها تکنیک و روش فوقالعاده برای پیادهسازی انواع الگوریتمها را میتوانید در این دوره بیاموزید.
امیدوارم از خواندن این مقاله هم لذت برده باشید و بتوانید از نکات یاد گرفته شده، در انجام پروژههایتان استفاده کنید.
سلام وقتتون بخیر،من میخوام فیلتر میانگذر طراحی کنم بعد با سیگنالهای ecg با دستور conv پیش پردازش انجام بدم. باید کدش رو چزوری بنویسم؟
سلام،
متاسفانه سوال شما بسیار کلی است و در یک کامنت قابل مطرح کردن نیست.
موفق باشید.