آموزش فیلترینگ سیگنال در پایتون | طراحی فیلتر ایده‌آل در حوزه فرکانس (FFT)

آموزش پردازش سیگنال در پایتون | آستانه‌گذاری، PWM و برش سیگنال (Clipping)
17 بازدید
۱۴۰۴-۱۱-۱۳
7 دقیقه
  • نویسنده: Sepehr Kouzegaran
  • درباره نویسنده: ---

در قسمت قبل با آستانه‌گذاری و محدودکردن دامنه سیگنال با روش‌های مبتنی بر indexing آرایه آشنا شدیم. در این قسمت از آموزش می‌خواهیم با استفاده از indexing آرایه فیلترکردن ایده‌آل را در حوزه فرکانس پیاده‌سازی کنیم. در این آموزش فیلتر پایین گذر و میان‌گذر ایده‌آل را در حوزه فرکانس پیاده‌سازی می‌کنیم.

کدهای پایتون نوشته در این آموزش، در یک فایل ژوپیتر نوت‌بوک نوشته شده‌اند. لینک دانلود فایل ژوپیتر نوت‌بوک مربوط به این آموزش در انتهای صفحه قرار داده شده است.

برای تعریف آرایه‌ها کتابخانه numpy و برای ترسیم نمودار کتابخانه matplotlib را import می‌کنیم.

تعریف آرایه‌ها کتابخانه numpy

سه سیگنال سینوسی با فرکانس 20 هرتز با دامنه 1 ، فرکانس 130 هرتز با دامنه 1 و فرکانس 200 هرتز با دامنه 0.5  تعریف می‌کنیم و هر سه را با هم جمع کرده و سیگنال x را بدست می‌آوریم. نمودار x را در زمان رسم می‌کنیم.

رسم نمودار x

نمودار خروجی:

نمودار خروجی

ترسیم طیف سیگنال در حوزه‌ی فرکانس

برای به‌دست‌آوردن طیف سیگنال در حوزه‌ی فرکانس از تابع fft از کتابخانه numpy استفاده می‌کنیم. این تابع خروجی را در بازه‌ی صفر تا 2*pi (فرکانس گسسته) که معادل است با بازه‌ی صفر تا Fs هرتز (فرکانس پیوسته) تولید می‌کند (Fs نرخ نمونه‌برداری). برای به‌دست‌آوردن دامنه طیف، از تابع abs استفاده کرده و اندازه مقادیر مختلط به‌دست‌آمده را محاسبه می‌کنیم.

ترسیم طیف سیگنال در حوزه‌ی فرکانس

نمودار خروجی:

نمودار خروجی

به بازه‌ی صفر تا 500 (Fs/2=500) اگر نگاه کنیم، می‌توان مشاهده کرد در فرکانس‌های 20، 130 و 200 هرتز مقدار دامنه طیف دارای مؤلفه‌ی غیرصفر می‌باشد (همان فرکانس‌هایی هستند که در سیگنال x حضور دارند).

برای به‌دست‌آوردن طیف متقارن می‌توان از fftshift استفاده کرد. این تابع جای نیمه‌ی دوم طیف را با نیمه‌ی اول جابه‌جا می‌کند. پس از اینکه fft سیگنال را به دست آوردیم با اعمال fftshift، طیف در بازه‌ی متقارن -pi تا pi یا به‌عبارت‌دیگر در بازه‌ی -Fs/2 تا Fs/2 قرار می‌گیرد.

به‌دست‌آوردن طیف متقارن با fftshift

نمودار خروجی:

نمودار خروجی

طیف در بازه‌ی متقارن رسم شده است.

فیلتر پایین گذر ایده‌آل

برای تعریف فیلتر پایین گذر ایده‌آل با فرکانس قطع 50 هرتز، از آرایه‌ی فرکانس استفاده می‌کنیم. قدرمطلق فرکانس‌ها را با فرکانس قطع مقایسه می‌کنیم. در آرایه‌ی lpf در جاهایی که قدرمطلق فرکانس از فرکانس قطع کمتر باشد مقدار True (ناحیه‌ی عبور فیلتر) و در بقیه فرکانس‌ها مقدار False (ناحیه‌ی قطع فیلتر) قرار می‌گیرد.

فیلتر پایین گذر ایده‌آل

نمودار طیف x و فیلتر پایین گذر ایده‌آل که تعریف کردیم را رسم می‌کنیم.

نمودار طیف x

نمودار خروجی:

نمودار خروجیمی‌توان مشاهده کرد دامنه‌ی طیف فیلتر در بازه‌ی -50 تا 50 هرتز برابر با 1 بوده (ناحیه‌ی عبور) و در بقیه‌ی فرکانس‌ها دامنه صفر است (ناحیه‌ی قطع).

برای اینکه سیگنال x را در حوزه‌ی فرکانس فیلتر کنیم، طیف سیگنال را به طیف فیلتر پایین گذر ضرب می‌کنیم (توجه داشته باشید طیف فیلتر را متقارن در نظر گرفته‌ایم به همین خاطر آن را به طیف متقارن x ضرب می‌کنیم).

فیلتر پایین گذر ایده‌آل

طیف حاصل را در Y قرار داده و دامنه‌ی آن را محاسبه کرده و نمودار آن را رسم می‌کنیم.

فیلتر پایین گذر ایده‌آل

می‌توان مشاهده کرد پس از فیلترکردن، فقط فرکانس 20 هرتز در سیگنال باقی مانده است و دو سینوسی با فرکانس های 130 و 200 هرتز حذف شده اند.

برای به‌دست‌آوردن معادل سیگنال فیلتر شده در حوزه‌ی زمان، ifft (fft معکوس) طیف را محاسبه می‌کنیم. توجه داشته باشید ازآنجایی‌که پس از محاسبه‌ی طیف از fftshift برای به‌دست‌آوردن طیف متقارن استفاده کرده‌ایم، قبل از محاسبه‌ی ifft بایستی طیف را با استفاده از ifftshift (fftshift معکوس) به حالت اول برگردانیم و سپس ifft را محاسبه کنیم.

چون می‌دانیم سیگنال ما حقیقی هست پس از محاسبه‌ی ifft قسمت real سیگنال به‌دست‌آمده را انتخاب می‌کنیم.

 

فیلتر پایین گذر ایده‌آل

نمودار سیگنال y را رسم می‌کنیم.

فیلتر پایین گذر ایده‌آل

نمودار خروجی:

نمودار خروجی

یک سینوسی با فرکانس 20  هرتز رسم شده است (دو نوسان سیگنال 0.1 ثانیه است آنگاه فرکانس سیگنال برابر است با 2 / 0.1 = 20 Hz).

فیلتر میان‌گذر ایده‌آل

می‌خواهیم یک فیلتر میان‌گذر ایجاد کنیم که ناحیه‌ی عبور آن از 100 تا 150 هرتز باشد. برای تعریف فیلتر میان‌گذر کافی‌ست نتیجه‌ی دو آستانه‌گذاری را با یکدیگر and کنیم. فرکانس‌های بزرگ‌تر از فرکانس قطع پایین را انتخاب کرده و آرایه Boolean به‌دست‌آمده را با فرکانس‌هایی که از فرکانس قطع بالا کوچک‌تر هستند and می‌کنیم. به این صورت فرکانس‌های بین فرکانس قطع پایین تا بالا را انتخاب کرده و طیف فیلتر میان‌گذر ایده‌آل را به دست می‌آوریم.

فیلتر میان‌گذر ایده‌آل

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

فیلتر میان‌گذر ایده‌آل

نمودار خروجی:

نمودار خروجی

می‌توان مشاهده کرد در خروجی فقط فرکانس 130 هرتز  باقی مانده است.

تعریف آرایه فرکانس با fftfreq

موقع ترسیم طیف معمولاً آن را به‌صورت متقارن رسم می‌کنیم. برای به‌دست‌آوردن طیف متقارن در مثال‌های قبلی از fftshift استفاده کردیم. این تابع جای نیمه‌ی اول طیف را با نیمه‌ی دوم آن جابه‌جا می‌کند. با جابه‌جایی که انجام می‌دهد مقادیر طیف به‌صورت بازه‌ی متقارن -pi تا pi در آرایه قرار می‌گیرند. ازاین‌رو آرایه فرکانس‌های متناظر با مقادیر را از  -pi تا pi (یا -Fs/2 تا Fs/2) تعریف می‌کنیم.

شاید برای شما مفید باشد:
تاریخچه برد مدار چاپی (pcb)

وقتی که از fftshift استفاده می‌کنیم، موقع محاسبه‌ی ifft (برگشت به حوزه زمان) حتماً باید توجه داشته باشیم که طیف را به حالت اولیه در بیاوریم، عکس کار fftshift را انجام دهیم با استفاده از ifftshif و پس از آن ifft را محاسبه کنیم. در این حالت مقادیر موجود در آرایه را دو بار جابه‌جا می‌کنیم. برای اینکه بدون جابه‌جایی مقادیر در آرایه، پردازش موردنظر را انجام دهیم می‌توانیم آرایه‌ی فرکانس‌ها را به‌صورت هوشمندانه تعریف کنیم.

موقع ساخت آرایه‌ی فرکانس‌ها اگر نیمه‌ی اول آن را از 0 تا pi و نیمه‌ی دوم آن را از -pi تا 0 در نظر بگیریم، موقع ترسیم نمودار طیف به‌صورت متقارن نشان داده می‌شود، بدون اینکه جابه‌جایی در آرایه‌ی مقادیر fft انجام دهیم. به‌عبارت‌دیگر در این روش جابه‌جایی را در آرایه‌ی فرکانس انجام می‌دهیم (موقع تعریف مقادیر) و فرکانس‌های متناظر با مقادیر طیف را به‌نحوی در آرایه‌ی فرکانس قرار می‌دهیم تا موقع نمایش آن به‌صورت متقارن ترسیم شود. در این حالت چون آرایه‌ی مقادیر طیف را جابه‌جا نمی‌کنیم موقع محاسبه‌ی ifft نیازی به استفاده‌کردن از iffshift وجود ندارد؛ بنابراین بدون اینکه جابه‌جایی انجام دهیم می‌توانیم پردازش موردنظر را در حوزه‌ی فرکانس انجام دهیم.

برای اینکه آرایه فرکانس را به روش مطرح شده تعریف کنیم، از تابع fftfreq استفاده می‌کنیم. این تابع طول آرایه و فاصله‌ی بین نمونه‌ها (دوره تناوب نمونه‌برداری) را دریافت کرده و آرایه فرکانس را بر می‌گرداند.

مثال فیلتر میان‌گذر را این بار با استفاده از fftfreq پیاده‌سازی می‌کنیم. در این حالت موقع فیلترکردن (Y = X * bpf)  طیف‌ها به‌صورت نامتقارن هستند (از 0 تا 2*pi).

تعریف آرایه فرکانس با fftfreq

نمودار طیف فیلتر و سیگنال را ترسیم می‌کنیم. همان نتیجه‌ی قبلی را به دست می‌آوریم.

تعریف آرایه فرکانس با fftfreq

نمودار خروجی:

نمودار خروجی

اگر نمودار دامنه طیف سیگنال و فیلتر را بدون ارسال آرایه فرکانس رسم کنیم، طیف به‌صورت نامتقارن (در بازه‌ی 0 تا 2*pi)  رسم می‌شود.

نمودار خروجی

نمودار مقادیر آرایه‌ی فرکانس را رسم می‌کنیم. همان‌طور که انتظار داشتیم در نیمه‌ی اول آن مقادیر از صفر تا Fs/2 (در این مثال 500 هرتز)  قرار دارد و در نیمه‌ی دوم آن مقادیر از -Fs/2 تا صفر می‌باشد.

نمودار خروجی

فایل کدهای این آموزش را می‌توانید از لینک گیت‌هاب زیر دانلود نمایید:

https://github.com/sphrk/array_indexing_examples_in_python

اطلاعات
17
0
0
اشتراک و حمایت
profile نویسنده: Sepehr Kouzegaran متخصص الکترونیک

ویراستار: مریم میریان
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله