در این مقاله، با هم یکی دیگر از پروژه های آردوینو را بررسی می کنیم. ابتدا بر روی یک آردوینو کتابخانه DSP را اضافه و نقش فیلترهای آنالوگ RLC و RC را در دو حالتهای مختلف بالا گذر و پایین گذر طراحی طراحی میکنیم! البته در نظر داشته باشید که فیلتر طراحی شده، بیشتر جنبه آموزشی داشته و ممکن است در بعضی موارد پاسخ درستی نداشته باشد. اما به طور کلی، برای درک عملکرد فیلترها میتواند مفید باشد. هدف از این مقاله، بررسی و تست این موضوع است که آیا با آردوینو میتوان یک فیلتر DSP طراحی کرد؟
با این مقاله از سیسوگ همراه باشید.
DSP چیست؟
DSP مخفف عبارت Digital Signal processor است و در واقع یک ریزپردازنده تخصصی یا یک بلوک از یک تراشه است که معماری داخلی آن برای عملیاتهای پردازش سیگنال دیجیتال بهینه سازی شده است. DSP تراشههایی از جنس MOS هستند. این تراشهها بهطور گسترده در سیگنالهای صدا، تصویر، مخابرات، رادار، دریاب صوتی و سیستمهای تشخیص گفتار استفاده میشوند.
پنجره بندی سیگنال چیست؟
در این پروژه، از آنجایی که سیگنال ورودی، از لحاظ زمانی انتهایی ندارد و بهصورت مداوم وجود دارد، برای پردازش آن را به بازههای زمانی مشخصی تقسیم بندی میکنیم. برای مثال، هر دو ثانیه را در قالب یک پنجره در نظر میگیریم و پردازش را روی آن انجام میدهیم. در این کتابخانه نیز ابتدا سیگنال ورودی را بهصورت پنجرهای با طول مشخص دریافت و سپس عملیات پردازش را بر روی آن انجام میدهد.
دانلود کتابخانه
در مقاله قبلی، توانستیم فیلترهای زیادی را بر روی آردوینو اجرا و پیاده سازی کنیم. توصیه میکنم حتماً مقاله طراحی فیلتر دیجیتال با آردوینو را نیز مطالعه بفرمایید. برای نصب کتابخانه DSP برای آردوینو ابتدا فایل زیپ پروژه را از آدرس گیت هاب پروژه دانلود کنید.
نصب کتابخانه
پس از دانلود کتابخانه DSP همانند کتابخانههای دیگر آن را از مسیر زیر به آردوینو خود اضافه کنید:
Sketch -> Include Library -> Add.ZIP Library
نحوه استفاده از کتابخانه
فیلترهای مورد استفاده در کتابخانه DSP آردوینو دیجیتال میباشند ولی رفتار فیلتر آنالوگ را شبیه سازی میکنند. دو نوع فیلتر در این کتابخانه وجود دارد:
فیلتر FiltersOnePole
این فیلتر دیجیتال تک قطبی، در واقع نقش فیلترهای مقاومت و خازنی (RC) را تقلید میکند. هم برای فیلترهای بالاگذر و هم فیلترهای پایین گذر.
فیلتر FiltersTwoPole
این فیلتر دیجیتال دو قطبی، نقش فیلتر آنالوگ مقاومت – سلف – خازن (RLC) را بازی میکند. از آنجایی که یک فیلتر RLC تنها یک نوسان ساز هارمونیکی ضعیف است، به خوبی میتوان با استفاده از کلاس FiltersTwoPole و با تنظیم کیفیت و فرکانس تشدید (رزونانس)، آن را پیاده سازی کرد.
برای استفاده از کتابخانه آردوینو و فیلترهای آن، ابتدا میبایست یک شیء (Object) از روی فیلتر دلخواه بسازید. همچنین با استفاده از متدها میتوانید بالا گذر یا پایین گذر بودن فیلترها را مشخص کنید:
1 2 3 4 | FilterOnePole filterOneLowpass( LOWPASS, testFrequency ); //ساخت فیلتر one pole (RC) FilterTwoPole myFilter;// two pole ساخت یک شی جدید از روی کلاس myFilter.setAsFilter( LOWPASS_BUTTERWORTH, testFrequency ); //تنظیم رفتار کلاس برای شبیه سازی فیلتر پایین گذر |
مثال های کتابخانه
برنامه نمونه (Example) خود کتابخانه فیلتر DSP را میتوانید از طریق منوی زیر باز کنید:
File -> Examples -> Filters-master
در این برنامه دو تابع برای تست هر دو نوع فیلتر یک قطبی و دو قطبی نوشته شده است که شما تنها کافی است در برنامه اصلی آنها را صدا زده و خروجی را در پنجره سریال مشاهده کنید.
1 2 3 4 | void loop() { testOnePoleFilters(); testTwoPoleFilters(); } |
در برنامه نمونه، شما تنها کافی است تا در حلقه Loop تابعی که نیاز دارید را از حالت توضیح (کامنت) خارج کنید. به یاد داشته باشید که برای مشاهده نتیجه فیلترهای DSP فوق، حتماً در آردوینو سرعت پنجرهی سریال را بر روی 57600 تنظیم کنید.
نتیجه اعمال حالت فیلتر DSP TwoPole در پنجره سریال آردوینو
time: 0.01 in: 0.00 +/- 0.05 (100.00 +/- 70.71) LP2: 0.00 +/- 0.00 (0.0 +/- 50.00) LP2A: 0.00 +/- 0.00 LP2B: 0.00 +/- 0.00
time: 5.00 in: 50.91 +/- 71.34 (100.00 +/- 70.71) LP2: 49.87 +/- 61.73 (0.0 +/- 50.00) LP2A: 50.71 +/- 71.06 LP2B: 47.22 +/- 49.36
time: 10.00 in: 85.18 +/- 74.43 (100.00 +/- 70.71) LP2: 84.84 +/- 59.21 (0.0 +/- 50.00) LP2A: 85.16 +/- 74.20 LP2B: 83.80 +/- 37.04
همچنین برای تست حالت فیلتر DSP OnePole خروجی زیر را در پنجره سریال آردوینو خواهید دید:
time: 0.00 in: 0.00 +/- 0.04 (100.00 +/- 70.71) LP1: 0.00 +/- 0.00 (100.00 +/- 50.00) HP1: 0.00 +/- 0.11 (0.0 +/- 50.00)
time: 5.00 in: 50.89 +/- 71.33 (100.00 +/- 70.71) LP1: 50.12 +/- 61.28 (100.00 +/- 50.00) HP1: 0.78 +/- 35.42 (0.0 +/- 50.00)
time: 10.00 in: 85.18 +/- 74.43 (100.00 +/- 70.71) LP1: 84.92 +/- 58.37 (100.00 +/- 50.00) HP1: 0.26 +/- 45.26 (0.0 +/- 50.00)
سلام ممنون از مطلب مفیدتون…حالا که باب پردازش سیگنال باز شده لطفا نحوه کار با کتابخانه cmsis dsp رو هم توضیح بدین چون هیچ مطلبی راجع بهش در سایتای فارسی وجود نداره و برای کارهای الکترونیک قدرت بسیار کاربردی هست.
سلام.
خواهش میکنم. اگر تونستیم، حتماً.