سلام.
شما از کلاس (class) با نام phased.LinearFMWaveform استفاده کرده اید، بنابراین hw که ساخته شده است، یک شیء (object) می باشد. بنابراین hw نمونه های شکل موج نیست که بتوانید دستورات دلخواه خود را بر روی ان اجرا کنید بلکه تنها دستورات خاص مربوط به کلاس phased.LinearFMWaveform را باید برای آن به کار ببرید.
برای درک بهتر این موضوع، این کدها را اجرا می کنیم (همان برنامه شما است و تنها علامت ; را از انتهایش برداشته ایم تا ببینیم متلب چه عبارتی را برای آن در خروجی نمایش می دهد) :
خروجی متلب به صورت زیر خواهد بود :
همان طور که مشاهده می کنید، یک شیء است که دارای یک سری ویژگی های خاص خود می باشد.
اما حالا برویم سراغ هدف اصلی که داشتیم. باید نمونه های شکل موج را در یک بردار داشته باشیم. برای این منظور، دستور step را باید به کار ببریم (برای کلاس phased.LinearFMWaveform). سپس کدهای لازم برای صفر کردن به صورت متناوب را می نویسیم.
کل کدها متلب مورد نیاز، به صورت زیر می باشد :
از دستور step استفاده کرده ایم تا نمونه های شکل موج را در بردار با نام wave ذخیره کنیم.
ابتدا باید ببینیم که 0.1 میلی ثانیه، برابر چه تعداد از نمونه های شکل موج خواهد بود. این تعداد را محاسبه نموده و در متغیر number_of_each_period ذخیره کرده ایم.
مهمترین بخش کدها، حلقه for می باشد که در آن، بر اساس تعداد نمونه های مربوط به هر 0.1 میلی ثانیه از شکل موج، به صورت تناوبی، مقادیر را صفر می کنیم. دستور fix برای گرد کردن اعداد اعشاری به سمت صفر به کار می رود (اگر از دستور round استفاده می کردیم جواب برنامه غلط میشد). دستور mod نیز باقیمانده تقسیم دو عدد را بر می گرداند. کدهای حلقه for را باید با دقت بخوانید تا متوجه شوید که چگونه تشخیص داده ایم که کدام نمونه ها باید صفر شوند.
و نتایج برنامه :
شکل موج مربوط به hw :
شکل موج wave (پس از استفاده از دستور step) :
شکل موج نهایی که به آن نیاز داشتیم :
شما از کلاس (class) با نام phased.LinearFMWaveform استفاده کرده اید، بنابراین hw که ساخته شده است، یک شیء (object) می باشد. بنابراین hw نمونه های شکل موج نیست که بتوانید دستورات دلخواه خود را بر روی ان اجرا کنید بلکه تنها دستورات خاص مربوط به کلاس phased.LinearFMWaveform را باید برای آن به کار ببرید.
برای درک بهتر این موضوع، این کدها را اجرا می کنیم (همان برنامه شما است و تنها علامت ; را از انتهایش برداشته ایم تا ببینیم متلب چه عبارتی را برای آن در خروجی نمایش می دهد) :
کد:
hw = phased.LinearFMWaveform('SweepBandwidth',1e5,'PulseWidth',1e-4)
خروجی متلب به صورت زیر خواهد بود :
کد:
hw =
Description: 'Linear FM pulse waveform'
SampleRate: 1000000
PulseWidth: 0.0001
PRF: 10000
SweepBandwidth: 100000
SweepDirection: 'Up'
Envelope: 'Rectangular'
OutputFormat: 'Pulses'
NumPulses: 1
همان طور که مشاهده می کنید، یک شیء است که دارای یک سری ویژگی های خاص خود می باشد.
اما حالا برویم سراغ هدف اصلی که داشتیم. باید نمونه های شکل موج را در یک بردار داشته باشیم. برای این منظور، دستور step را باید به کار ببریم (برای کلاس phased.LinearFMWaveform). سپس کدهای لازم برای صفر کردن به صورت متناوب را می نویسیم.
کل کدها متلب مورد نیاز، به صورت زیر می باشد :
کد:
clear all
close all
clc
pulse_duration=1e-4; % second
hw = phased.LinearFMWaveform('SweepBandwidth',1e5,...
'PulseWidth',pulse_duration);
plot(hw)
wave=step(hw);
figure
plot(real(wave))
wave_length=length(wave)
number_of_each_period=wave_length/(1e-3/pulse_duration)
for nn=1:wave_length
if (mod(fix(nn/number_of_each_period),2)==1)
wave(nn)=0;
end
end
figure
plot(real(wave))
از دستور step استفاده کرده ایم تا نمونه های شکل موج را در بردار با نام wave ذخیره کنیم.
ابتدا باید ببینیم که 0.1 میلی ثانیه، برابر چه تعداد از نمونه های شکل موج خواهد بود. این تعداد را محاسبه نموده و در متغیر number_of_each_period ذخیره کرده ایم.
مهمترین بخش کدها، حلقه for می باشد که در آن، بر اساس تعداد نمونه های مربوط به هر 0.1 میلی ثانیه از شکل موج، به صورت تناوبی، مقادیر را صفر می کنیم. دستور fix برای گرد کردن اعداد اعشاری به سمت صفر به کار می رود (اگر از دستور round استفاده می کردیم جواب برنامه غلط میشد). دستور mod نیز باقیمانده تقسیم دو عدد را بر می گرداند. کدهای حلقه for را باید با دقت بخوانید تا متوجه شوید که چگونه تشخیص داده ایم که کدام نمونه ها باید صفر شوند.
و نتایج برنامه :
شکل موج مربوط به hw :
شکل موج wave (پس از استفاده از دستور step) :
شکل موج نهایی که به آن نیاز داشتیم :
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.