در قسمت قبل با انواع روشهای indexing آرایهها آشنا شدیم. در این قسمت از آموزش میخواهیم با استفاده از indexing آرایه نحوه آستانهگذاری یک سیگنال و به اشباع رفتن سیگنال (برش یا محدودکردن دامنهی سیگنال) را شبیهسازی کنیم.
کدهای پایتون نوشته در این آموزش، در یک فایل ژوپیتر نوتبوک نوشته شدهاند. لینک دانلود فایل ژوپیتر نوتبوک مربوط به این آموزش در انتهای صفحه قرار داده شده است.
برای تعریف آرایهها کتابخانه numpy و برای ترسیم نمودار کتابخانه matplotlib را import میکنیم.
![]()
نرخ نمونهبرداری را 1000 در نظر گرفته و در بازه 0 تا 1 ثانیه، یک سیگنال سینوسی با فرکانس 5 هرتز تعریف میکنیم. برای ساخت آرایه زمان (t) از arange استفاده کرده و از 0 تا 1 را با گام 1 بر Fs (دوره تناوب نمونهبرداری) پیش میرویم. سپس در این نمونههای زمانی مقدار تابع سینوسی با فرکانس 5 هرتز را محاسبه میکنیم. در انتها با استفاده از plt.plot نمودار آن را رسم میکنیم.

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

میخواهیم از سیگنال x که تعریف کردیم، بازه زمانی 300 تا 500 میلیثانیه آن را انتخاب کنیم. برا اینکار از روی آرایه t یک آرایهی ماسک ایجاد میکنیم. از t زمانهایی که بزرگتر از 300 میلیثانیه هستند را انتخاب کرده و با زمانهایی که کمتر مساوی 500 میلیثانیه هستند and میکنیم.

در ماسک بهدستآمده، در اندیس زمانهای 300 تا 500 میلیثانیه مقدار True و در بقیه اندیسها مقدار False قرار میگیرد. از این آرایه استفاده کرده و بازه موردنظر از سیگنال x را به صورت x[mask] بهدست میآوریم. زمان مربوط به این نمونهها را نیز از آرایه t بهدست آورده و در t2 ذخیره میکنیم. سپس نمودار x و x2 (بازه موردنظر از x) را در یک نمودار رسم میکنیم.

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

میتوان مشاهده کرد سیگنال در بازه موردنظر بهدرستی انتخاب شده (منطبق بر سیگنال اصلی) و با رنگ قرمز ترسیم شده است.
میخواهیم سیگنال سینوسی که تعریف کردیم را آستانهگذاری کرده و مقادیر کمتر از 0.25 را انتخاب کنیم. نمودار سیگنال، آستانه و آرایهی ماسک را ترسیم میکنیم.

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

از روی نمودار میتوان مشاهده کرد مقدار ماسک در جاهایی که سیگنال از آستانه کمتر است (در شرط آستانهگذاری که انجام دادیم صدق میکند) مقدار آن 1 و در بقیه ی جاها مقدار آن صفر می باشد.
مقادیری موجود در آرایه ماسک از نوع Boolean (True و False) میباشد. اگر مقدار True را به عدد صحیح (int) تبدیل کنیم مقدار 1 و معادل صحیح False هم صفر به دست میآید.

به همین دلیل در نمودار ماسک رسم شده، جاهایی که مقدار آرایه ماسک True هست 1 و جاهایی که مقدار ماسک False هست صفر ترسیم شده است.
میتوان از آرایه ماسک استفاده کرده و قسمتهایی از سیگنال که در شرط آستانهگذاری صدق میکنند را انتخاب کنیم.

میتوان مقادیر قسمت انتخاب شده از سیگنال را تغییر داد. آرایه x را کپی کرده و در y قرار میدهیم (میخواهیم تغییر را در y اعمال کرده و سپس نمودار x و y را رسم کنیم). با استفاده از آرایه ماسک قسمت موردنظر از y را انتخاب کرده و مقدار همه مقادیر انتخاب شده را به صفر تغییر میدهیم (y[mask] = 0).

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

میتوان از روی سیگنال سینوسی، سیگنال مربعی متناوب با چرخه کاری 50 درصد را تعریف کرد. برای اینکار ابتدا سیگنال سینوسی مورد نظر را با فرکانس مطلوب (فرکانس مورد نظر برای سیگنال مربعی) تعریف می کنیم. سپس سیگنال سینوسی را با مقدار صفر آستانه گذاری کرده و سیگنال مربعی را بدست میآوریم. به عبارت دیگر از آرایهی Boolean بدست آمده به عنوان سیگنال مربعی استفاده میکنیم. میتوانیم بعد از بدست آوردن آرایهی Boolean، مقادیر آن را با استفاده از astype به نوع integer تبدیل کنیم.
در مثال زیر یک سیگنال مربعی با فرکانس 5 هرتز ایجاد می کنیم.

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

برای تعریف سیگنال PWM با چرخه کاری مطلوب، آرایهی زمان را تعریف کرده و مقدار باقیماندهی مقادیر آرایهی زمان را به دوره تناوب PWM موردنظر را حساب میکنیم و در آرایهی cnt قرار میدهیم. سپس چرخه کاری موردنظر را به دوره تناوب PWM ضرب کرده و آرایهی کمکی cnt که به دست آوردیم را با این مقدار آستانهگذاری میکنیم. سیگنال بهدستآمده، پالس PWM با چرخه کاری موردنظر خواهد بود.
در مثال زیر پالس PWM با فرکانس 3 هرتز و چرخه کاری 10 درصد ایجاد می کنیم.

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

در مثال زیر پالس PWM با فرکانس 7 هرتز و چرخه کاری 80 درصد ایجاد می کنیم.+

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

میخواهیم با استفاده از آستانهگذاری به اشباع رفتن سیگنال را پیادهسازی کنیم. با این کار دامنه سیگنال را بین دو آستانه محدود میکنیم. ابتدا دو آستانه (آستانه بالا و پایین) در نظر میگیریم. میخواهیم جاهایی که مقدار سیگنال از آستانه بالا بیشتر است مقدار سیگنال برابر با مقدار آستانه بالا شود و جاهایی که سیگنال از آستانهی پایین کمتر هست مقدار سیگنال برابر با مقدار آستانه پایین شود. مقادیری از سیگنال که بین دو آستانه قرار دارد تغییر نمیکنند.
در مثال زیر مقدار آستانهی بالا 0.75 و مقدار آستانهی پایین -0.25 در نظر گرفته شده است. برای هر آستانه ابتدا ماسک را به دست آورده و سپس آن قسمت از آرایهی سیگنال را انتخاب میکنیم و مقدار آنها را تغییر میدهیم.

نمودار سیگنال ورودی و هر دو آرایهی ماسک را بهصورت زیر رسم میکنیم.

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

نمودار سیگنال ورودی و سیگنال اشباع شده را بهصورت زیر رسم میکنیم.

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

میتوان مشاهده کرده دامنهی سیگنال خروجی (y) به بازهی -0.5 تا 0.75 محدود شده است.
برای اشباع یک تابع بهصورت زیر مینویسیم.

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