Skip Navigation Links
صفحه اصلی
ارتباط با ما Expand ارتباط با ما
همه مطالب
تصاویر Expand تصاویر
فرصت های شغلی
سوالات متداول
جستجو
     
 
پردازش سیگنال های دیجیتال با استفاده از نرم افزار متلب
در آموزش«پردازش سیگنال های دیجیتال با استفاده از نرم افزار متلب» سعی شده است تا با ارائه توامان مباحث نظری و مثال های کاربردی، توانایی های نظری و عملی دانش پژوه، در حوزه‌ی پردازش سیگنال به بالاترین حد ممکن رسیده و همچنین با کسب دیدی جامع، بتواند از مهارت های کسب شده، در تمامی حوزه های مرتبط استفاده نماید.


بخش اول

Show_deconv_ex_a1

این فایل، مثالی برای محاسبه کانولوشن دو سیگنال طول محدود با استفاده از دستور ()conv است. این دستور برای محاسبه ­ی کانولوشن دو سیگنال طبق دستور

C=conv(A,B)

محاسبه می­ شود که در آن A و B بردارهای حاوی نمونه های سیگنال‌ها هستند که می­ توانند در فرمت single , float ویا double باشند. لازم به ذکر است که طول بردار C برابر خواهد بود با مجموع طول دو بردار منهای یک. با دستور ()stem نیز، نمونه ها به صورت گسسته رسم می شود.

 

Show_deconv_ex_a2

در این فایل، مثال مربوط به محاسبه عکس کانولوشن نشان داده شده است. از دستور ()deconv برای این کار استفاده شده است. در حالت کلی داریم y=conv(x,h) + g که با داشتن خروجی و یکی از ورودی­ ها (h یا x) می­توان ورودی دیگر و بردار g را محاسبه کرد. لازم به یادآوریست که بردار g تنها در سیستم­های  LTI برابر صفر می­ باشد.

 

Show_fft_ex_b1

در این فایل، برای دستور fft مثالی آورده شده است که در آن تبدیل فوریه سیگنال سینک را مشاهده می کنید.

Y = fft(X,n)

دستور fft ، Fast Fourier Transform سیگنال x را با در نظر گرفتن تعداد نقاط n محاسبه می کند.به نوعی n بیان می‌دارد که DFT چند نقطه ای مد نظر است. وارد کردن ورودی دوم ضروری نیست. از آنجا که دستور fft مقدار محاسبه شده را برای بازه ۰تا ۲pi نمایش می دهد با استفاده از دستور fftshift می توان مقدار مورد نظر را در بازه pi- تا pi مشاهده کرد. نکته مهم این است که برای اجرای دستور ifft (فوریه معکوس) روی خروجی این تابع، خروجی باید مجددا به حالت ۰ تا ۲pi برگردد. در نتیجه لازم است که یک بار دیگر از دستور fftshift استفاده گردد. همچنین با توجه به اینکه تبدیل فوریه در حالت کلی مختلط می‌باشد برای رسم اندازه‌ی آن باید از دستور abs استفاده کنیم تا اندازه تبدیل فوریه رسم گردد.

 

Show_fft_ex_b2

مثال دیگری از دستور‌های fft و fftshift می‌باشد. در این فایل تبدیل فوریه سیگنال توان دوم سینک را مشاهده می کنیم.

 

Show_ifft_ex_b3

در این فایل، هدف محاسبه fft معکوس با استفاده از دستور ifft است.

y = ifft(X,n)

اگر x، یک سیگنال دلخواه باشد، n نشان دهنده این است که تبدیل فوریه گسسته معکوس چند نقطه ای باشد، با استفاده از دستور ifft می توان fft معکوس آنرا محاسبه کرد. که x همان fft مذکور است. در اینجا نیز وارد کردن ورودی دوم ضروری نیست.

 

Show_fftofsin_b4

مثال دیگری از دستور fft و fftshift می‌باشد. در این فایل، نیز شاهد تبدیل فوریه سیگنالی هستیم، که حاصل از جمع دو سیگنال سینوسی با فرکانس های مختلف و نیز ضرایب ۱ و ۵ است.

 

Show_fftofsin_denoising_ex_b5

مثالی از محاسبه fft و سپس ifft می‌باشد. در این فایل سیگنال اصلی با سیگنال نویز با دامنه کم جمع شده است. با توجه به اینکه فاصله بین –pi تا +pi با فاصله ۰٫۰۵ نمونه­ گیری شده است ، در تبدیل ورودی حدودا ۱۲۶ نقطه خواهیم داشت که فرکانس بالا در تابع fft در نقطه ۶۳ ظاهر می­ شود که برای حذف نویز فاصله ۴۰-۱۲۶ تا ۴۰+۱۲۶ صفر در نظر گرفته می­ شود. پس از تبدیل فوریه گرفتن و عبور دادن سیگنال از فیلتر، تبدیل فوریه معکوس گرفته ایم که شاهد این هستیم که دیگر نویزی روی سیگنال سینوسی اصلی وجود ندارد.

 

Show_downsamp_ex_c1

در این فایل، ابتدا برداری متناهی از عناصر به نام x تعریف شده است. با استفاده از دستور ()downsample، از هر ۲ نمونه یک نمونه را برداشته و دیگری را حذف می‌کنیم.

با دستور

downsample(x,n)

تعداد نمونه ها به ۱/n کاهش می یابد. یعنی از هر n نمونه، یکی را می‌گیریم و بقیه را رها می کنیم. تفاوت این دستور با decimate در این است، که در اینجا دیگر فیلتر ضد تداخل نداریم و ممکن است تداخل رخ دهد.

از دستور axis برای مشخص کردن ابتدا و انتهای محور‌های افقی و عمودی استفاده می­ شود.

 

Show_downsamp_ex_c2

در این فایل، تابع سینک در فاصله ۲۰- تا ۲۰ با دوره تناوب T=0.3 نمونه برداری شده است. پس از downsample با نرخ ۲ مشاهده می کنیم که این سیگنال در نزدیکی لبه تداخل قرار می گیرد. حتی تا حدودی دو سمت انتهایی سیگنال دچار تداخل جزیی شده است.

 

Show_decimate_ex_c3

در این فایل، به دستور مربوط به کاهش نرخ نمونه برداری پرداخته شده است.

y=decimate(x,r)

با استفاده از این تابع می توان نرخ نمونه برداری سیگنال x را با ضریب ۱/r کاهش و یا پریود نمونه برداری را با نرخ r افزایش داد. می توان گفت با استفاده از این دستور تبدیل فوریه به نسبت r پهن تر و دامنه ی آن ۱/r می شود. نکته ی مهم در مورد این دستور داشتن فیلتر ضد تداخل به طور ضمنی در آن است. یعنی ابتدا سیگنال ورودی از فیلتر عبور می کند تا الیاسینگ زمانی (تداخل زمانی) رخ ندهد، سپس خروجی فیلتر ضد تداخل است که کاهش نرخ داده می شود.

 

Show_ifft_2_ex_c4

در این فایل، نیز همان اعمال فایل قبلی صورت گرفته است ولی در اینجا نرخ کاهش ۸ به کار رفته است و با مشاهده خروجی و معکوس فوریه، شاهد این هستیم که تداخل رخ داده است و سیگنال، شکل اولیه خود را از دست داده است.در صورتی که اگر از فیلتر ضد تداخل استفاده می­ شد، میزان اعوجاج در سیگنال خروجی کاهش می­ یافت.

 

Show_ifft_3_ex_c5

در این فایل، همان دستورات فایل قبلی انجام شده است، با این تفاوت که در اینجا به جای downsample از decimate استفاده شده است که در آن فیلتر ضد تداخل وجود دارد و در صورت رخ دادن اعوجاج اطلاعات فرکانس‌های بالا تر فقط از بین می‌روند و دیگر دچار تداخل نمی‌شوند (معمولا از بین رفتن اطلاعات بهتر از تداخل است). شاهد این هستیم که در ضریب کاهش نرخ های پایین، مثلا ۲، پس از تداخل، فقط قسمت های انتهایی سیگنال در دو سمت دچار اعوجاج می شود و شکل اصلی سیگنال حفظ می شود. با بالا رفتن ضریب کاهش نرخ، کم کم بخش بیشتری از سیگنال غیر قابل استفاده می شود تا اینکه کلا شکل سیگنال از بین می رود.

 

Show_upsamp_ex_c6

در این فایل، به جای دستورات قبلی، از دستور ()upsample استفاده شده است که مشابه دستور ()interp می باشد و تعداد نمونه ها را افزایش می دهد، با این تفاوت که نمونه های افزایش یافته، صفر می‌باشد. یعنی تنها کاری که انجام می شود این است که تعدادی نمونه با مقدار صفر در میان نمونه های قبلی اضافه می شوند.

 

Show_upsamp_ex_c7

هدف این برنامه مشاهده Up Sampling در حوزه زمان و فرکانس است.مشاهده می شود که در حوزه فرکانس، شکل موج به تعداد ضریب Up Sampling تکرار می شود و پدیده Zero Padding نیز در معکوس فوربه این سیگنال قابل مشاهده است، که نشان دهنده اضافه کردن تعدادی صفر متناسب با ضریب Up Sampling است.

 

Show_interpol_ex_c8

در این فایل، با عملکرد دستور interp آشنا می شویم. در واقع عملکرد ()interp عکس عملکرد ()decimate می باشد. یعنی نرخ نمونه برداری را افزایش می دهد. با این دستور، نقاطی با مقادیر برون یابی شده میان نقاطی که داریم، اضافه می شود. این دستور معادل دستور ()upsamp و یک فیلتر میان گذر متناسب می‌باشد.

 

Show_interpol_ex_c9

در اینجا همچون مثال های قبلی عمل می کنیم با این تفاوت که به جای دستور decimate و downsample از interp استفاده می کنیم. یعنی به جای کاهش تعداد نمونه ها، تعداد نمونه ها افزایش می یابند.

دستور ()interp باعث باریکتر شدن طیف فرکانسی می شود. البته دامنه در اینجا به همان نسبت باریک شدن، افزایش می یابد.

 

Show_resample_ex_c10

در این مثال نیز کماکان از سینک استفاده شده، در مثال های قبلی استفاده شده است که با استفاده از دستور ()resample تغییر نرخ نمونه برداری با یک عدد غیر صحیح صورت می پذیرد. این نرخ را می توان به صورت نوشت که در L مبین افزایش نرخ نمونه برداری و M نشان دهنده کاهش نرخ نمونه برداری است. همانطور که در کد استفاده شده است، آرگومان اول در دستور ()resample، سیگنال ورودی در حوزه زمان (به صورت نمونه های گسسته در زمان)، آرگومان دوم L و آرگومان سوم M می باشد. این عمل در واقع برابر دو عمل جداگانه افزایش و کاهش نرخ، با نسبت نرخ های داده شده، می باشد.

 

Wavwr_ex_d1

در این فایل هدف خواندن یک فایل صوتی به کمک دستور wavread و سپس اجرای آن توسط دستور wavplay می باشد . در دستور wavplay آرگومان اول نشان دهنده برداری است که می خواهیم اجرا شود و در آن ضریب ۵ برای افزایش شدت صوت استفاده شده است. آرگومان دوم دستور هم، نشان دهنده sampling rate مورد نظر برای اجرای فایل است. در نهایت دستور wavwrite برای ذخیره فایل با sampling rate و نام دلخواه استفاده می شود. توجه شود که این دستورات به صورت تدریجی در حال جایگزین شدن با دستور audioplayer و دستورات هم گروه آن (مانند audiorecorder) می‌باشد که در آمورش تصویری به صورت کامل به آن‌ها پرداخته شده است.

 

Wavwr_ex_d2

در این فایل هدف مشاهده عمل decimation بر روی شکل موج یک فایل صوتی در حوزه فرکانس است که مشاهده می شود با decimate با ضریب ۴ شکل موج در حوزه فرکانس به علت aliasing پیش آمده کمی خراب شده که با گوش کردن به فایل صوتی با دستور wavplay هم ملاحظه می شود که کیفیت فایل صوتی خروجی به وضوح کاهش یافته است. توجه شود که این دستورات به صورت تدریجی در حال جایگزین شدن با دستور audioplayer و دستورات هم گروه آن (مانند audiorecorder) می‌باشد که در آمورش تصویری به صورت کامل به آن‌ها پرداخته شده است.

 

 

بخش دوم

Show_xcorr_ex_a1

در این برنامه، هدف نشان دادن تابع Cross Correlation دو تابع a و b است که توسط دستور xcorr انجام می شود. در ضمن برای نمایش توابع a و b و هم حاصل cross correlation آن ها در این برنامه از subplot استفاده شده است، بدین صورت که در subplot بالا هر دو تابع روی هم رسم شده و در subplot پایین حاصل cross correlation آن دو رسم شده است. ورودی های تابع subplot نیز به این صورت عمل می کنند که ورودی اول نشان دهنده تعداد سطر و ورودی دوم، تعداد ستون است و ورودی سوم نشان می دهد که می خواهیم شکل مورد نظر در کدام subplot رسم شود.

 

Show_xcov_ex_a2

دراین برنامه، هدف نشان ‌دادن تابع covariance دو تابع a و b است که توسط دستور xcov انجام می شود. تابع کوواریانس همچون کورولیشن است با این تفاوت که مقدار میانگین سیگنال ها از آن کم می شود و این باعث می شود که خروجی دارای بایاس نباشد.

 

Show_xcov_ex_a3

در این فایل هدف بررسی این نکته است که covariance دو تابع حاصلش با cross correlation آن دو تابع پس از کم کردن میانگین هر کدام از آن دو تابع برابر است برای این منظور ابتدا تابع covariance به کمک دستورxcov محاسبه شده و سپس cross correlation به کمک دستور xcorr ، ولیکن پس از کم کردن میانگین دو تابع محاسبه شده، ملاحظه می شود حاصل یکی است.

 

Show_filter_ex_b1

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

filter(b,a,x)

استفاده شده که در آن b ضرایب صورت فیلتر، a نیز ضرایب مخرج فیلتر و x سیگنالی است که می خواهیم فیلتر شود. ملاحظه می شود که پس از اعمال فیلتر تنها جمله مربوط به فرکانس پایین تر باقی می ماند. یعنی از سیگنالی که جمع دو سینوسی با ضرایب آرگومان ۳t و ۴۰t بود، تنها سیگنال با فرکانس پایین، باقی ماند. توجه شود که عملیات فیلتر کردن با دستور filtfilt نیز قابل اجراست (تغییر در فاز).

درصورت طراحی یک فیلتر تمام قطب، بردار b برابر با یک و در صورت طراحی یک فیلتر تمام صفر (فیلتر FIR) بردار a برابر با یک قرار داده می‌شود.

توجه شود که دستور filter معادل با xcorr پاسخ ضربه فیلتر در سیگنال ورودی می‌باشد.

 

Filter_butter_wx_b2

در این برنامه، می خواهیم اثر اعمال یک فیلتر Butterworth بر روی یک سیگنال تصادفی تولید شده را از روی طیف فرکانسی، بررسی کنیم. برای این منظور ابتدا یک سیگنال تصادفی x تولید شده و طیف فرکانسی آن رسم می شود، سپس با دستور butter ابتدا درجه فیلتر و بعد فرکانس قطع آن (که باید به صورت نرمالیزه از صفر تا یک باشد) را تعیین می کنیم تا ضرایب a , b فیلتر را به ما بدهد و سپس با دستور filter سیگنال را فیلتر کرده و طیف فرکانسی آن را رسم می کنیم و ملاحظه می‌شود تنها بازه فرکانسی مورد نظر از طیف سیگنال باقی مانده است.

 

Show_tf2zpk_ex_b3

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

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

1در روش نخست ضرایب داده شده است. همانگونه که از رابطه فوق مشاهده می شود، ضرایب a و b، ضرایب یک چندجمله ای هستند. بنابراین با استفاده از تابع ()root، می توان ریشه های این دو چندجمله ای را که همان صفر و قطب های تابع سیستم گسسته در زمان هستند، مشخص نمود.

در روش دوم می توان با استفاده از تابع tf2zpk مستقیماً از ضرایب داده شده، صفرها، قطب ها و بهره سیستم گسسته در زمان را مشخص کرد.

[Z,P,K] = tf2zpk(b,a);

ورودی های این تابع، ضرایب چندجمله ای های صورت و مخرج تابع سیستم و خروجی های این تابع، صفرها، قطب ها و بهره سیستم گسسته در زمان هستند.

در این فایل از دستور

[Z,P,K] = tf2zpk(b,a);

استفاده شده است که a و b به ترتیب ضرایب z در صورت و مخرج می­ باشد. در خروجی تابع z نشان دهنده صفرهای تابع تبدیل، p قطب­های تابع تبدیل و k نشانگر ضریب تابع تبدیل می­ باشد.

 

Show_zp2tf_tf2zp_ex_b4

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

حال اگر بخواهیم صفر و قطب های یک سیستم را در صفحه z نمایش دهیم از دستور zplane استفاده می‌نماییم. ورودی های این دستور می توانند ضرایب چندجمله ای های صورت و مخرج و یا صفر و قطب های موجود در یک تابع سیستم باشند و در حقیقت، نتیجه نمایش داده شده با استفاده از این دو نوع ورودی یکسان است.

 

Show_residuez_ex_b5

می توانیم تابع سیستم را به کسرهای جزیی بسط داده و بصورت زیر نمایش دهیم. در این صورت، تابع سیستم با استفاده از ضرایب موجود در بردارهای r و p و k مشخص می شوند.

2تبدیل ضرایب a و b به ضرایب موجود در بسط کسرهای جزیی با استفاده از تابع residuez انجام می‌شود. با استفاده از این تابع می توان ضرایب r و p و k را به ضرایب تبدیل نمود که در این صورت از دستور

[b,a] = residuez(r,p,k)

استفاده می شود.

 

Show_freqz_ex_c1

فیلتر باترورث مرتبه ۹ با فرکانس قطع ۰٫۴ طراحی شده و ضرایب a و b متناظر با تابع سیستم آن بدست می آید . با استفاده از دستور freqz، پاسخ فرکانسی فیلتر دیجیتالی که با استفاده از ضرایب a و b تعیین می شود، بدست می آید. استفاده از تابع

unwarp(angle)

نیز مقدار فاز بر حسب رادیان تصحیح شده را نمایش می دهد که این تصحیح، با اضافه شدن مضارب صحیحی از انجام می شود.

 

Show_phasez_ex_c2

در این فایل نیز همچون فایل قبلی فیلتری طراحی شده و در اینجا پاسخ فاز آن نمایش داده می شود. تابع

phasez(b,a)

زمانی که بدون خروجی استفاده شود، پاسخ فاز سیستم مستقیما نمایش داده می شود. تابع

freqz(b,a)

نیز در صورتی که بدون خروجی بیاید، پاسخ فاز و فرکانس را همزمان نشان می دهد. این دستورات پاسخ فاز را به صورت مرتب شده و بدون پرش نمایش می دهند و دیگر نیاز به استفاده از دستور unwrap نیست.

 

Show_invfreqz_ex_c3

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

freqz(b,a)

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

 

Show_imp_ex_c4

در این فایل، تابع ضربه توسط فیلتری، فیلتر شده و بصورت گسسته نمایش داده می شود. در انتهای این فایل، یکی از تولباکس های متلب تحت عنوان

fvtool(b,a)

مطرح شده است. این تولباکس، بسیاری از عملیات انجام شده روی سیگنال را در محیط GUI انجام می دهد که می توان به نمایش پاسخ دامنه، پاسخ فاز، نمایش صفر و قطب، نمایش پاسخ ضربه و پاسخ پله و … اشاره کرد. اگر ورودی سیستم تابع ضربه بوده و سیستم نیز فیلتر طراحی شده با ضرایب a و b باشد، خروجی دستور filter، پاسخ ضربه سیستم خواهد بود.

 

Show_filt_butter_imp_manuel_ex_c5

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

[b,a] = butter(n,Wn)

فیلتر باترورث مرتبه n با فرکانس قطع Wn طراحی می‌شود. خروجی این دستور، ضرایب چندجمله ای صورت و مخرج تابع سیستم مورد نظر می باشد.

می توان مستقیماً با استفاده از تابع

impz(b,a)

پاسخ ضربه سیستم را بصورت گسسته نمایش داد. ورودی های این تابع، ضرایب متناظر با چندجمله ای های صورت و مخرج تابع سیستم هستند.

 

Show_impz_ex_c6

در این فایل، پاسخ ضربه فیلتر نمایش داده می شود. فیلتر باترورثی شبیه فایل قبلی اما فرکانس قطع ۰٫۴ طراحی شده است. تابع impz بدون آرگومانهای خروجی، پاسخ ضربه را نمایش می دهد.

 

Show_stepz_ex_c7

در این فایل، پاسخ پله فیلتر نمایش داده می شود. باز هم همان فیلتر فایل قبلی طراحی شده است.تابع

stepz(b,a)

پاسخ پله فیلتر را با استفاده از ضرایب a و b نشان می دهد. این تابع بدون آرگومانهای خروجی، پاسخ پله را نمایش می دهد.

 

Show_zplan_ex_c8

در این فایل، هدف نمایش محل صفر و قطب های یک تابع سیستم درصفحه z است. حال با استفاده از تابع zplane می توانیم محل صفر و قطب های تابع تبدیل را روی صفحه z نمایش دهیم. ورودی های این تابع می توانند ضرایب a و b و یا صفر و قطب های تابع سیستم باشند. البته باید توجه کرد که ضرایب a و b بصورت بردارهای سطری و صفر و قطب های تابع سیستم بصورت بردارهای ستونی بعنوان ورودی به تابع zplane داده می‌شوند.

 

Filter_cheby1_ex_c9

[b,a] = cheby1(n,R,Wp)

با استفاده از این تابع، یک فیلتر پایین گذر چبی چف نوع یک مرتبه n با فرکانس لبه باند عبور Wp و ریپل پیک تا پیک R دسی بل در باند عبور طراحی می شود. البته می توان نوع فیلتر را نیز با اضافه کردن آرگومان ‘ftype’ به دیگر ورودی های این تابع، تعیین کرد. خروجی های این تابع، ضرایب a و b متناظر با چندجمله ای های صورت و مخرج تابع تبدیل سیستم است. همچنین در صورتی که آرگومان های خروجی به صورت [z,p,k] قرار بگیرد، می توان فیلتر چبی چف مرتبه n ای طراحی کرد که صفر و قطب ها و اندازه تابع تبدیل را در اختیار ما می گذارد. بنابراین اگر از دستور

zplane(b,a)

و یا

zplane(z,p)

استفاده کنیم، باید نتایج مشابهی بدست آوریم.

 

Show_grpdelay_ex_c10

برای بدست آوردن گروپ دیلی (Group Delay) از تابع

[gd,f] = grpdelay(b,a,n)

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

 

Show_window_ex_d1

در این فایل، پنجره های مستطیلی، همینگ و هنینگ ایجاد شده و به نمایش آمده است.

 

Show_window_2_ex_d2

این فایل، سیگنال ورودی x را از پنجره های مستطیلی و هنینگ عبور داده و ترسیم کرده است.

 

 

بخش سوم

Show_spectrum_ex_a1

در این برنامه، ابتدا با استفاده از دستور

pwelch(x)

چگالی طیفی توان سیگنال x را با روش “ولش” محاسبه کرده ­ایم. پس از آن با استفاده از دستور

periodogram(x)

چگالی طیفی توان سیگنال x را با همین متد محاسبه کرده­ ایم. سپس با استفاده از دستور

pburg(x,p)

الگوریتم برگ را که یک متد تخمین اسپکترال است، پیاده سازی کرده ­ایم که چگالی طیفی توان سیگنال x را به عنوان خروجی می ­دهد. پارامتر p در ورودی این دستور، درجه مدل تخمین autoregressive را نشان می­ دهد. در نهایت نیز با استفاده از دستور pmusic الگوریتم دسته­ بندی سیگنال چندگانه را که یک تخمین سودواسپکتروم سیگنال است پیاده ساری کرده­ ایم.

 

Show_spectrogram_ex_a2

در برنامه نوشته شده، هدف نمایش اسپکتروگرام یک سیگنال است که از ورودی دریافت کرده­ ایم.اسپکتروگرام سیگنال را با دستور

spectrogram(x, window, nover lap, nfft, fs)

رسم می­ کنیم. ورودی­ ها به ترتیب، نمونه‌های سیگنال، طول پنجره، تعداد نمونه­ هایی که بین دو قطعه همپوشانی دارند، تعداد نمونه­ هایی که برای محاسبه DFT به کار می­ رود، و فرکانس نمونه­ برداری می­ باشد. با اضافه کردن ‘yaxis’ به آرگومان های ورودی، می­توان جای محورهای زمان و فرکانس را عوض کرد.

 

Show_spectrogram_ex_a3

در برنامه نوشته شده، هدف نمایش اسپکتروگرام یک سیگنال کوسینوسی با فرکانس متغیر خطی است. ابتدا با استفاده از دستور

chirp(t,f0,t1,f1)

سیگنال کوسینوسی تولید می ­شود. ورودی ­t زمان نمونه­ ها، f0 فرکانس آنی در زمان صفر و f1 فرکانس آنی در زمان t1 را نشان می­ دهند. اسپکتروگرام سیگنال به دست آمده را با دستور

[S,F,T,P]=spectrogram(x, window, nover lap, nfft, fs)

رسم می­ کنیم. برای خروجی­ ها، S تبدیل فوریه زمان کوتاه سیگنال، T زمان­ هایی است که اسپکتروگرام برای آن محاسبه شده است و P ماتریس چگالی طیفی توان برای هر قطعه است.

 

Show_fvtool_b1

در این برنامه ابتدا با استفاده از دستور

butter(n,Wn)

یک فیلتر پایین گذر با درجه n و فرکانس قطع Wn طراحی کرده­ ایم. پس از آن با استفاده از دستور fvtool می­ توان جعبه ابزار FVTool باز کرد و پاسخ دامنه فیلتر دیجیتالی که با صورت کسر b و مخرج کسر a به دست آمده بود را نشان داد. همچنین با استفاده از FVTool می­توانیم پاسخ فاز، پاسخ ضربه، تاخیر گروهی، صفرها و قطب­ های فیلتر را نیز نشان دهیم.

 

Show_fdatool_b2

متن این برنامه تنها شامل یک دستور fdatool می­ باشد. FDATool یک جعبه ابزار طراحی و آنالیز فیلتر می ­باشد. با استفاده از این دستور می­توان انواع فیلترهای IIR و FIR را طراحی نمود. همچنین می­توان با اضافه، حذف یا حرکت دادن صفرها و قطب­ های یک فیلتر خصوصیات آن را تغییر داد.

 

Show_sptool_b3

در این برنامه ،تنها دستور sptool است که حائز اهمیت است. SPTool یک جعبه ابزار بزرگ پردازش سیگنال است که می­ توان به وسیله آن تمام کارهای طراحی و آنالیز فیلتر که با FDATool انجام می ­شود، همچنین کارهایی که با FVTool انجام می­ شود را انجام داد و هر اسپکترومی را مشاهده نمود. با استفاده از این جعبه ابزار می­توان به بسیاری از توابع آنالیز فیلتر و سیگنال در متلب دسترسی داشت.

 

Show_wvtool_b4

در این برنامه، ابتدا با استفاده از دستور

hann(L)

پنجره­ای متقارن از نوع پنجره هنینگ با طول L ایجاد می­ کند. پس از آن با دستور wvtool یک جعبه ابزار مشاهده پنجره­ ها باز می­ شود. با استفاده از این جعبه ابزار می­توان پنجره ­ای را که در ورودی دستور دریافت کردیم در حوزه زمان یا فرکانس مشاهده کنیم. دستور به صورت پیش فرض مجذور دامنه تبدیل فوریه پنجره را نشان می­ دهد.

 

Show_wintool_b5

متن این برنامه تنها شامل یک دستور wintool می­ باشد. WinTool یک جعبه ابزار طراحی و آنالیز پنجره می­ باشد. با استفاده از این دستور می­توان انواع پنجره ­های اسپکترال را طراحی و آنالیز نمود. این دستور به صورت پیش فرض پنجره همینگ با ۶۴ نقطه را باز می ­کند.

 

Show_poly_roots_c1

در این برنامه قصد داریم ریشه­ های یک چندجمله­ا ی را بیابیم. ابتدا ضرایب چندجمله ­ای را به ترتیب از ضریب بزرگترین درجه تا ضریب کوچکترین درجه ،که درجه صفر است را داخل یک بردار قرار می­ دهیم. پس از آن با استفاده از دستور

roots(c)

که ورودی آن بردار ضرایب است، ریشه­ های چندجمله­ ای را به عنوان خروجی دریافت می­ کنیم.

 

Show_poly_poly_c2

در این فایل، نحوه‌ی محاسبه ضرایب یک چند جمله‌ای با ریشه‌های معلوم به نمایش درآمده است. در این فایل همچنین نشان داده شده که این ضرایب به صورت استاندارد شده محاسبه خواهند شد. این بدان معنی است که ضریب جمله‌ی با بزرگترین توان همیشه برابر با ۱ خواهد شد.

 

Show_poly_polyval_c3

در این فایل، نحوه‌ی محاسبه‌ی مقدار یک چند جمله‌ای در مقادیر مختلف x (متغیر مستقل) پیاده سازی شده‌ است.

 

Show_poly_polyfit

در این فایل، با استفاده از تابع polyfit ضرایبی از چند جمله ای c از درجه­ ی ۳=n را پیدا می­ کند که با روش حداقل مربعات بر داده ­ها مماس شود. یعنی

c(x(i))

به

y(i)

مماس شود. خروجی این تابع، یک بردار سطری به طول ۴=n+1 است که ضرایب چند جمله ­ای را به صورت توان نزولی بیان می­ کند. سپس با استفاده از تابع polyval، مقدار چند جمله­ ای c را بر حسب x بدست می ­­آورد. در قسمت بعدی برنامه، برای

exp(x)

از توابع polyfit و polyval برای یافتن بهترین چندجمله­ ای مماس بر نمودار استفاده کردیم.

 

Show_cftool_ex1_c5

در این فایل و همچنین دو فایل بعدی (C5،C6 و C7) با استفاده از جعبه ابزار cftool در MATLAB می ­توان بهترین معادله­ ی دنبال کننده­­ ی یک تابع را پیدا کرد. در این جعبه ابزار، می­توان نمودارهای مختلفی را ایجاد کرد و از نظر دقت دنبال کردن نمودار اصلی، با هم مقایسه نمود.

در این فایل، تابع

Sin(x)

ترسیم شده است تا در GUI مربوط به cftool از آن استفاده شود.

 

Show_cftool_ex2_c6

در این فایل سیگنال ECG نویزی و یکسو شده ترسیم شده است تا در GUI مربوط به cftool از آن استفاده شود.

 

Show_cftool__ex3_c7

در این فایل یک چند جمله‌ای با ضرایب مشخص ترسیم شده است تا در GUI مربوط به cftool از آن استفاده شود.

 

Show_prony_c8

در این فایل، یک فیلتر باترورث IIR مرتبه­ ی ۴ با فرکانس قطع ۰٫۳ را طراحی کردیم و پاسخ ضربه­ ی این فیلتر را با دستور impz بدست آوردیم. سپس با روش طراحی فیلتر prony با فرمت زیر یک مدل IIR برای پاسخ ضربه­ ی فیلتر باترورث ارایه دادیم.

 

Show_AR_c9

در این فایل، از ECGDATA که داده ­ی تعریف شده در matlab است، استفاده کردیم و با لود کردن آن، پارامترهای مدل مرتبه­ ی ۲۰، AR را برای سیگنال نویزی شده­ ی ecg که همان noisyECG است را بدست آوردیم و با دستور fvtool پاسخ دامنه­ ی فیلتر دیجیتال را رسم می نماییم، که با استفاده از جعبه ابزار fvtool می­توان پاسخ فرکانسی، تاخیر گروه، پاسخ ضربه، پاسخ پله، نمودار صفر و قطب و ضرایب فیلتر را نشان داد. تابع

ar(y,n)

ضرایب مدل AR را برای ورودی y با درجه n تخمین می زند و ضرایب را در خروجی قرار می دهد. با دستور pweltch نیز، می توان از روش weltch برای محاسبه ­ی چگالی طیف توان در سگمنت ­های مختلف استفاده کرد.

 

Show_modulate_d1

در این فایل، روی سیگنال x یک بار مدولاسیون فرکانسی و یک بار مدولاسیون دامنه انجام داده ایم. هنگام استفاده از تابع modulate در آرگومان­های ورودی سیگنال x، فرکانس حامل fc ، فرکانس نمونه­ برداری fs و روش مدولاسیون را بایستی وارد نماییم.

y = modulate(x,fc,fs,’method’)

چنانچه روش مدولاسیون وارد نشود، MATLAB به صورت پیش فرض از “am” یعنی مدولاسیون دامنه استفاده می­ کند.

 

Show_demodulate_d2

پس از مدولاسیون که در فایل قبل انجام شد، برای بازیابی سیگنال اولیه از دمدولاسیون استفاده می کنیم. هنگام استفاده از تابع demod در آرگومان­های ورودی، سیگنال y که مدوله شده­ ی سیگنال x است، فرکانس حامل fc، فرکانس نمونه­ برداری fs و روش مدولاسیون را بایستی وارد نماییم.

x=demod(y,fc,fs,’method’)

چنانچه روش مدولاسیون وارد نشود، MATLAB به صورت پیش فرض از “am” یعنی مدولاسیون دامنه استفاده می­ کند.



1395/04/21 10:42:19 AM

نوشته شده توسط مجتبی شکوه

  نظرات شما  
   
 
نام:  
ن خانوادگی:  
تلفن:  
متن:  
   
   

    نظرات شما