no-img
انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب

انجام پروژه متلب | متلب| پروژه متلب | آموزش متلب | انجام پایان نامه | پروژه پایانی |matlab |matlabi |matlab project | انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب


انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب
مطالب ویژه
گزارش خرابی لینک
اطلاعات را وارد کنید .

ادامه مطلب

انجام پروژه متلب | متلب| پروژه متلب | آموزش متلب | انجام پایان نامه | پروژه پایانی |matlab |matlabi |matlab project
zip
آگوست 30, 2019
۰ تومان
5 فروش
رایگان – خرید

انجام پروژه متلب | متلب| پروژه متلب | آموزش متلب | انجام پایان نامه | پروژه پایانی |matlab |matlabi |matlab project


مقدمه

متلب:یکی از جعبه ابزارهای پرکاربرد MATLAB جعبه ابزار پردازش سیگنال است که مجموعه ای غنی از توابع مفید برای پردازش سیگنال می باشد . مثلاً از این جعبه ابزار می توان در تشخیص صدا و پردازش صوت استفاده کرد . جعبه ابزار پردازش سیگنال مجموعه ای از ابزارهای موجود در محیط محاسباتی عددی MATLAB است که محدوه وسیعی از اعمال پردازش سیگنال از تولید شکل موج گرفته تا طراحی و پیاده سازی فیلتر ، مدل سازی پارامتری و تحلیل های طیفی را شامل می شود . این جعبه ابزار دو نوع مختلف ابزار را فراهم کرده است ، یکی توابع قابل استفاده در پنجره دستورات که شامل تحلیل فیلترهای آنالوگ و دیجیتال ، پیاده سازی فیلترهای دیجیتال ، طراحی فیلترهای دیجیتال FIR و IIR ، طراحی فیلترهای آنالوگ ، گسسته سازی فیلترها ، تبدیلات پنجره های طیفی ، آنالیز کپستروم ، آنالیز طیف و پردازش آماری ، مدل سازی پارامتری ، پیشگویی خطی و تولید موج می باشد و دیگری مجموعه متقابلی از GUI ها برای تحلیل و طراحی فیلتر (FDATool) تحلیل و طراحی پنجره (WVTool) ، تحلیل و رسم سیگنال ها و فیلتر کردن سیگنال ها (SPTool) است .

 

متلب

 

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

طراحی و پیاده سازی فیلترها

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

پایه ریاضی فیلتر کردن ، کانولوشن است . تابع conv یک عمل استاندارد کانولوشن یک بعدی با استفاده از دو بردار ورودی را انجام می دهد. برای پرادازش سیگنال های دو بعدی از تابع conv2 استفاده می شود . در زیر مثالی از این حالت را مشاهده می کنید

<<conv([111]،[۱۱۱])

Ans=1 2 3 2 1

۱    ۲    ۳   ۲   ۱

 

 

 

متلب:خروجی یک فیلتر دیجیتال (k) y برابر با کانولوشن ورودی آن ، (k)x ، در پاسخ ضربه فیلتر (k)h ، است . در صورتی که  (k)h و (k)x دارای طول محدود باشند ، پیاده سازی فیلتر با استفاده از دستور conv امکان پذیر است . به مثال زیر توجه کنید .

<<x = rand(5,1) ;                             %A random vsctor of length 5

<<h = ]1 1 1 1[/4;                           %Length 4 averaging filter

<<y = conv(h,x) ;

 

 

 

 

 

متلب

در حالت کلی تبدیل (z) Y به تبدیل z ورودی آن به شکل زیر مربوط است :

<<b = 1;                                    %Numerator

<<a = ]1 -0.9[  ;                      %Denominator

>>y=filter(b,a,x) ;

که در آن (z)H تابع تبدیل فیلتر است . ضرایب در دو بردار که یکی مربوط به صورت و دیگری مربوط به مخرج است ذخیره می شوند . فیلترها به راحتی به این شکل قابل پیاده سازی هستند . برای مثال ضرایب یک فیلتر تک قطبی پایین گذر به شکل زیر است .

 

 

طول y به دست آمده در بالا برابر با طول x بوده و فیلتر با ساختار ترآن هاده نوع II (transposed direct- fromII) پیاده سازی می شود . در صورتی که (۱)a با ۱ نباشد ، همه ضرایب بر آن تقسیم می شوند .

 

توابع موجود برای فیلتر کردن

پیاده سازی بانک فیلتر چند نرخی : تابع upfirdn نرخ نمونه برداری یک سیگنال را با ضریب P/Q تغییر می دهد . این سیستم نتیجه سه سیستم افزایش نرخ نمونه برداری با ضریب P ، یک فیلتر FIR و کاهش نرخ نمونه برداری با ضریب Q است که به طور سری در کنار هم قرار گرفته اند . برای مثال برای تغییر نرخ نمونه برداری سیگنال از KHz 44.1 به KHz 48 ابتدا کم ترین نسبت P/Q را محاسبه می کنیم .

<< d = gcd (48000,44100) ;     P = 48000/d ;                     Q = 44100/d ;

 

 

 

<<y = upfirdn(x,h,P,Q) ;

که P = 160 و Q = 147 نتیجه می دهد . حال با دستور زیر تابع نرخ نمونه برداری انکان پذیر می شود .

 

 

سایر توابعی که کار فیلترسازی چند نرخی را انجام می دهند ، عبارتند از : resample ، interp و decimate .

پیاده سازی فیلترهای غیرعلی با فاز صفر : در فیلترای FIR می توان فیلترهای با فاز خطی طراحی کرد که با اعمال داده ها ، نمونه ها را با یک عدد ثابت تأخیر دهد . در حالی که در فیلترهای IIR اعوجاج فار معمولاً به صورت شدید غیرخطی است در حالت استفاده از تابع filtfilt این اعوجاج تا حدودی حذف می شود .

برای مثال برای یک سیگنال به طول ۱ ثانیه که با نرخ ۱۰۰Hz نمونه برداری شده و دو مؤلفه سینوسی در ۳ و ۴۰Hz دارد داریم :

<<fs = 100 ;                    t= 0:1/fs:1 ;

<<x=sin(2*pi*t*3)+0.25*sin(2*pi*t*40) ;

 

 

 

حال یک فیلتر FIR (متوسط گیر ۱۰نقطه ای) را با هر دو تابع filter و filtfilt تولید کنید .

<<b = ones(1,10)/10;

<< y = filtfilt(b,1,x) ;

<< yy = filter(b,1,x) ;

<< plot(t,x,t,y,’- – ‘,t,yy,’:’) ;

 

 

متلب

 

مشاهده می شود که هر دو فیلتر ، البته با کمی تفاوت مولفه ۴۰Hz را حذف کرده اند . خط منقطع (filtfilt) با سیگنال سینوسی هم فاز است در حالی که خط نقطه چین (filter) نسبت به سیگنال اصلی تاخیر فازی در حد ۵ نقطه دارد . برای بهترین نتایج باید طول داده حداقل سه برابر درجه فیلتر باشد .

<< n = length(x)

<< y = ifft(fft(x).*fft(b,n)./fft(a,n)) ;

 

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

 

 

نتیجه حاصل عیناً مشابه نتیجه اعمال فیلتر است . البته برای داده های طولانی این روش بسیار ناکارآمد است . برای فیلترهای FIR ، می توان داده های طولانی را به طول کوتاه تر که برای محاسبات fft بهینه تر باشند تفکیک کرد . تابع y = fftfilt(b,x)  ازoverlap add method برای داده های طولانی استفاده می کند و خروجی آن مشابه filter(b,1,x) است.

پاسخ ضربه : چندین راه برای تولید یک دنباله ضربه در MATLAB وجود دارد که ساده ترین آن به صورت دستور   imp=[1;zeros(49,1)]است . پاسخ پله فیلتر با b=1 و         [۱  -۰٫۹] = a به شکل زیر است :

<<h = filter(b,a,imp) ;

 

 

 

 

یک روش ساده برای مشاهده پاسخ ضربه استفاده از دستور fvtool(b,a) است . با این کار پنجره fvtool  باز می شود .

 

>>]b,a[=cheby 1(12,0.5,200/500) ;

>>]h,f[=freqz(b,a,256,1000) ;

 

پاسخ فرکانسی : در حوزه دیجیتال ، تابع freqz از یک الگوریتم مبتنی بر fft  برای محاسبه تبدیل z پاسخ فرکانسی یک فیلتر دیجیتال استفاده می کند . دستورfreqx(b,ap)=  [h,w]  پاسخ فرکانسی مختلط p نقطه ای فیلتر دیجیتال را می دهد . در ساده ترین حالت freqz ضرایب صورت و مخرج و یک عدد طبیعی P که نشان دهنده تعداد نقاطی است که پاسخ فرکانسی باید در آنها محاسبه شود را می گیرد و در خروجی یک پاسخ فرکانسی مختلط در بردار h و نقاط فرکانس واقعی را بردار w بر حسب rad/s می دهد این تابع      می تواند پارامترهای دیگری را نیز مانند فرکانس نمونه برداری و یا برداری آن نقاط فرکانسی دلخواه به عنوان ورودی بگیرد مثال زیر پاسخ فرکانسی ۲۵۶ نقطه ای برای یک فیلتر چیبی چف نوع یک را فراهم می کند . در دستور freqz  فرکانس نمونه بردار fs برابر ۱۰۰۰ تعیین شده است.

 

 

چون لیست پارامترها شامل فرکانس نمونه برداری می شود ، تابع freqz یک بردار f که شامل ۲۵۶ نقطه فرکانسی بین ۰ تاfs/2  می شود را در بر دارد . توجه شود که این جعبه ابزار از این اصل استفاده می کند که فرکانس واحد برابر فرکانس نایکوئیست بوده که به صورت نصف فرکانس نمونه برداری تعریف می شود . برای مثال برای یک سیستم با فرکانس قطع ۱۰۰۰Hz ، فرکانس ۳۰۰Hz برابر ۳۰۰/۵۰۰=۰٫۶ می شود . برای برگرداندن فرکانس نرمالیزه شده به فرکانس زاویه ای حول دایره واحد ، مقدار آن  ضرب می شود و برای برگرداندن فرکانس نرمالیزه شده به هرتز ، مقدار آن در نصف فرکانس نمونه برداری ضرب می شود . اگر تابع freqz بدون پارامتر خروجی صدا زده شود ، دامنه و فاز را بر حسب فرکانس رسم می کند . برای مثال یک فیلتر باتروث پایین گذر با فرکانس قطع ۴۰۰Hz بر پایه فرکانس نمونه برداری ۲۰۰۰Hz با دستور زیر تولید می شود :

>>]b,a[=butter(9,400/1000) ;

 

 

 

 

برای محاسبه پاسخ فرکانسی ۲۵۶ نقطه ای این فیلتر و رسم پاسخ فاز و دامنه از دستور زیر استفاده می شود :

>> freqz(b,a,256,2000) ;

 

متلب

 

و یا برای نمایش همین پاسخ ها در fvtool ابتدا پنجره fvtool با دستور ، fvtool(b,a) باز شده و با فشار بر روی دکمه Magintude and phase Response قادر به مشاهده پاسخ ها هستید .

دستور freqz همچنین می تواند یک بردار از نقاط فرکانسی دلخواه برای استفاده درمحاسبه پاسخ فرکانسی دریافت کند . برای مثال :

>>w=linspace(0,pi) ;

>>h= freqz(b,a,w) ;

 

 

 

پاسخ فرکانسی مختلط را در نقاط مشخص شده در w برای فیلتر  مشخص شده در بردارهای a,b محاسبه می کنند . نقاط فرکانسی می توانند بین ۰ تا  باشند .

در حالت آنالوگ freqz پاسخ فرکانسی را برای فیلترهای آنالوگ تعریف شده با a,b با عملکردی مشابه freqz برآورده می کند .

می توان با دستور abs دامنه پاسخ و با دستور angle ، فاز (بر حسب رادیان) پاسخ فرکانسی موجود در بردار h را استخراج کرد . انجام این کار با استفاده از دستورات زیر در fvtool نیز امکان پذیر است .

>>]b,a[=butter(9,400/1000) ;

>>fvtool(b,a)

 

 

 

دستور unwarpنیز در تحلیل های فرکانسی مفید است . این تابع با اضافه کردن ضرایب   به فاز در نقاط گسستگی آن را پیوسته می کند . برای مثال برای طراحی یک فیلتر  FIR درجه ۲۵پایین گذر داریم :

>>h=fir1(25,0.4) ;

 

 

 

حال پاسخ فرکانسی را با استفاده از freqz برای فاز به شکل زیر استخراج کرده و رسم کنید:

>>]H,f=[freqz(h,1,512,2) ;

>>plot(f,angle(H)*180/pi;؛     grid

 

 

 

حال با دستور unwrap قادربه حذف پرش های  هستید

>>plot(f,unwrap(angle(H)*180/pi) ;

 

 

 

 

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

>>]b,a=[butter(10,200/1000) ;

>>hFVT=fvtool(b,a,’Anallysis’,’grpdelay’) ;

>>set(hFVT,’NumberofPoints’,128,’OverlayedAnalysis,’phasedelay’) ;

>>legend(hFVT) ;

تاخیر جمعی (group delay) یک فیلتر  ، برآوردی از تاخیر متوسط زمانی فیلتر  به صورت تابعی از فرکانس است و به صورت منفی مشتق اول پاسخ فاز فیلتر  تعریف می شود برای رسم تاخیر فاز و تاخیر جمعی فیلتر  در یک شکلfvtool دستورات زیر را در خط دستورات وارد کنید

 

 

 

تحلیل صفرو قطب

>>zer=-0.5;

>>pol=0.9*exp(j*2*pi*]-0.3  ۰٫۳[);

>>zplane(zer,pol) ;

تابع zplane ، صفر ، قطب های یک سیستم خطی را رسم می کند . برای مثال برای مشاهده صفحه صفر / قطب یک فیلتر ساده با یک جفت قطب مختلط در فرکانس های ۰٫۹exp(j*0.3*2pi) و  ۰٫۹exp(-j*0.3*2pi) و یک صفر در-۱/۲ از دستورات زیر استفاده می شود :

 

 

 

و یا می توان از fvtool به این شکل استفاده کرد که ابتداصفرو قطب ها را به فرم تابع درآورده و سپس از دستورات زیر استفاده کرد :

>>]b,a[=zp2tf(zer,pol,1) ;

>>fvtool(b,a) ;

 

متلب

 

 

و سپس در نوار ابزار روی روی Pole / Zero کلیک کرد یا از Analysis >> Pole / Zero شکل  را مشاهده کرد .

برای یک سیتم به شکل صفر و قطب ، ورودیzplane بردارهای z و p که مکان صفر و قطب ها است به صورت zplane(z,p) می باشد و برای سیستمی به فرم تابع تبدیل ورودی آن بردارهای a و b که ضرایب صورت و مخرج است و به صورت zplane(b,a) می باشد.

 

مدل های سیستم های خطی

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

 

 

تابع تبدیل

تابع تبدیل ،  نمایش پایه حوزه z یک فیلتر  دیجیتال است که بیان کننده فیلتر بر حسب نسبت دو چند جمله ای است . توصیف مدل تابع تبدیل برای یک فیلتر  دیجیتال در حوزهz به شکل زیر است :

شکل صفر و فطب

ان مدل به شکل زیر (با صفر و قطب ها) نیز نمایش داده می شود :

در معادله بالا ضرایب p و q ریشه های ضرایب چند جمله ای های صورت و مخرج (b و a) هستند . از توابع poly و roots برای تبدیل بین این دو حالت استفاده می شود . برای مثال ضرایب یک فیلتر  ساده IIR را در زیر می بینید :

>>b=]‍‍۲ ۳ ۴[  ;

>>a=]1 3 3 1[ ;

 

 

 

 

صفر و قطب های این فیلتر  به شکل زیر به دست می آیند :

>>q=roots(b) ;

>>p=roots(a) ;

>>k=b(1)/a(1) ;

 

 

 

 

 

برای بازگشت به حالت قبل نیز از دستورات زیر استفاده می شود :

>>bb=k*poly(q) ;

>>aa=poly(p) ;

 

 

 

 

 

 

 

توجه شود که a و b در این مثال نشان دهنده ضرایب فیلتر  زیر هستند :

بسط به کسرهای جزیی یا فرم باقیمانده (Residue Form)

هر تابعی تبدیلی به فرم باقیمانده به شکل زیر قابل نمایش است :

با تابع  residuez به تبدیل تابع تبدیل به حالت بسط کسرهای جزیی هستند . residuez در خروجی در یک بردار ستونی p مکان قطب ها ، در یک بردار ستونی دیگر r باقیمانده های مربوط به همان قطب ها و در یک بردار سطری k نیز سایر بخش ها را می دهد . اگر تفاضل ۲ قطب کمتر از ۰٫۰۱ دامنه هر کدام باشد ، residuez آن ها را یکسان فرض می کند . برای مثال فرم باقیمانده  برابر است با :

>>b=]-4 8[  ;

>>a=]1 6 8[  ;

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

 

 

متلب

 

که معادل با

است برای یافتن معکوس تبدیل z این عبارت ، باید معکوس تبدیل z هرکدام از دو جمله آن را محاسبه کرد که  را می دهد . برای انجام این محاسبه در خط دستورات به شکل زیر عمل می شود :

>>imp=]1 0 0 0 0[  ;

>> resptf=filter(b,a,imp)  ;

>>respres=filter(r(1),]1-p(1)[,imp)+filter(r(2),]1-p(2)[,imp) ;

 

 

مدل های سیستم پیوسته در زمان

 

 

 

مدل سیستم های پیوسته در زمان:

این مدل ها نشان دهنده سیستم ها فیلترهای آنالوگ هستند. بسیاری از مدل های گفته شده در بالا برای سیستم های گسسته مانند مدل صفر و قطب ، تابع تبدیل و بسط به توابع جزیی برای نمایش سیستم های پیوسته نیز به کار می روند . برای تبدیل بین روش های مختلف مدل سیستم خطی می توان از  دستورات ارائه شده در جدول ۱-۱ استفاده کرد . ستون اول نشان دهنده مدل مبدأ و سطر اول نشان دهنده مدل های مقصد است .

 

 

 

 

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

تبدیل فوریه گسسته

تبدیل فوریه گسسته یا DFT یکی از ابزراهای اساسی در پردازش سیگنال های دیجیتال است. اساس جعبه ابزار  پردازش سیگنال تبدیل فوریه سریع FFT که همان DFT است که زمان اجرای آن کاهش یافته است . توابع fft و ifft برای محاسبه تبدیل فوریه گسسته و معکوس آن استفاده می شود . فرض که داده ورودی به x,fft باشد ، در خروجی تبدیل یافته آن ، y است که با آن هم طول بوده و تبدیل فوریه گسسته آن  در فرکانس های هم فاصله حول دایره واحد می باشد . برای مثال یک بردار سیگنال زمان به شکل زیر را در نظر بگیرید :

>>t=(0:1/100:10-1/100) ;                          %Time vector

>>x=sin(2*pi*15*t)+sin(2*pi*40*t) ;     %Signal

 

 

 

 

تبدیل DFT سیگنال و دامنه و فاز دنباله خروجی آن به شکل زیر هستند :

>>y=fft(x) ;                                        %Computer DFT ifX

>> m=abs(y) ;

>>p=unwrap(angle(y)) ;                        %Magnitude and phase

 

 

 

 

>>f=(0:length(y)-1)*99/length(y) ;     %Frequuency vector

>>subplot(2,1,1) ;   plot(f,m) ;        title (‘Magnitude’) ;

>>set(gca,’XTick’,]15 40 60 85[);

>>subplot(2,1,2) ;    plot(f,p*180/pi) ;   title (‘Phase) ;

>>set(gca,XTick’,]15 40 60 58[);

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

 

 

 

 

 

>>y=fft(x,n) ;

دومین پارامتر ورودی تابعfft معرف تعداد نقاطی است که DFT در آن ها نشان داده می شود .

 

اگر n  از تعداد نقاط دنباله ورودی بیشتر باشد ، fft عمل  zero padding را انجام می دهد و اگر کمتر باشد تعدادی از نقاط حذف می شوند.

>>t=(0:1/255:1) ;

X=sin(2*pi*120*t) ;

Y=real(ifft(fft(x))) ;

 

 

 

 

طراحی و پیاده سازی فیلتر 

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

>>]b,a[=Butter(5,30/50) ;

>>Hd=difilt.df2t(b,a) ;

>>y=filter(Hd,x) ;

 

هدف از طراحی فیلتر  ایجاد تغییرات وابسته به فرکانس در دنباله داده است . برای مثال لازم است که نویز ۳۰Hz را از یک دنباله داده که با نرخ ۱۰۰Hz نمونه برداری شده حذف کرد که بیان کننده یک مساله کلی است . برای فیلتر  مورد نیاز بیان شده در بالا ، معمولاً یک فیلتر باتروث مناسب است برای طراحی یک فیلتر باتروث درجه ۵ پایین گذربا فرکانس قطع ۳۰Hz و اعمال آن  به داده x به شکل زیر عمل می شود :

 

 

 

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

طراحی فیلتر IIR

فیلترهای IIR کلاسیک

فیلترهای IIR کلاسیک که شامل باتروث (Butterwroth) ، چبیچف (Chebyshev) نوع Iو II ، الیپتیک(elliptic) و بسل (Bessel) می شود ، همگی تقریب هایی از فیلتر  ایده آل با روش های مختلف هستند . در این جعبه ابزار  برای همه این حالات توابعی در شرایط آنالوگ و دیجیتال (به جز بسل که فقط درحالت آنالوگ است) وجود دارد . در جدول زیر روش های مختلف طراحی فیلتر  موجود در جعبه ابزار  و دستورات موجود برای پیاده سازی آن ها به طور خلاصه نمایش داده شده است .

 

 

 

 

متلب

 

 

 

 

 

 

 

 

 

در اولین سطر این جدول به فیلتر های IIR دیجیتالی اشاره شده که از گسسته سازی فیلتر و تبدیل فرکانسی فیلترهای آنالوگ در جهت دست یابی به فیلتر  دیجیتال به دست می آیند . فیلترهای از درجه دلخواه و با انواع مختلف (بالا گذر ، پایین گذر و …) با استفاده از این توابع امکان پذیر است در جدول زیرنیز توابع مورد استفاده برای طراحی فیلترها و پارامترهای ورودی و خروجی آن ها نشان داده شده است .

 

 

 

 

 

 

 

به صورت پیش فرض ، هر کدام از این توابع یک فیلتر  پایین گذر را تولید می کنند و تنها باید فرکانس قطع مورد نیاز را معین کرد . برای فیلتر بالاگذر ، باید’high’  را به لیست پارامترهای تابع اضافه کرد . برای فیلترهای میان گذر و میان نگذر ، Wn باید یک بردار ۲ عضوی باشد که مشخص کننده فرکانس های لبه است و در حالت میان نگذر باید «stop» را به لیست پارامترهای تابع اضافه کرد . به مثال های زیر توجه کنید :

>>]b,a[=butter(5,0.4) ;

>>]b,a[=cheby1(4,1,]0.4 0.7[);

>> ]b,a[=cheby2(6,60,0.8,’high’) ;

 

>>]b,a[=ellip(3,1,60,]0.4 0.7,’stop'[);               %Bandstop

 

 

 

 

 

برای طراحی فیلتر  آنالوگ ، از ‘s’ در لیست استفاده کرده و فرکانس های قطع (rad/s) را نیز مشخص کنید :

>>]b,a[=butter(5,0.4,’s’)               %Analog Butterworth filter

 

 

 

به این نکته توجه شود که همه فیلترهای IIR کلاسیک پایین گذر در حالتی که فرکانس قطع خیلی پایین باشد ، به خوبی عمل نمی کنند در این حالت بهتر است که سیگنال ورودی را با نرخ کمتری نمونه برداری کرده و فیلتر را با پهنای باند عبور بیشتری تولید کنید . بهترین روش طراحی فیلتر  استفاده از فرم zero – pole – gain و سپس تبدیل آن به SOS با استفاده از فرم SOS با استفاده از تابع zp2sos و سپس استفاده از فرم های SOS با dfilt برای طراحی و پیاده سازی فیلتر  است.

 

 

 

طراحی فیلترهای IIR برای دست یابی به ویژگی های خاص در حوزه فرکانس

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

 

 

 

این توابع در همراهی با توابع طراحی فیلتر  مفید هستند . برای مثال اگر بخواهید یک فیلتر  میان گذر با باند عبور ۱۰۰۰Hz تا ۲۰۰۰Hz و باند توقفی با فاصله ۵۰۰۰Hz از هر کدام از لبه های باند عبور ، فرکانس نمونه برداری ۱۰kHz ، با حداکثر ریپل باند قطع۱dB و حداقل تضعیف برابر ۶۰dB در باند توقف داشته باشید ، باید از یک فیلتر  باتروث استفاده کنید :

>>]n,Wn[=buttord(]1000 2000[/5000,]500 2500/[5000,1,60) ;

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

 

 

 

 

 

یک فیلتر  الیپتیک که شرایط بالا را داشته باشد نیز به شکل زیر است :

>>]n,Wn[=ellipord(]1000 2000[/5000,]500 2500/[5000,1,60) ;

>>]b,a[=ellip (n,1,60,wn) ;

 

 

 

 

 

طراحی مستقیم فیلتر IIR

بر خلاف حالت آنالوگ ، فیلترهای مستقیماً طراحی شده ، به شکل های استاندارد پایین گذر، بالاگذر ، میان گذر و میان نگذر محدود نیستند . این توابع قادر به طراحی فیلترهای با پاسخ فرکانسی چند باندی هستند . دستور yulewalk یک فیلتر  دیجتال IIR بازگشتی را با انطباق روی یک پاسخ فرکانسی خاص طراحی می کند . نام تابع  yulewalk خود گویای روش به کار رفته در محاسبه ضرایب مخرج است . این تابع معکوس fft پاسخ مطلوب ایده آل را گرفته و معادلات یول واکر اصلاح شده را با استفاده از نمونه های تابع خودهمبستگی به دست آمده حل می کند . عبارت :

>>]b,a[=yulewalk(n,f,m)

 

 

 

 

>>m=]0 0 1 1 0 0 1 1 0 0; [

>>f=]0 0.1 0.2 0.3 0.4 0.5 0.60.7 0.8 1[;

>>]b,a[=yulewalk(10,f,m) ;

>>]h,w[=freqz(b,a,128) ;

>>plot(f,m,w/pi,abs(h)) ;

در وردی ، f را که بردار نقاط فرکانسی بین ۰ تا۱ (فرکانس نایکوئیست) به همراه n درجه فیلتر  IIR و m که بردار شامل دامنه های مطلوب در فرکانس های مشخص شده در f است را می گیرد و در خروجی بردارهای a و b را که ضرایب صورت و مخرج هستند می دهد . تابع سازنده همتای این حالت در فیلترهای FIR تابع fir2 است . در زیر مشاهده می کنید .

 

 

 

 

طراحی فیلتر باتروث تعیمیم یافته

با استفاده از دستور maxflat می توانید فیلتر باتروث تعمیم یافته با تعداد متفاوت صفر و قطب نسبت به فیلتر باتروث طراحی کنید . تفاوت maxflat با butter در این است که در تابع maxflat قادر به دادن دو ورودی (به جای یک ورودی در فیلتر  butter) به عنوان درجات صورت و مخرج هستید. این فیلترها برای هر درجه ای از صورت و مخرج با ماکزیمم تعداد مشتقات در ۰ و فرکانس نایکوئیست تنظیم شده در ۰ بهینه هستند . برای مثال وقتی هر دو درجه برابر باشند ، maxflat برابر butter می شود .

>>]b,a[=maxflat(3,3,0.25) ;

>>]b,a[=butter(3,0.25) ;

 

 

 

 

 

>>]b,a[=maxflat(3,1,0.25) ;

 

البته maxflat تطبیق پذیرتر است ، چون قدرت طراحی فیلتری باتعداد صفر و قطب بیشتر را می دهد .

 

 

سومین ورودی maxflat فرکانس نصف توان است که عددی بین صفر تا یک بوده و پاسخ دامنه مطلوب آن  می باشد . همچنین قادر به طراحی فیلترهای فاز خطی با ویژگی مسطح بودن با استفاده از ‘sym’ هستیم .

>>]b,a[=maxflat(4,’sym’,0.3)

ans=

۰٫۰۳۳۱           ۰٫۲۵۰۰     ۰٫۴۳۳۷     ۰٫۲۵۰۰   ۰٫۰۳۳۱

 

 

 

 

 

طراحی فیلترهای FIR

برای طراحی فیلترهای FIR روش های مختلفی وجود دارد . در جدول زیر دستورات مورد استفاده برای طراحی فیلتر های FIR به روشهای گوناگون نشان داده شده است .

 

 

 

 

 

 

 

 

فیلتر های با فاز خطی

به جز تابع cfirpm در جدول بالا همگی توابع تولیدکننده فیلترهای با فاز خطی هستند . توابع fir1 ، fir2 ، firls ، firpm ، fircls ، fircls1 و firrcos به صورت پیش فرض فیلترهای نوع I و II را تولیدکرده و توابع  firls و firpmordتوابع نوع III و IV را تولید می کنند . cfripm قادر به تولید هر چهار نوع فاز خطی و همچنین فاز غیرخطی است .

روش پنجره گذاری

فیلتر ایده ال پایین گذر در فرکانس های کمتر از فرکانس قطع مقداریک و در فرکانس های بیشتر از آن مقدار صفر دارد . این به دلیل غیرعملی بودن و بی انتها بودن پاسخ ضربه آن قابل پیاده سازی نمی باشد . برای حل این مشکل یک پنجره به آن اعمال می شود . با داشتن قسمت میانی پاسخ  اصلی در مکان اصلی خود ، فیلتر  فاز خطی خواهید داشت . برای مثال یک فیلتر پایین گذر با درجه ۵۱ و فرکانس قطع  به شکل زیر می باشد :

 

 

>>]b,a[=0.4*sinc(0.4*(-25:25)) ;

 

 

>>fvtool(b,1) ;

پنجره اعمال شده در این جا پنجره مستطیلی است دستور زیر فیلتر  مزبور را در fvtool نشان می دهد .

 

 

در زیر یک پنجره همینگ به فیلتر  اعمال شده و نتایج در fvtoolنشان داده شده اند .

>>b=b.*hamming(51)’;

>>fvtool(b,1)

 

 

 

 

اثر ریپل با استفاده از پنجره همینگ به خوبی کاهش یافت . اما این مساله به قیمت افزایش باند گذر انجام شد. توابع fir1 و fir2 بر پایه این روش پنجره گذاری هستند . این توابع درجه فیلتر وتوصیفی از فیلتر مطلوب ایده ال راگرفته و معکوس تبدیل فوریه پنجره گذاری شده آن فیلتر ایده ال را در خروجی می دهند . طراحی فیلتر  FIR با باند استاندارد با استفاده از تابع fir1 مشابه توابع طراحی فیلتر  IIR است که به مدل های استاندارد پایین گذر ، بالاگذر ، میان گذر و میان نگذر محدود می شود . دستورات زیر بردار سطری b را که شامل ضرایب یک با پنجره همینگ از درجهn است تولید می کند :

>>n=50;

>>Wn=0.4;

>>b=firl(n,Wn);

 

 

 

 

 

 

این فیلتر  یک فیلتر  پایین گذر با فاز خطی FIR با فرکانس قطع Wn (نرمالیزه شده با نصف فرکانس نایکوئیست و مربوط به دامنه ۶dB) است . برای یک فیلتر  بالا گذر ، کافی است «high» را به لیست پارامترهای تابع اضافه کرد . برای فیلترهای میان گذرو میان نگذر ،  Wn  باید یک بردار ۲ عضوی که مشخص کننده فرکانس های لبه است ، باشد و در حالت میان نگذر باید «stop» را به لیست پارامترهای تابع اضافه کرد . دستور b=fir1(n,Wn,window) از پنجره مشخص شده در بردار سطری window برای طراحی استفاده می کند . بردار پنجره باید n+1 عضو داشته باشد . در صورتی که نوع پنجره را مشخص نکیند ، fir1 از پنجره همینگ استفاده می کند .

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

طراحی فیلترهای FIR چند باندی

تابع fir2 نبز فیلترهای FIR پنجره گذاری شده را طراحی می کندبا این تفاوت که پاسخ فرکانسی را می توان به صورت خطی تکه ای به شکل دلخواه طراحی کرد . این مساله با fir1 در تناقض است که تنها فیلترهایی در مدل های استاندارد پایین گذر ، بالاگذر ، میان گذر و میان نگذر طراحی می کند . دستورات زیر بردار b شامل n+1 ضریب فیلتر FIR درجه n که مشخصات فرکانسی آن با بردارهای f و  و m مطابقت دارد را در خروجی می دهد :

>>n=50;

>>f=]0.4 .51[  ;

>>m=]1 1 0 0[   ;

>>b=fir2(n,f,m) ;

 

 

 

 

متلب

 

F بردار نقاط فرکانسی است که بین ۰ تا۱ (معادل فرکانس نایکوئیست) قرار دارند و m هم شامل مقادیر مطلوب دامنه در فرکانس های نشان داده شده در f هستند . همانطور که قبلاً بیان شد ، IIR این دستور yulewalk  است .

طراحی فیلترهای FIR چندباندی با باندهای گذر

توابع firls و firpm روش عمومی تری را برای طراحی فیلترها نسبت به fir1و fir2 فراهم می کنند این توابع ، مدل های هیلبرت ، مشتق گیرها و سایر فیلترهای با ضرایب متقارن فرد (فاز خطی نوع III و IV) را طراحی می کنند . آن ها همچنین امکان وجود مناطق زودگذر و یا مناطق بی تفاوت که خطای آن مینیمم نشده را فراهم کرده و عمل وزن دهی مستقل از باند را در مینیمم سازی انجام می دهند . دستور  firls بسط دستورات fir1 و fir2  است به طوری که جمع مجذور خطای بین پاسخ فرکانسی مطلوب و پاسخ فرکانسی واقعی به حداقل میزان ممکن برسد . تابع firpm الگوریتم Parks-Mcclellan را پیاده سازی می کند که از الگوریتم جایگزین Remez و تئوری تقریب چبیچف برای طراحی فیلترها با انطباق بهینه بین پاسخ های فرکانسی واقعی و مطلوب استفاده می کند . به این فیلترها فیلترهای minimax نیزمی گویند چون پاسخ فرکانسی آن رفتار equiripple در باند فرکانسی خود دارد . این دو تابع مشابه بوده و تنها از نظر نوع مینیمم سازی با هم اختلاف دارند . مثال زیر استفاده از این نوع توابع را نشان می دهد. در حالت پیش فرض این دو تابع ، فیلترهای فازخطی نوع I و II را بستگی به درجه فیلتر تولید می کنند . در زیر مثالی از یک فیلتر  پایین گذر با پاسخ فرکانسی برابر یک در محدوده۰ تا ۰٫۴Hz و پاسخ ۰ در محدوده ۰٫۵ تا ۱٫۰Hz را مشاهده می کنید.

 

>>n=20;                                         %Filter order

>>f=]0 0.4  ۰٫۵ ۱[ ;                      %Frequency band edgsed

>>a=]1 1 0 0[ ;                             %Desired amplitudes

>>b=firpm(n,f,a) ;

 

 

 

 

 

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

>>bb=firls(n,f,a) ;

>>fvtool(b,1,bb,l,’:’)

 

 

 

فیلتر  طراحی شده با firpm ، رفتار equiripple دارد . همچنین توجه کنید که فیلتر  firls پاسخ بهتری روی اکثر نقاط باند عبور و قطع دارد ولی پاسخ در لبه های باند به خوبی پاسخ firpm نیست .

مثالی از حالت میان گذر نیزبه شکل زیر است :

>>f=]0 0.3 0.4 0.7 0.8 1 [  ;                         %Band edges in pairs

>>a=]0 0 1 10 0[  ;                                      %Bandpass filter amplitude

 

 

 

 

دو بردار بالا در حقیقت مشخص کننده پنج باند هستند . دو باند توقف در محدوده های      [۰-۰٫۳]و[۰٫۸-۱] یک باند عبور در محدوده [۰٫۴-۰٫۷] و دوباند گذر در محدوده های [۰٫۳-۰٫۴] و[۰٫۷-۰٫۸]. برای حالات بالاگذر و میان نگذر نیزمی توان نوشت :

>>f=]0 0.7 0.8 1 [  ;                         %Band edges in pairs

>>a=]0 0 1 1 [   ;                              %Highpass filter amplitude

>>f= ]0 0.3 0.4 0.5 0.8 1[   ;             %Band edges in pairs

>>a=]1 1 0 0 1 1[   ;                        %Bandpass filter amplitude

 

 

 

 

 

در زیر نیز مثالی از حالت چندباندی نشان داده شده است :

>>f=]0 0.1 0.15 0.25 0.3 0.4 0.45 0.55 0.6 0.7 0.75 0.85 0.9 1; [

>>a=]1 1 0 0 1 1 0 0 1 1 0 0 1 1 [;

 

 

 

 

بردار وزن

هر دو تابع firls و firpm اجازه تاکید بیشتر روی مینیمم سازی خطا دربعضی از باندهای فرکانسی نسبت به سایر باندها را می دهند . برای این کار باید از یک بردار وزن استفاده کرد . مثالی از یک فیلتر  پایین گذر را که ریپل آن در باند عبور است در زیر مشاهده می کنید :

>>n=20  ;                                        %Filter order

>>f=]0 0.4 0.5 1; [                            %Frequncy band edges

>>a=]1 1 0 0 [   ;                                %Desired amplitudes

>>w=]1 1 0[   ;                                 %Weight vector

>>b=firpm(n,f,a,w) ;

 

 

 

 

 

 

یک بردار وزن معتبر باید نصف طول بردارهای f و a را داشته و برای هر باند دقیقاً یک وزن تولید کند .

فیلترهای غیرمتقارن (مدل های هیلبرت)

زمان صدا کردن «h» یا «Hilbert» ، دستورات firpm و firls ، فیلترهای FIR فاز خطی با تقارن فرد یعنی نوع III (برای درجات زوج) و نوع IV (برای درجات فرد) را طراحی می کنند . یک مبدل هیلبرت ایده آل ویژگی عدم تقارن دارد و دامنه آن در تمام پهنای باند ، برابر یک است . دستورات زیر را در خط دستورات نوشته ومبدل هیلبرت منتج شده را در fvtool مشاهده کنید :

>>b=firpm(21,]0.05 1[,]1 1[ , ‘h’) ;                          %Highpass Hilbert

>>bb=firpm(20,]0.05 0.95[,]1 1[,’h’) ;               %Bandspass ilbert

>>fvtool(b,l,bb,l) ;

 

 

 

 

 

می توان تبدیل هیلبرت تاخیر یافته یک سیگنال x را با عبور آن از این فیلتر  به دست آورد .

>>fs=1000 ;                          %Sampling frequency

>>t=(0:1/fs:2)’;                      %Tow second time vector

>>x=sin(2*pi*300*t) ;          %۳۰۰Hz sine wave example signal

>>xh=filter(bb,l,x) ;                %Hilbert transform of x

 

 

 

سیگنال آنالیتیک متناظر با x سیگنالی مختلط است که x قسمت حقیقی آن بوده و تبدیل هیلبرت x قسمت مختلط آن می باشد . برای این روش FIR (جایگزینی برای تابع هلیبرت) باید x با اندازه نصف درجه فیلتر  تاخیر یابد تا سیگنال آنالیتیک مربوطه را تولید کند :

>>xd=]zeros(10,1) ;x(1:length(x)-10)[  ;                %Delay 10 samples

>>xa=xd+j*xh ;                                                    %Analytc signal

 

 

 

 

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

 

مشتق گیرها

مشتق گیری سیگنال در حوزه زمان معادل ضرب تبدیل فوریه آن در یک تابع شیب موهومی است . به این معنی که برای مشتق گیری از یک سیگنال ،  باید سیگنال از فیلتری با پاسخ فرکانسی  عبور داده شود . توابع firlsو firpm مشتق گیر ایده ال را بایک تاخیر توسط ‘d’ یا  ‘differentiation’تقریب می زنند .

>> b=firpm(21,]0 1[,]0 pi[,’d’) ;

 

 

 

 

 

 

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

>>bb=firpm(20,]0 0.9[,]0 0.9*pi[,’d’) ;

 

 

 

 

در حالت ‘d’ تابع firpm را با  در دامنه های با باند غیر صفر وزن دهی می کند تا حداکثر خطای نسبی را مینیمم کند . تابع firpm در این حالت خطاها را با  را در دامنه های با باند غیرصفر وزن دهی می کند . دستور زیر پاسخ دامنه هر دو مشتق گبر بالا را نشان می دهد.

طراحی فیلتر FIR با حداقل مربعات خطای محدود شده (CLS)

توابع طراحی این نوع فیلتر ها این امکان را فراهم می کنند که قادر باشید فیلترهای FIR را بدون تعریف مستقیم باند گذر برای پاسخ دامنه طراحی کنید . ویژگی اصلی روش CLS این است که شما را قادر می سازد که آستانه های بالا و پایین را که شامل حداکثر ریپل مجاز در پاسخ دامنه است تعریف کنید . توابعی که این روش را پیاده سازی می کنند تابع fircls (که فیلتر  با حداقل مربعات خطای محدود شده برای فیلتر های پایین گذر و بالاگذر با فاز خطی را تولید می کند) هستند .

برای مثال طراحی فیلتری آن درجه ۶۱ و فرکانس قطع ۰٫۳ (نرمالیزه شده)، حداکثر ریپل باند عبور از یک ، برابر ۰٫۰۲ و حداکثر ریپل باند توقف از صفر ، برابر ۰٫۰۰۸ را در نظر بگیرید. برای طراحی با استفاده از fircls1 از دستورات زیر استفاده می شود :

>>n=61;

>>wo=0.3;

>>dp=0.02;

>>ds=0.008;

>>h=fircls(n,wo,dp,ds) ;

>>fvtool(h,l)

 

 

 

 

 

 

 

ا

اگر شکل آن را ببینیم محور y شکل مجذور شده است . برای این کار باید از منوی Analysis در پنجره FVTool گزینه Analysis Parameters را انتخاب کنید و در پنجره باز شده گزینه Magmitude Display را به صورت Magnitude Squared تنظیم کنید .

تابع fircls از تکنیکی مشابه برای طراحی فیلترهای FIR با تکه ای ثابت مطلوب استفاده می کند . در این حالت می توان برداری از فرکانس ها و دامنه های متناظر آن ها را در لبه های باند مشخص کرده و حداکثر مقدار ریپل برای هر باند را نیز مشخص نمود .

فرض کنید برای یک فیلتر ، مشخصات ارائه شده در جدول زیر مورد نظر باشد و بخواهید فیلتر  را از درجه ۱۲۹طراحی کنید ، با تایپ دستورات زیر نتیجه نمایش داده می شود .

 

 

 

طراحی فیلتر CLS وزن دار

>>n=55;

>>wo=0.3;

>>dp=0.02;

>>ds=0.004;

>>wp=0.28;

>>ws=0.32;

>>k=10;

>>h=firclsl(n,wo,dp,ds,wp,ws,k) ;

>>fvtool(h,l)

طراحی فیلتر CLS وزن دار امکان طراحی فیلترهای بالاگذر و پایین گذر با وزن دهی نسبی در هر باند را می دهد . تابع fircls1 امکان تعیین لبه های باند عبور و توقف در تابع حداقل مربعات خطا و همچنین ثابت k که مشخص کننده نسبت باند توقف به باند عبور است را فراهم می کند . برای مثال برای طراحی فیلتری FIR با پاسخ ضربه از درجه ۵۵ ، فرکانس قطع ۰٫۳ (نرمالیزه شده) ، حداکثر ریپل باند عبور برابر ۰٫۰۲ ، حداکثر ریپل باند توقف برابر ۰٫۰۴ ، شرایط وزن دهی به صورت لبه باند عبور برای تابع وزن برابر ۰٫۲۸ ، لبه باند توقف برای تابع وزن برابر ۰٫۳۲ و وزن مینیمم سازی خطای باند توقف نسبت به باند عبور برابر ۱۰ به شکل زیر عمل می شود :

 

 متلب

 

 

 

 

 

 

 

طراحی فیلتر  با پاسخ دلخواه

تابع cfirpm ابزاری را برای طراحی فیلترهای FIR با پاسخ های مختلط دلخواه فراهم میکند. تفاوت این تابع با سایر توابع طراحی فیلتر  در نحوه مشخص کردن پاسخ فرکانسی آن است . از این تابع می توان در طراحی و تولید فیلتر  های FIR با فاز  غیرخطی ، فیلتر  های با پاسخ فرکانسی نامتقارن (با ضرایب مختلط) و یا فیلتر های متقارن با پاسخ فرکانسی مرسوم استفاده کرد .

طراحی فیلتر آنالوگ IIR

طراحی فیلتر  آنالوگ IIR کلاسیک

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

جدول : دستورات مورد استفاده برای طراحی فیلتر  پایین گذر آنالوگ ، تبدیل فرکانسی و گسسته سازی فیلتر  طراحی شده 

 

 

 

دستورات butter ،cheby1، cheb2ord ، ellip و besself همه مراحل طراحی فیلتر  در بالا را انجام داده و توابع buttord ، cheb1ord ، cheb2ord ، ellipord محاسبات با حداقل درجه برای فیلترهای IIR را فراهم می کنند . این توابع برای بسیاری از مسایل طراحی مناسب هستند و به توابع درجه پایین تر عموماً نیازی نیست . اما در حالتی که در کاربردی نیاز به تبدیل لبه های باند یک فیلتر آنالوگ را داشته و یا بخواهید یک تابع تبدیل گویا را گسسته کنید ، این بخش ابزارهای مناسبی را فراهم می کند .

 

طراحی الگوی آنالوگ

برای قدم اول یعنی طراحی فیلتر  پایین گذر آنالوگ با فرکانس قطع یک از توابع معرفی شده در جدول زیراستفاده می شود :

جدول دستورات مورد استفاده برای طراحی فیلتر  پایین گذر آنالوگ با فرکانس قطع یک

 

 

تبدیل فرکانسی

قدم دوم در تکنیک طراحی الگوی آنالوگ ، تبدیل فرکانسی الگوی پایین گذر است . در جدول زیر دستوراتی برای تبدیل فیلتر آنالوگ با فرکانس قطع ۱rad/s به فیلترهای پایین گذر ، بالاگذر ، میان گذر و میان نگذر با قطع مطلوب نشان داده شده است :

 

 

 

 

 

توابع تبدیل فرکانسی عمل جایگزینی متغیر فرکانسی را انجام می دهند . در توابع ۱p2bp و ۱p2bs این جایگزینی به صورت درجه دوم است . به همین دلیل درجه فیلتر  خروجی دو برابر درجه ورودی است . در توابع ۱p2lp و ۱p2hp درجه فیلتر  ورودی و خروجی برابر هستند . برای مثال برای طراحی یک فیلتر  میان گذر ازدرجه ۱۰ چبیچف نوع I با ریپل باند عبور برابر ۳dB دستور زیر را در خط فرمان وارد کنید :

>>]z,p,k[=cheb l ap(5,3) ;

 

 

 

 

 

خروجی های z و p و k شامل صفرها و قطب ها و گین فیلتر  آنالوگ پایین گذر با فرکانس قطع c برابر ۱rad/s هستند . با استفاده از تابع ۱p2bp این الگوی پایین گذر به یک فیلتر  آنالوگ با فرکانس های لبه  و  تبدیل می شود . ابتدا فیلتر  به فرم فضای حالت تبدیل می شود تا بتواند به عنوان ورودی از طریق تابع ۱p2bp پذیرفته شود .

>>]A,B,C,D[ =zp2ss(z,p,k) ;                                    %Convert to state-space form

 

 

 

حال فرکانس میانی و پهنای باند محاسبه شده و از تابع ۱p2bp استفاده می شود :

>>u1=0.1*2*pi;

>>u2=0.5*2*pi;

>>Bw=u2-u1;

>>Wo=sqrt(u1*u2);

>>[At,Bt,Ct,Dt]=lp2bp(A,B,C,D,Wo,Bw) ;

 

 

 

 

 

 

در نهایت پاسخ فرکانسی محاسبه شده و دامنه آن رسم می شود :

>>]b,a[=ss2tf(At,Bt,Ct,Dt) ;                %Convetr to TF form

>>w=linspace(0.01,1,500)*2*pi;        %Generate frequency vector

>>h=freqz(b,a,w) ;                                 %Computer frequency respons

>>semilogy(w/2/pi,abs(h)) ;grid;            %Plot log magnitude vs.freq

>>Xlable(‘Freqency(Hz)’) ;

 

 

 متلب

 

 

 

گسسته سازی فیلتر 

سومین قدم در تکنیک الگوی آنالوگ ، تبدیل فیلتر به حوزه گسسته در زمان است . دو روش موجود برای این کار که در این جعبه ابزار  از آن ها استفاده می شود (جدول  زیر) روش impulse invariance و تبدیل bilinear است . توابع طراحی فیلتر  butter ، cheby1 ،cheby 2 و ellip از تبدیل bilinear برای تبدیل فیلتر  به حالت گسسته استفاده می کنند.

جدول دستورات مورد استفاده برای گسسته سازی فیلترهای آنالوگ

 

 

در روش Impluse Invariance تابع impinvar فیلتر  دیجیتالی تولید می کند که پاسخ فرکانسی آن نمونه های پاسخ فرکانسی پاسخ ضربه یک فیلتر  آنالوگ است این تابع تنها بر روی فیلترهای به فرم تابع تبدیل عمل می کند . این روش برای فیلترهای پایین گذر و میان گذر استفاده می شود ، ولی برای فیلترهای بالا گذر و میان نگذر مناسب نیست .

>>[bz,az]=impinvar(b,a,2) ;

>>fvtool(bz,az)

برای طراحی یک فیلتر چبیچف نوع I و رسم پاسخ فرکانسی و فاز آن با استفاده از FVTool داریم :

 

 

حال در نوار ابزار موجود در fvtool روی دکمه Magnitud and Phase Response کلیک کنید.

>>[Ad,Bd,Cd,Dd]=bilinear(At,Bt,Ct,Dt,2,0.1)

تبدیل bilinear یک تبدیل غیرخطی حوزه پیوسته به حوزه گسسته است . تابع bilinear این تبدیل را روی سه نوع نمایش سیستم (نمایش صفر و قطب ، تابع تبدیل و فرم معادله حالت) انجام می دهد . در اینجا با استفاده از ماتریس های فضای حالت توصیف کننده فیلتر  چبیچف نوع I بخش قبل (با فرکانس نمونه برداری ۰٫۱Hz و فرکانس لبه پایینی برابر ۰٫۱Hz) تابع bilinear صدا زده می شود .

پاسخ فرکانسی فیلتر  دیجیتال به دست آمده قابل مشاهده است .

>>[bz,az]=ss2tf(Ad,Bd,Cd,Dd)                   %Convert to TF

>>fvtool(bz,az)

 

 

مشاهده می شود که لبه پایینی باند عبور دقیقاً برابر ۰٫۱Hz در حالی که لبه بالایی کمی کمتر از ۰٫۵Hz است که نشان دهنده طبیعت غیرخطی تبدیل bilinear است برای مقابله با این مسأله ، لازم است که فیلتر  ها در حوزه آنالوگ با لبه های باند prewarped طراحی شوند تا پس از تبدیل bilinear به فرکانس های صحیح تبدیل شوند . دراینجا فرکانس های  prewaped (u1 و u2) برای تولید Bw و Wo با استفاده از تابع lp2bp استفاده می شوند .

>>fs=2;                 %Sampling frequency (hertz)

>>u1=2*fs*tan(0.1*(2*pi/fs)/2) ;                  %Lower band edge (rad/s)

>>u2=2*fs*tan(0.5*(2*pi/fs)/2) ;                  %Upper band edge (rad/s)

>>Bw=u2-u1;                                               %Bandwidth

>>Wo=sqrt(u1*u2) ;                                       %Center frequency

>>[At,Bt,Ct,Dt]=1p2bp(A,B,C,D,Wo,Bw) ;

 

 

 

 

 

 

یک فیلتر  دیجیتال میان گذر با لبه های باند ۰٫۱ و ۰٫۵ برابر فرکانس نایکوئیست به شکل زیر است :

>>[Ad,Bd,Cd,Dd]=bilinear(At,Bt,Ct,Dt,fs) ;

 

 

 

 

فیلترهای میان گذر تولید شده توسط مراحل موجود در دو بخش بالا با استفاده از تابع cheby1 نیز قابل طراحی هستند . برای مثال برای یک فیلتر  فیلتر  آنالوگ چبیچف داریم :

>>[b,a]=cheby1(5,3,[0.1 0.5]*2*pi,’s’) ;

 

 

 

 

توجه شود که لبه های باند در فیلترهای آنالوگ بر حسب rad/s هستند ، ولی در حالت دیجیتال این فرکانس ها نرمالیزه می شوند .

>>[bz,az]=cheby1(5,3,[0.1 0.5]) ;

 

متلب

 

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

پیاده سازی فیلترها

دستورات پیاده سازی فیلترها

پس از تولید بردار ضرایب فیلتر  می توان از دو دستور difiltو filter برای پیادهسازی فیلتر  استفاده کرد که اولی یک شی فیلتر  تولید می کند و دومی با استفاده از ضرایب فیلتر  ورودی ، یک ساختار ترآنهاده مستقیم نوع II را پیاده سازی کرده و داده ورودی را فیلتر  می کند .

 

انتخاب ساختار فیلتر 

انتخاب بهترین ساختار برای فیلتر  بستگی به عملکردی دارد که از فیلتر  انتظار دارید . برای مثال اغلب ممکن نیست فیلترهای IIR باسرعت عملکرد بالا ساخته شوند و برای سرعت بالا مجبور به استفاده از فیلترهای FIR هستید .

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

برای مثال برای طراحی و پیاده سازی یک ساختار ترآنهاده نوع II و استفاده از یک فیلتر  باتروث برای فیلتر  کردن داده x به شکل زیر عمل کنید :

>>[b,a]=butter(5,0.4) ;

>>Hd=difilt.df2t(b,a) ;                                   ۵Implement direct-form II transposed

>>filter(Hd,x) ;

 

 

 

 

 

یک روش دیگر برای پیاده سازی ساختار مستقیم نوع II به شکل زیر است :

>>[b,a]=butter(5 0.4) ;

>>filter(b,a,x)

 

 

 

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

کواریانس و همبستگی

استفاده ازدستورات xcorr و xcov

دستورات xcorr و xcov  ، همبستگی متقابل وکواریانس متقابل اتفاقی را تخمین می زنند و در موارد خاص می توانند خودهمبستگی و اتوکواریانس را نیز حساب کنند . به عنوان مثال :

>>x=[1 1 11 1 ]’;

>>y=x;

>>xyc=xcorr(x,y) ;

 

 

 

 

 

توجه شود که طول دنباله حاصل یکی کمتر از دو برابر طول دنباله ورودی است . دستور xcov دنباله اتوکواریانس و کواریانس متقابل را تخمین می زند . این تابع همان تنظیمات مشابه xcorr را دارداما در ابتدا میانگین x و y را حذف می کند .

بایاس و نرمالیزه کردن

تخمین یک کمیت بایاس شده است ، اگر میزان مورد انتظار (امید) آن با کمیتی که تخمین می زند ، برابر نباشد . میزان مورد انت۰ظار خروجی  xcorr ، است و xcorr تخمین بایاس شده ای را فراهم می کند . ولی اگر پرچم” unbiased ” را بعد از دنباله های ورودی وارد کنید با تقسیم بر  این تابع یک تخمین غیربایاس می دهد .

>>xcorr(x,y,’unbiased’) ;

 

 

 

 

آنالیزطیفی

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

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

 

 

 

 

 

 

 

 

 

 

 

 

روش های غیرپارامتری

روش های غیر پارامتری روشهایی هستند که در آن ها PSD به صورت مستقیم ازخود سیگنال تخمین زده می شود . ساده ترین این روش ها پریودوگرام و نسخه پیشرفته پریودوگرام روش Welch است .

 

پریودوگرام

در حالت کلی یک روش تخمین PSD یک فرایند ، به دست آوردن تبدیل فوریه گسسته در زمان نمونه های فرایند و مجذور کردن اندازه نتیجه است . این تخمین پریودوگرام نامیده می شود .

به عنوان مثال ، سیگنال ۱۰۰۱ عضوی xn را درنظر بگیرید که از دو سیگنال سینوسی به علاوه نویز تشکیل شده است .

>>fs=1000 ;                               %sampling frequency

>>t=(0:fs)/fs;                               %One second worth of samples

>>A=[1 2] ;                                  %sinusoid amplitudes (row vector)

>>f=[150 140] ;                              %Sinusoid frequencies(clumn vector)

>>xn=A*sin(2*pi*f*t)+0.1*rand(size(t)) ;

 

 

 

 

 

 

تخمین پریودوگرام می توانند با ایجاد شی پریودوگرام محاسبه شود :

>>Hs=spectrum.peridogram(‘Hamming’) ;

 

 

 

و یک ترسیم از تخمین می تواند به روش psd نمایش داده شود .

>>psd(Hs,xn,’Fs’,fs,’NFFT’,1024,’Spectrum Type’,’twosided’)

 

 

 

>>Hdsp2= psd(Hs,xn,’Fs’,fs,’NFFT’,1024,’Spectrum Type’,’twosided’) ;

>>Pow=avgpower(Hdsp2) ;

توان متوسط می تواند با تقریب زدن انتگرال با جمع زیر محاسبه شود :

 

 

همچنین می توان توان متوسط را از تخمین یک طرفه PSD محاسبه کرد :

>>Hdsp3= psd(Hs,xn,’Fs’,fs,’NFFT’,1024,’Spectrum Type’,’onesided’) ;

>>Pow=avgpower(Hdsp3) ;

 

 

 

 

 

پریودوگرام اصلاح شده

پریودوگرام اصلاح شده ، سیگنال در حوزه زمان را قبل از محاسبه برای هموار  کردن لبه های سیگنال پنجره گذاری می کند و این بر کاهش ارتفاع لبه ها (side lobes) و نشت طیفی(spectral leakage) موثر است . تابع پریودوگرام ، امکان محاسبه پریودوگرام اصلاح شده را با معین کردن پنجره مورد استفاده بر روی داده ها فراهم می کند .

>>fs=1000;                               %Sampling frequency

>>t=(0:fs/10)./fs;                      %One-tenth second worth of samples

>>A=[1 2] ;                                %Sinusoid ampltudes

>>f=[150 ;140] ;                         %Sinusoid frequenies

>>xn=A*sin(2*pi*f*t)+0.1*randn(size(t)) ;

>>Hrect=spectrum.periodogram;

>>psd(Hrect,xn,’Fs’,fs,’NFFT’,1024) ;

 

 

 

 

 

 

 

پنجره مستطیلی ساخته شده در بالا را با یک پنجره همینگ پیش فرض مقایسه کنید :

>>hhamm=spectrum.periodogram(‘Hamming’) ;

>>psd(Hhamm,xn,’Fs’, fs,’NFFT’,1024) ;

 

 

 

 

 

روش Welch

روش Welch در جعبه ابزار پردازش سیگنال توسط شی spectrum . Welch  و یا تابع pwelch پیاده سازی شده است . به عنوان پیش فرض ، داده به ۸ قطعه با ۵۰% همپوشانی تقسیم می شود و پنجره همینگ برای محاسبه پریودوگرام اصلاح شده هر قطعه به کار می رود . یک سیگنال اولیه شامل ۳۰۱ نمونه را درنظر بگیرید :

>>fs=1000 ;                                  %Sampling frequency

>>t=(0:0.3*fs)./fs ;                       %۳۰۱ samples

>>A=[2 8] ;                                  %Sinusoid amplitudes(row vector)

>>f=[150;140] ;                          %Sinusoid frequencies (column vector)

>>Xn=A*sin(2*pi*f*t)+5*randn(sixze(t)) ;

>>Hs=spectrum.periodogram(‘rectangular’);

>>psd(Hs,xn,’Fs’,fs,’NFFT’,1024) ;

 

 

 

 

 

 

 

 

 

می توان تخمین طیف برای ۳ قطعه با ۵۰% همپوشانی را با دستور زیر به دست آورد .

>>Hs=spectrum.welch(‘rectangular’,150,50) ;

>>psd(Hs,xn,’Fs’,fs,’NFFT’,512) ;

 

 

 

روش Multitaper (MTM)

پریودوگرام می تواند به صورت فیلتر  کردن یک سیگنال  توسط یک باند فیلتری (یک مجموعه از فیلترهای موازی)  از فیلترهای میان گذر FIR طول L ، نیزبیان شود . روشMTM در جعبه ابزار  پردازش سیگنال ، توسط دستور pmtm و                             شی spectrum mtm.پیاده سازی می شود . استفاده از  spectrum mtm برای محاسبه PSD سیگنال xn مثال قبلی به صورت زیر است :

>>fs=1000;                           %Sampling frequency

>>t=(0:fs)/fs;                         %One second worth of samples

>>A=[1 2] ;                             %Sinusoid amplitudes

>>f=[150 ;140] ;                       %Sinusoid frequencies

>>xn=A*sin(2*pi*f*t)+0.1*randn(size(t)) ;

>>Hsl=spectrum.mtm(4,’adapt’) ;

>>psd(Hsl,xn,’Fs’,fs,’NFFT’,1024)

 

 

 

 

 

 

 

 

با کم کردن حاصل ضرب زمان در پهنای باند ، می توان رزولوشن را البته به بهای واریانس بالا افزایش داد :

>>Hs2-spectrum.mtm(3/2,’adapt’) ;

>>psd(Hs2,xn,’Fs’,fs,’NFFT’,1024)

 

 

 

 

تابع چگالی طیف متقابل

PSD یک مورد خاص تابع چگالی طیف متقابل (CPSD) مشخص شده بین دو سیگنال xn و yn است . برای تخمین چگالی طیف متقابل دو سیگنال با طول مساوی x  و y با استفاده از روش Welch تابع cpsd پریودوگرام را از حاصل ضرب FFT(x) و FFT*(y) به دست می آورد . برخلاف PSD با مقادیر حقیقی ، CPSD یک تابع مختلط است .

>>Sxy=cpsd(x,y,nwin,noverlap,nfft,fs)

 

 

 

تخمین تابع انتقال

یکی ازکاربردهای روش Welch شناسایی غیرپارامتری سیستم است . فرض کنید H  یک سیستم خطی و نامتغیر با زمان است و x(n) و y(n)  ورودی و خروجی H هستند . دستور tfestimate  از روش Welchبرای محاسبه CPSD و طیف توان استفاده می کند و سپس نسبت آن ها را برای تخمین تابع انتقال به دست می آورد . از  tfestimate به همان ترتیب دستور cpsd استفاده می شود . سیگنال xn را با یک فیلتر  FIR فیلتر  کرده و سپس اندازه واقعی پاسخ و پاسخ تخمین زده شده را رسم کنید .

>>h=ones(1,10)/10 ;                           %Moving-avverage filter

>>yn=filter(h,1,xn) ;

>>[HEST,f]=tfesmtimate(xn,yn,256,128,256,fs) ;

>>H=freqz(h,1,f,fs) ;

>>subplot(2,1,1) ;     plot(f,abs(H)) ;       title (‘Actual Transfer Function Magnitude’) ;

>>subplot(2,1,2) ;      plot(f,abs(HEST)) ;     title (‘Transfer Function Magnitude Estimate’) ;

>>xlable(‘Freqency(Hz)’) ;

 

 

 

 

 

 

 متلب

 

 

 

روش های پارامتری

روش های پارامتری روش هایی هستند که بردار آن ها PSD از یک سیگنالکه فرض می شود خروجی یک سیستم خطی با ورودی نویز سفید است تخمین زده می شود . این روش ها درصورتی که طول داده سیگنال نسبتاً کوتاه باشد نتایج بهتر از روش های غیر پارامتری کلاسیک می دهند .

روش Yule-Walker AR

روش Yule-Walker AR برای تخمین طیف ، پارامترهای AR را با تشکیل یک تخمین بایاسشده از تابع خودهمبستگی سیگنال و کمینه کردن حداقل مربعات خطای پیش بینی جلوسو ، محاسبه می کند . این محاسبات به معادلات Yule-Walker  می انجامد روش Yule-Walker AR نتایجی مشابه تخمین زننده حداکثر بی نظمی می دهد .

در این جعبه ابزار  شی spectrum.yulear و تابع pyulear ،                                    روش Yule-Walker AR را پیاده سازی می کنند . به عنوان مثال طیف یک سیگنال گفتار را با استفاده از روش Welch و Yule-Walker ARمقایسه کنید .

طیف Yule-Walker AR به دلیل مدل ساده تمام قطب استفاده شده ، هموارتر از پرویدوگرام است .

>>load mtlb

>>Hwelch=spectrum.welch(‘hamming’,256,50) ;

>>psd(Hwelch,mtlb,’Fs’,Fs,’NFFT’,1024) ;

>>Hyulear= spectrum.yulear(14) ;

>>psd(Hyulear,mtlb,’Fs’,Fs,’NFFT’,1024);

 

 

 

 

 

 

 

 

روش Burg

روش Burg برای تخمین AR ، برپایه حداقل کردن خطای پیش بینی جلوسو و عقب سو و در عین حال برآورده کردن بازگشت Levinson – Durbin است . درمقایسه با سایر روش های AR ، روش Burg از محاسبه تابع خودهمبستگی جلوگیری کرده و در عوض ضرایب انعکاس رابه صورت مستقیم تخمین می زند . شی جعبه ابزار  specturum-burg و تابع pburg ، روش Burg را پیاده سازی می کنند . طیف سیگنال گفتار تولید شده با دو روش Burg و Yule-Walker ARرا مقایسه کنید :

>>load mtlb

>>Hborg=spectrum.burg(14) ;                   %۱۴th order model

>>psd(Hburg,mtlb(1:512),’Fs’,Fs,’NFFT’,1024)

>>Hyulear=spectrum.yulear(14) ;             %۱۴th order model

>>psd(Hburg,mtlb(1:512),’Fs’,Fs,’NFFT’,1024)

 

 

 

 

 

 

 

طیف یک سیگنال نویزی محاسبه شده با دو روش Burg و Welch را مقایسه کنید :

>>fs=1000;                           %Sampling frequency

>>t=(0:fs)/fs  ;                       %One second worth of samples

>>A=[1 2] ;                             %Sinusoid amplitudes

>>f=[150 ;140] ;                       %Sinusoid frequencies

>>xn=A*sin(2*pi*f*t)+0.1*randn(size(t)) ;

>>Hwelch=spectrum.welch(‘hamming’,256,50) ;

>>psd(Hwelch,xn,’Fs’,fs,’NFFT’,1024) ;

>>Hburg=spectrum.burg(14) ;

>>figure

>>psd(Hburg,xn,’Fs’,fs,’NFFT,1024)

 

 

 

 

 

 

 

 

 

 

 

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

روش کواریانس وکواریانس اصلاح شده

روش کواریانس برای تخمین طیفAR ، بر پایه کمینه کردن خطای پیش بینی جلوسو است . روش کواریانس اصلاح شده بر پایه کمینه کردن خطاهای پیش بینی جلوسو و عقب سو است. شی جعبه ابزار  spectrum.cov و تابع  pcov به ترتیب روشهای گفته شده را پیاده سازی می کنند . طیف سیگنال گفتار تولید شده توسط هر دو روش کواریانس و کواریانس اصلاح شده حتی برای طول کوتاه سیگنال تقریباً مشابه اند .

پنجره ها

در حالت کار با فیلترهای دیجیتال و همچنین تخمین  طیف ، انتخاب تابع پنجره گذاری مناسب ، در تعیین کیفیت نتیجه کلی از اهمیت ویژه ای برخوردار است . هدف اصلی پنجره ، کاهش اثرات پدیده گیبس است که ناشی از برش یک سری نامحدود می باشد . توابع پنجره به صورت نشان داده شده درجدول زیر هستند :

 

 

 

 

 

 

 

دو ابزار GUI نیز در این جعبه ابزار  برای کار با پنجره ها فراهم شده اند . Wintool که وظیفه طراحی و تحلیل پنجره را بر عهده دارد و WVtool که برای مشاهده پنجره طراحی شده است .

>>n=50;

>>w=rectwin(n) ;

ساده ترین پنجره ، پنجره مستطیلی است که با یک بردار یک ها با طول مناسب ساخته می شود . برای مثال برای ساخت یک پنجره مستطیلی به طول ۵۰ از دستورات زیردر خط دستورات استفاده می شود :

 

 

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

با تنظیم type رویRectangular و Length روی ۵۰  و اعمال این تغییرات پنجره مورد نظر ساخته می شود .

پنجره بارتلت (یا مثلثی)حاصل کانولوشن دو پنجره مستطیلی است . دستورات مربوط به این دو پنجره Bartlett و triang است که پنجره های مشابهی تولید می کنند ، اما این پنجره ها کمی با هم تفاوت دارند . دستور   Bartlett دو صفر در ابتدا و انتهای آن نسبت به پنجره triang بیشتردارد . یعنی Bartelett(n+2) برابر با traing(n) است .

>>Bartlett(7)

>>triang(5)

 

 

پنجره های کسینوسی تعمیم یافته

>>ind=(0:n-1)’*2*pi/(n-1) ;

>>w=A-B*cos(ind)+C*cos(2*ind) ;

پنجره های بلکمن ، همینگ ، هنینگ ، فلت تاپ و مستطیلی همگی حالات خاصی از پنجره های کسینوسی تعمیم یافته هستند. این پنجره ها ترکیب دنباله های سینوسی با فرکانس های ۰،  و  هستند که N طول پنجره است . یا راه برای تولید آن ها به شکل زیر است :

 

 

که در آن A ، B و C ثابت هایی هستند که توسط کاربر تعریف میشوند . در واقع با جمع کردن ترم های جدا برای ساخت پنجره ، پیک های فرکانس پایین حوزه فرکانس ، طوری با هم ترکیب می شوند که ارتفاع لب کناری کاهش یابد که البته این ایراد را دارد که منجربه افزایش عرض لب اصلی می شود . برای مثال پنجره همینگ هم از طریق تابع مربوطه و هم با این روش A=0.54 و B=0.46 و پنجره هنینگ نیز با A=0.5 و B=0.5 و پنجره بلکمن با A=0.42 و B=0.5 و C=0.08 و پنجره فلت تاپ با A=1 و B=1.93 و C=1.29 و D=0.388 و E=0.322 قابل ساخت است .

پنجره کایزر

این پنجره تقریبی از پنجره prolate-spheroidal است که در آن نسبت انرژی لب اصلی به لب کناری ماکزیمم شده است . برای یک پنجره کایزر با طول مشخص ، پارامتر ارتفاع لب کناری را کنترل می کند برای یک خاص ارتفاع لب کناری با تغییر طول پنجره ثابت است . عبارت kaiser(n,beta) یک پنجره کایزر به طول n و پارامترهای  تولید می کند. برای ساخت پنجره کایزربا طول ۵۰ و مقادیر  برابر ۱ ، ۴ و ۹ ازدستورات زیر استفاده میشود

 

 

 

 

>>n=50;

>>w1=kiser(n,1) ;

>>w2=kiser(n,4) ;

>>w3=kiser(n,9) ;

>>[W1,f]=freqz(w1/sum(w1),1,512,2) ;

>>[W2,f]=freqz(w2/sum(w2),1,512,2) ;

>>[W3,f]=freqz(w3/sum(w3),1,512,2) ;

>>plot (f,20*log10(abs([w1 w2 w3]))) ;     gride;

>>legend(‘beta=1′,’beta=4′,’beta=9’,3)

 

 

 

 

 

 

 

 

 

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

>>w1=kiser(50,4) ;

>>w2=kiser(20,4) ;

>>w3=kiser(101,4) ;

>>[W1,f]=freqz(w1/sum(w1),1,512,2) ;

>>[W2,f]=freqz(w2/sum(w2),1,512,2) ;

>>[W3,f]=freqz(w3/sum(w3),1,512,2) ;

>>plot (f,20*log10(abs)([w1 w2 w3]))) (;     gride;

>>legend(‘length=50′,’length=20′,’length=101’)

 

 

 

 

 

 

 

 

 

 

مدل کردن پارامتری

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

دستورات قابل دسترسی مدل کردن پارامتری

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

 

 

 

 

 

 

 

 

 

 

روش های مدل کردن بر پایه حوزه زمان

توابع lpc ، prony و stmcb ضرایب یک تابع انتقال دیجیتال را که یک پاسخ ضربه داده شده درحوزه زمان را تقریب می زند ، پیدا می کنند . الگوریتم ها در پیچیدگی و صحت مدل حافظه تفاوت می کنند .

 

پیش بینی خطی

مدل کردن پیش بینی خطی فرض می کند که هر نمونه سیگنال خروجی ، x(k) ، ترکیب خطی n نمونه قبلی خروجی است (یعنی قابل پیش بینی خطی از این خروجی ها است) و ضرایب از نمونه به نمونه دیگر ثابت هستند .

یک مدل تمام قطب مرتبه n ام یک سیگنال x به صورت زیر محاسبه می شود :

>>x=impz(1,[1 0.1 0.1 0.1 0.1],10)+randn(10,1)/10;

>>a=lpc(x,a)

 

a=

۱٫۰۰۰۰    ۰٫۰۶۴۶            ۰٫۰۳۳۹              -۰٫۰۲۷۱                    ۰٫۰۹۵۶

 

 

 

 

 

 

Lpc در ابتدا xcorr را صدا می زند تا یک تخمین بایاس شده از تابع همبستگی x را پیدا کند و سپس از الگوریتم بازگشت Levinson-Durbin پیاده سازی شده در تابع Levinson استفاده می کند تا ضرایب مدل ، a ، را پیدا کند . کل الگوریتم lpc برای n=4 به شکل زیر است :

>>r =xcorr(x) ;

>>r(1:length(x)-1)=[] ;                      %Remove corr.at negative lags

>>a=levinson(r,4)

 

a=

۱٫۰۰۰۰    ۰٫۰۶۴۶             ۰٫۰۳۳۹                -۰٫۰۲۷۱                  ۰٫۰۹۵۶

 

 

 

 

 

 

می توان ضرایب پیش بینی خطی را با فرضیاتی دیگر با دادن تخمین همبستگی متفاوت به Levinson ، مانند تخمین بایاس شده همبستگی ، تشکیل داد :

>>r =xcorr(x,’biased’) ;

>>r(1:length(x)-1)=[] ;                         %Remove corr.at negative lags

>>a=levinson(r,4)

 

a=

۱٫۰۰۰۰              ۰٫۰۶۴۶         ۰٫۰۳۳۹           -۰٫۰۲۷۱              ۰٫۰۹۵۶

 

 

 

 

 

 

 

روش Prony (مدل کردن ARMA)

دستور Pronyیک سیگنال را با استفاده از تعداد مشخص صفرها و قطب ها مدل می کند . دستورات Prony و stmcb به صورت دقیق تری به عنوان یک مدل ARX در شناسایی سیستم ، توصیف می شوند . مدل کردن ARMA فقط نویز رابه عنوان ورودی فرض می کند ، در حالی که ARX یک ورودی خارجی را نیز در نظر می گیرد . برای Prony سیگنال ورودی یک ضربه و برای stmcb اختیاری می باشد . یک مدل دنباله تست x (از اولین مثال lpc) با استفاده از یک فیلتر  IIR مرتبه ۳ به شکل زیر است :

 

متلب

 

 

>>[b,a]=prony(x,3,3) ;

>>format long

>>[x impz(b,a,10)]

ans=

 

۱٫۱۰۷۸۷۲۵۴۱۷۶۷۸۵۶                ۱٫۱۰۷۸۷۲۵۴۱۷۶۷۸

-۰٫۰۷۰۶۴۰۶۸۴۰۷۳۳۲۳              -۰٫۰۷۰۶۴۰۶۸۴۰۷۳۳۲۳

-۰٫۰۳۳۸۱۰۸۰۷۶۸۳۳۴۷              -۰٫۰۳۳۸۱۰۸۰۷۶۸۳۳۴۷

۰٫۰۳۶۹۶۲۷۶۷۲۳۹۴۴۲                ۰٫۰۳۶۹۶۲۷۶۷۲۳۹۴۴۲

-۰٫۱۱۱۷۰۶۰۸۱۱۸۳۳۸۷              ۰٫۰۴۷۴۶۰۰۴۱۰۳۶۱۳۹

۰٫۰۱۷۴۰۶۲۴۱۸۳۳۲۲۸               ۰٫۰۱۲۳۳۷۴۶۴۶۹۵۸۰۶

۰٫۰۰۲۹۵۰۶۶۷۶۶۴۵۹۴              -۰٫۰۰۱۱۴۶۷۸۹۵۱۹۳۰۶

۰٫۰۱۰۸۸۲۹۹۹۰۷۶۱۶۲              -۰٫۰۱۴۷۵۷۰۸۳۵۳۹۱۶۴

-۰٫۰۱۱۴۷۳۲۷۶۹۱۱۴۷۶              ۰٫۰۰۹۶۱۲۸۵۹۷۶۵۱۷۸

۰٫۰۰۱۷۳۶۲۶۱۴۱۹۱۷۶               -۰٫۰۰۷۱۷۸۲۲۹۱۸۵۲۵۲

 

 

 

 

 

 

 

 

 

 

عبارت impz نشان می دهد که پاسخ پله فیلتر  تا چه حدی با دنباله اصلی تطبیق دارد . دقت شود که ۴ نمونه اول کاملاً تطبیق دارند . به عنوان مثال برای بازسازی دقیق ، ضرایب یک فیلتر  Butterworth را از پاسخ ضربه آن بازسازی کنید :

>>[b,a]=butte(4,.2) ;

>>h=impz(b,a,26) ;

>>[bb,aa]=prony(h,4,4) ;

 

 

 

 

روش Steiglitz-Mcbride (مدل کردن ARMA)

تابع stmcb ضرایب سیستم b(z)/a(z) را با دادن یک پاسخ پله تقریبی x و تعداد صفر و قطب مطلوب مشخص می کند . این تابع یک سیستم ناشناخته را براساس پاسخ پله سیستم و تعداد صفر و قطب شناسایی می کند . در حالت پیش فرض ،  stmcb مانند Prony عمل می کند .

>>[b,a]=stmcb(x,3,3) ;

 

 

 

 

همچنین stmcb سیستم هایی را پیدا می کند که با دنباله های داده شده ورودی و خروجی تطبیق می کنند :

>>y=filter(1,[1 1],x;                       %Creat an output singal

>>[b,a]=stmcb(y,x,0,1)

b=

 

۱٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰

a=

۱   ۱

 

 

 

 

 

 

 

در این مثال stmcb به صورت صحیحی سیستم استفاده شده برای تولید y از x را شناسایی می کند stmcb کنترل بر روی پارامترهای مهم متعدد الگوریتم را فراهم می کند . اگر در مدل کردن داده مشکل دارید ، این پارامترها را تغییر دهید . برای تغییر تعداد تکرار از مقدار پیش فرض آن ۵ و فراهم کردن تخمین اولیه ازضرایب مخرج می توان به صورت زیر عمل کرد :

>>n=10;

>>a=lpc(x,3) ;                      %linitil estimatesfor denominator

>>[b,a]=stmcb(x,3,3,n,a) ;

 

 

 

 

 

این تابع از مدل تمام قطب تولید شده توسط Prony به عنوان تخمین اولیه ، در صورت عدم فراهم کردن آن توسط خود فرد ، استفاده می کند . برای مقایسه توابع lpc ، Prony و  stmcb خطای سیگنال را برای هر مورد حساب کنید :

>>al=lpc(x,3) ;

>>[b2,a2]prony(x,3,3) ;

>>[b3,a3]=stmcb(x,3,3) ;

>>[x-impz(1,al,10)x-impz(b2,a2,10)x-impz(b3,a3,10)] ;

>>sum(ans.^2)

ans=

۰٫۰۲۳۹۲۴۱۷۴۱۰۳۷۶۸                  ۰٫۰۰۵۳۵۱۵۴۲۴۷۰۸۴۸               ۰٫۰۰۳۸۱۹۷۰۳۵۱۴۰۳۹

 

 

 

 

 

 

 

 

 

در مقایسه توانایی مدل کردن برای یک مدل IIR با مرتبه داده شده ، نتیجه آخر نشان می دهد که برای این مثال تابع stmcb بهتر از بقیه عمل می کند و سپس Prony و در نهایت lpc . این عملکرد نسبی یک نمونه معمول از توابع مدل کردن است .

روش های مدل کردن بر پایه حوزه فرکانس

توابع invfreqs و invfreqz عملیات عکس  freqs و freqz را پیاده سازی می کنند . آن ها تابع انتقال آنالوگ یا دیجیتال از یک مرتبه مشخص راکه با یک  پاسخ مختلط فرکانسی داده شده تطبیق می کند پیدا می کنند . با این که مثال بعدی invfreqz را شرح می دهد این بحث شامل invfreqs نیز می شود .

برای بازیابی ضرایب اصلی فیلتر  از پاسخ فرکانسی یک فیلتر  دیجیتال ساده به صورت زیر عمل کنید :

>>[b,a]=butter(4,0.4) ;                   %Design Butterworth lowpass

>>[h,w]freqz(b,a,64) ;                     %Comput frequsncy response

>>[b4,a4]=invfreqz(h,w,4,4) ;        %Model:n=4,m=4

 

 

 

 

 

 

 

واحد بردار فرکانس ها ، rad/sample و نیازی نیست که فاصله فرکانس ها مساوی باشد invfreqz یک فیلتر  از هر مرتبه ای را برای متناسب بودن باداده های فرکانس پیدا می کند . یک مثال مرتبه ۳ به شکل زیر است :

>>[b4,a4]=infreqz(h,w,3,3) ;                        %Find third-order IIR

 

 

 

 

هر دو دستور invfreqs و invfreqz فیلتر  هایی را با ضرایب حقیقی طراحی می کنند . برای نقاط داده در فرکانس مثبت f  ، این توابع با پاسخ فرکانسی در هر دوی f و –f تطبیق دارند . به عنوان پیش فرض invfreqz از یک روش خطای معادله برای مشخص کردن بهترین مدل برای داده استفاده می کند . عبارت invfreqz(h,w,n,m,wt) شامل بردار وزن ها است . در این حالت تضمین نمی شود که فیلتر  نتیجه شده از invfreqz پایدار باشد . invfreqz الگوریتم بهتری (خطای خروجی) را فراهم می کند که مشکل مستقیم ، کمینه کردن مجموع وزن دار مربع خطا بین پاسخ فرکانسی واقعی و پاسخ مطلوب را حل می کند . برای استفاده از این الگوریتم ، باید پارامتری را برای شمارش دفعات تکرار بعد از مقداردهی اولیه پارامتر بردار وزن ها با استفاده از دستورات زیر تعیین کنید :

>>wt=ones(size(w)) ;                            %Create unity weighting vector

>>[b30,a30]=invfreqz(h,w,3,3,wt,30) ;    %۳۰iterations

 

 

 

 

 

 

 

فیلتر  نتیجه شده همیشه پایدار است . نتایج الگوریتم های اول و دوم را برای فیلتر  باتروث اولیه توسط FVTool (پاسخ دامنه و فاز را انتخاب کنید) به صوت گرافیکی مقایسه کنید :

>>fvtool(b,a,b4,a4,b30,a30)

 

 

 

 

 

>>sum(abs(h-freqz(b4,a4,w)).^2)              %Total error,algorithm 1

ans=

۰٫۰۱۹۹۹۱۵۴۹۷۰۶۳۹

>>sum(abs(h-freqz(b30,a30,w)).^2)           %Total error,algorithm 2

ans=

۰٫۰۰۹۶۴۲۲۵۹۲۴۲۰۸۶

 

برای مشخص کردن برتری تطبیق به صورت عددی ، عبارات زیر را تایپ کند :

 

 

 

 

نمونه برداری مجدد

دستورات نمونه برداری قابل دسترسی

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

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

 

متلب

تحلیل کپستروم (Cepstrum)

تحلیل کپستروم یک تکنیک غیرخطی پردازش سیگنال با کاربردهای متنوع در کاربردهایی مانند پردازش گفتار و تصویر است.کپستروم مختلط برای یک دنباله x باپیداکردن لگاریتم مختلط طبیعی تبدیل فوریه x و سپس تبدیل فوریه معکوس دنباله حاصل ، محاسبه می شود . دستور cceps در این جعبه ابزار  ، این عملیات را انجام می دهد وکپستروم مختلط برای یک دنباله ورودی را تخمین می زند و دنباله ای حقیقی با اندازه ای برابر دنباله ورودی می دهد . برای دنباله هایی که ریشه هایی بر روی دایره واحد دارند ، تحلیل کپستروم مشکلات عددی دارد . به عنوان مثال ،  یک موج سینوسی ۴۵Hz با فرکانس نمونه برداری ۱۰۰Hz را ایجاد کنید و سپس یک echo از سیگنال با نصف دامنه و ۲/۰ ثانیه بعد از آغاز سیگنال را اضافه کنید . توجه شود که کپستروم مختلط قله ای در ۰٫۲sec نشان می دهد که نشان گر echo است :

>>t=0:0.01:1.27;

>>s1=sin(2*pi*45*t) ;

>>s2=s1+0.5*[zeros(1,20)s1(1:108)] ;

>>c=cceps(s2) ;

>>plot(t,c) ;

 

 

 

 

 

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

>>y=rceps(x) ;

 

 

 

 

 

نمی توان دنباله اصلی را از تبدیلات کپستروم حقیقی آن به دست آورد ، چون کپستروم حقیقی فقط بر پایه دامنه تبدیل فوریه دنباله است . تابع rceps یک دنباله واحد با حداقل فاز نیز برمی گرداند که کپستروم حقیقی مشابهی مانند  x دارد . برای دست یابی به کپستروم حقیقی و بازسازی حداقل فاز از دستور زیر استفاده کنید :

>>[y,ym]=rceps(x) ;

 

 

 

 

که y ، کپستروم حقیقی و ym بازسازی حداقل فاز x است . مثال زیر نشان می دهد که یک خروجی rceps ، یک دنباله واحد حداقل فاز با کپستروم حقیقی مشابه x است .

>>y=[4 1 5] ;               %Non-minimum phase sequence

>>[xhat,yhat]=rceps(y) ;

>>xhat2=rceps(yhat) ;            %xhat2 will be equal to xhat

 

 

 

 

 

 

کپستروم مختلط معکوس

برای معکوس کردن کپستروم مختلط ، از تابع icceps استفاده می شود . با توجه به این حقیقت که تابع cceps تغییرات و اصلاحاتی درفاز بسته به داده ،   به نحوی انجام می دهد که فاز ورودی آن در فرکانس صفر پیوسته باشد ، عملیات معکوس کردن پیچیده است . اصلاح و تغییر فاز مشابه یک تاخیر با مقدار عدد صحیح است . اگر شما خواستار خروجی دوم برای cceps نیز باشید ، این ترم تاخیر نیز توسط این تابع برگردانده می شود . به عنوان مثال :

>>x=1:10 ;

>>[xhat,delay]=cceps(x) ;

 

 

 

 

برای معکوس کردن کپستروم مختلط از ، icceps  با پارامترهای تاخیر اصلی استفاده کنید :

 

>>icc=icceps(xhat,2)

۲٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱

۳۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰

۴٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۲

۵٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۳

۶٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱

۷٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۲

۸٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۴

۹٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۴

۱۰٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰

۱٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱

 

 

 

 

 

 

 

 

همان طور که درمثال بالا نشان داده شده است ، با هر تغییر و اصلاحی در کپسترم مختلط ، ممکن است ترم تاخیر اصلی دیگر معتبر نباشد و شما نخواهید توانست کپسترم مختلط را به طور دقیق معکوس کنید .

تحلیل های زمان فرکانس بر پایه FFT

جعبه ابزار  پردازش سیگنال تابعی به نام spectrogram را فراهم می کند که تبدیل فوریه بسته به زمان برای یک دنباله را برمی گرداند و یا این اطلاعلات را به صورت اسپکتروگرام نمایش می دهد . این جعبه ابزار  همچنین شامل یک دموی اسپکتروگرام است . تبدیل فوریه بسته به زمان ، تبدیل فوریه گسسته برای یک دنباله است که با استفاده از پنجره متحرک محاسبه می شود . این شکل تبدیل فوریه ، به عنوان Short-time Fourier transform(STFT) نیز نامیده می شود . اسپکتروگرام یک دنباله ، دامنه تبدیل فوریه بسته به زمان در حوزه زمان است برای نمایش اسپکتروگرام یک سیگنال خطی FM به صورت زیر عمل کنید :

>>fs=1.0000;

>>t=0:1/fs:2;

>>x=vco(sawtooth(2*pi*t,.75),[0.1 0.4]*fs,fs) ;

>>spectrogram(x,kiserr(256,5),220,512,fs,’yaxis’)

 

 

 

 

 

 

 

دکانولوشن

دکانولوشن یا تقسیم چندجمله ای ، عملیات معکوس کانولوشن است . دکانولوشن برای بازسازی ورودی یک فیلتر با دادن خروجی فیلتر  ، مفید می باشد . برای مثال ابتدا بر وی دو بردار ساده a ، b عملیات کانولوشن انجام دهید ، سپس از دستور deconv برای دکانولوشن b از c استفاده کنید :

>>a=[1 2 3] ;

>>b=[4 5 6] ;

>>c=conv(a,b) ;

>>[q,r]=deconv (c,a)

q=

۴ ۵ ۶

r =

۰ ۰ ۰ ۰ ۰

 

 

 

 

 

 

 

 

 

فیلتر کردن میانی (Median Filtering)

تابع medifilt1 فیلتر  کردن میانی یک بعدی را با یک تکنیک غیر خطی شامل لغزاندن پنجره ای بر روی دنباله ، پیاده سازی می کند . فیلتر  میانی ، مقدار مرکزی هر پنجره را با مقدار میانی تمام نقاط در پنجره جایگزین می کند . در محاسبه این مقدار میانی ، medifilt1 اطراف نقاط ورودی را صفر در نظرمی گیرد. وقتی که تعداد عناصر در پنجره زوج باشد ، medifilt1 اعداد را ازکوچک به بزرگ مرتب کرده و سپس میانگین (n-1)/2 و (n-1)/2+1 عضو را می گیرد . دو مثال ساده از فیلتر  های مرتبه سوم و چهارم به شکل زیر هستند :

>>medifilt1([4 3 5 2 8 9 1],4)

ans=

۱٫۵    ۳٫۵   ۳٫۵   ۴   ۶٫۵   ۵     ۴٫۵

>>medifilt([4 3 5 2 8 9 1],3)

ans=

۳  ۴ ۳ ۵ ۸ ۸ ۱

 

 

 

 

 

 

 

کاربردهای مخابراتی

نوسان ساز کنترل شده با ولتاژ

تابع نوسان ساز کنترل شده با ولتاژ ، voc ، سیگنالی تولید می کند که در فرکانسی که در بردار ورودی مشخص شده ، نوسان می کند .

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

>>[y,t]=modulate(x,fc,fs,’method’,opt)

 

 

 

دمدولاسیون

تابع demod ، دمدولاسیون را که به دست آوردن سیگنال پیام اصلی از سیگنال مدوله شده است ، انجام می دهد ، دستور demod به شکل زیر است :

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

 

 

 

 

اگر ورودی y ، یک آرایه باشدتابع demod تمام ستون های آن را دمدوله می کند .

یک موج سینوسی ۵۰Hz با فرکانس نمونه برداری ۱۰۰۰Hz مدوله و دمدوله کنید :

>>t =(0:1/1000:2) ;

>>x=sin(2*pi*50*t) ;

 

 

 

 

با فرکانس حامل ۲۰۰Hz ، مدوله شده و دمدودله شده این سیگنال به صورت زیر است :

>>y=modulat(x,200,1000,’am’) ;

>>z=demod(y,200,1000,’am’) ;

 

 

 

 

برای رسم قسمتی از سیگنال اصلی ، مدوله و دمدوله شده ، دستورات زیر را تایپ کنید :

>>subplot(3,1,1) ;      plot(t(1:150),x(1:150)) ;         title(‘Original signal’)

>>subplot(3,1,2) ;      plot(t(1:150),y(1:150)) ;        title(‘Modulated signal’)

>>subplot(3,1,3) ;      plot(t(1:150),z(1:150))  ;       title(‘Demodulated signal’)

 

 

 

 

 متلب

 

تبدیلات خاص

تبدیل Chirp z

تبدیل Chirp z (CZT) برای ارزیابی تبدیل z در طول کانتورهایی غیر ازدایره واحد مناسب می باشد . تبدیل CZT ، تبدیل z یک دنباله ورودی را در راستای کانتورهای مارپیچ در صفحه z محاسبه می کند . بر خلاف DFT ، CZT برای عملیات در راستای دایره واحد مناسب نمی باشد ، اما تبدیل z در راستای کانتورهای مشخص شده به طوری که A ، محل مختلط آغاز ، w ، یک اسکالر مختلط توصیف کننده نسبتبه مختلط بین دو نقطه در کانتور و M ، طول ، را ارزیابی می کند . یک مارپیچ ممکن به شکل زیر است و سپس با دستور czt تبدیل z در این نقاط محاسبه می شود .

>>A=0.8*exp(j*pi/6) ;

>>W=0.995*exp(-j*pi*.05) ;

>>M=91;

>>z=A*(W.^(-)(0:M-1))) ;

>>zplan([],z’.)

>>czt(z,M,W,A) ;

 

 

 

 

 

 

 

 

 

تبدیل کسینوسی گسسته

تبدیل گسسته کسینوسی (DCT) خیلی مشابه DFT است . تابع dct موجود در این جعبه ابزار  ، تبدیل کسینوسی گسسته واحد یا DCT را برای یک بردار یا ماتریس ورودی محاسبه می کند . تابع idct ، DCT معکوس را برای دنباله ورودی محاسبه کرده و یک سیگنال را از یک مجموعه کامل یا جزئی ضرایب DCT ، بازسازی می کند . بازسازی یک سیگنال از یک کسری از ضرایب DCT نیز ممکن است . به عنوان مثال ، یک دنباله سینوسی ۲۵Hz با فرکانس نمونه برداری ۱۰۰۰Hz ایجاد کنید :

>>t=(0:1/999:1) ;

>>x=sin(2*pi*25*t) ;

 

 

 

 

 

 

 

 

DCT این دنباله را محاسبه کرده و سیگنال را فقط از اجزایی با مقدار بزرگتر از ۱/۰ (۶۴ عدد از ۱۰۰۰ضریب DCT) بازسازی کنید :

>>y=dct(x) ;                                      %ComuteDCT

>>y2=find(abs(y)<0.9) ;                  %Use 17coffociennts

>>y(y2)=zeros(size(y2)) ;               %Zero out points<0.9

>>z=idct(y) ;                                    %Reconstruc signal w/invers DCT

 

 

 

 

 

 

 

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

>>subplot(2,1,1) ;      plot(t,x) ;      title(‘Orginal Signal’)

>>subplot(2,1,2) ;      plot(t,z) ;     title(‘Reconstructed Signal’)

>>axis([0 1 -1 1]) ;

 

 

 

 

 

 

 

تبدیل هلیبرت

تبدیل هلیبرت تشکیل سیگنال تحلیلی را تسهیل می کند . سیگنال تحلیلی در محدوده ارتباطات ، مخصوصاً در پردازش سیگنال میان گذر ، مفید است . دستور hilbert در این جعبه ابزار  ، تبدیل هیلبرت را برای یک دنباله حقیقی ورودی x محاسبه می کند و یک نتیجه مختلط با همان طول می دهد (y=Hilbert(x)) که بخش حقیقی y ، داده حقیقی اصلی و اولیه و بخش موهومی آن تبدیل هلیبرت واقعی است . y در بعضی موارد با مراجعه به سیگنال تحلیل پیوسته در زمان ، سیگنال تحلیلی نامیده می شود . تبدیل هلیبرت مربوط به داده واقعی با شیفت فاز ۹۰ درجه (سینوس تبدیل به کسینوس و برعکس) است . ترسیم یک قسمت داده (خط یکنواخت) و تبدیل هلیبرت (خط چین) برای یک سیگنال سینوسی به صورت زیر است:

>>t=(0:1/1023:1) ;

>>x=sin(2*pi*60*t) ;

>>y=Hilbert(x) ;

>>plot(t(1:50),realy(y(1:50))),        hold on

>>plot(t(1:50),imag(y(1:50)),’:’),          hold off

 

 

 

 

 

 

 

واسط های گرافیکی کاربر (GUIs)

Wvtool

این GUI وسیله ای برای مشاهده پنجره ها می باشد .

دستور قابل استفاده wvtool(winname(n)) است که GUI مشاهده پنجره را باز کرده و پنجره مشخص شده با winname با طول n را در حوزه زمان و فرکانس نشان می دهد . با استفاده از دستور زیر GUI مربوطه تمامی پنجره های مشخص شده را دریک صفحه و با یک محور نشان می دهد و امکان مقایسه آن را فراهم می کند .

>>wvtool(winnamel(n),winname2(n),….winnamem(n))

 

 

 

 

 

 

 

توجه شود که اگر این پنجره (WVtool) از طریق FDATool باز شود ، یک آیکون Add/Replace که کنترل کننده ورود پنجره های جدید از FDATool به آن است نیز در نوارابزار ظاهر می شود . با استفاده از دستور زیر می توان مقایسه پنجره های گوسی ، همینگ ، و هنینگ را با هم مقایسه کرد .

>>wvtool(hamming(64),hann(64),gausswin(64))

 

 

 

 

 

 

 

 

Wintool

این GUI ابزاری برای تحلیل و طراحی پنجره است . فرمت دستور به صورتwintool (obj1,obj2,…) می باشد . این دستور GUI مربوطه را باز کرده و پنجره های مربوط به  obj1,obj2 را نشان می دهد . در حالت پیش فرض ، این GUI یک پنجره همینگ ۶۴ نقطه ای را نمایش می دهد .

صفحه اصلیwintool سه بخش عمده دارد :

  1. Window Viewer : نمایش دهنده رسم های حوزه زمان و فرکانس پنجره های مربوطه می باشد . در این بخش نتیجه محاسبه میزان نشتی ، تضعیف نسبی لب کناری و عرض لب اصلی نیز نشان داده شده است .
  2. Window List : لیست پنجره های قابل نمایش در جعبه ابزار را نشان می دهد . با کلیک کردن بر روی گزینه Add a new window به صورت پیش فرض یک پنجره همینگ با طول ۶۴ تولید می شودو با گزینه save to workspace پنجره های انتخاب شده به صورت برداری با نام خودشان در workspace ذخیره می شوند .
  3. Current window Information : اطلاعات مربوط به پنجره باز شده را نشان می دهد . با تغییر ویژگی های آن کلیک کردن روی apply تغییرات به پنجره اعمال می شود . در قسمت parameter پارامترهای اضافی که بعضی از پنجره ها مانند پنجره چپیچف (تضعیف لب کناری) لازم دارند ، نمایش داده می شود و در بخش sampling نوع نمونه برداری برای پنجره های تعمیم یافته کسینوسی (همینگ ، هنینگ و بلکمن) تنظیم می شود .

با انتخاب گزینه periodic یک پنجره با طول n+1 محاسبه شده و n نمونه اول برگردانده می شود . گزینه symmetric نقطه مشخص شده در طول را محاسبه کرده و در خروجی می دهد .

 

 

 

منوهای wintool

علاوه بر موارد معمول ، wintool شامل موارد زیر می باشد :

Export(File menu) : بردارهای ضرایب پنجره ها و یا objects sigwin window را به workspace ، یک فایل متنی و یا یک MATfile می فرستد .

Full View Analysis (File menu) : پنجره های رسم شده را در یک wintool مجزا کپی می کند . این فایل برای پرینت مناسب است .

FVTool

اینGUI ابزاری برای مشاهده فیلترها است . با تایپ fvtool(b,a) در خط دستورات ، GUI مربوطه باز می شود و پاسخ دامنه فیلتر  دیجیتالی را که ضرایب صورت آن در b و ضرایب مخرج در a ذخیره شده نشان می دهد . با استفاده از FVTool می توانید پاسخ فاز ، group delay ، پاسخ ضربه ، پاسخ پله ، مکان صفر و قطب ها و ضرایب فیلتر  را مشاهده کنید . همچنین می توان چند فیلتر  را هم زمان با fvtool(b1,a1,b2,a2,…,bn,an) مشاهده کرد .

پیوند با FDATool  :در FDATool در قسمت View>>Filter Visualization Tool می توان وارد FVTool شد . با استفاده از گزینه FDAToolLink Activate قادر به هماهنگ کردن این دو GUI هستید . به این معنی که هر تغییری در FDATool در فیلتر ایجاد شود بلافاصله در FVToolقابل مشاهده خواهد بود .

مشاهده قسمت های مختلف فیلتر  هم از خط فرمان و هم از خود GUI قابل انجام است . برای مثال برای مشاهده دامنه یک فیلتر  الیپتیک می توان از دستورات زیر در خط فرمان استفاده کرد .

>>[b,a]=ellip(6,3,50,300/500) ;

>>fvtool(b,a) ;

 

 

 

 

 

 

 

برای مشاهده و تحلیل هم زمان چند فیلتر در FVTool و با استفاده از خط فرمان می توان به شکل زیر عمل کرد .

>>b1=firmp(20,[0 0.4 0.5 1],[1 1 0 0 ]) ;

>>b2=firmp(40,[0 0.4 0.5 1],[1 1 0 0 ]) ;

>>fvtool(b1,1,b2,1) ;

 

 

 

 

 

 

 

 

FDATool

ابزار طراحی و تحلیل فیلتر  (FDATool) یک GUI قدرتمند برای طراحی و تحلیل سریع فیلترها است . FDATool قادر به طراحی فیلترهای FIR و IIR دیجیتال ، با تنظیم مستقیم ویژگی های فیلتر  و یا با وارد کردن فیلترهااز workspace و یا با اضافه و یا حذف کردن صفر و قطب می باشد این ابزار همچنین قادر به تحلیل ویژگی های مختلف فیلتر  از قبیل پاسخ فاز یا دامنه یا نمایش صفر و قطب است FDATool روش های مختلف طراحی فیلتر  را فراهم می کند . در هنگام استفاده از روش پنجره در FDATool هم می توان از همه توابع پنجره موجود در جعبه ابزار  پردازش سیگنال استفاده کرد و هم می توان یک پنجره دلخواه با بیان تابع و پارامتر مربوطه تعریف کرد . روش های پیشرفته تری نیز برای طراحی فیلتر  موجود هستند .

SPTool

SPToolیک GUI برای اعمال پردازش سیگنال های دیجیتال از قبیل تحلیل سیگنال ها ، طراحی فیلترها ، تحلیل و مشاهده فیلترها ، اعمال  فیلترها به سیگنال ها و تحلیل طیف سیگنال ها می باشد . این اعمال با استفاده از چهار GUI موجود در SPTool امکان پذیر است که عبارتند از signal Browser (برای تحلیل یا شنیدن سیگنال ها) ، FDATool (برای طراحی و تحلیل فیلترها) ، FVTool (برای تحلیل ویژگی های فیلترها) و Spectrum Viewer (برای تحلیل های طیفی) .

در SPTool قادر به تحلیل همه انواع سیگنال ها ، فیلترها و طیف هایی هستید که در خط فرمان تولید شده اند . ورود این موارد به SPTool از طریق منوی File>>Import امکان پذیر است . همچنین فرستادن سیگنال ها ، فیلترها و یا طیف هایی که در SPTool تولید یا اصلاح شده اند به خارج آن یا برای ذخیره  آن ها از طریق منوی File>>Export ممکن باشد .

برای باز کردن SPTool در خط فرمان SPTool را تایپ کنید . با باز شدن این GUI مجموعه ای از سیگنال ها ، فیلترها و طیف های پیش فرض در آن مشاهده می شود . برای مشاهده هر کدام از GUI های داخلی                                                                                 ( Spectrum Viewer Filter Visualization Tool Signal Browser) دکمه View مربوطه را فشار دهید . با انتخاب کلید Apply در قسمت فیلترها ، فیلتر  انتخاب شده به سیگنال انتخاب شده اعمال می شود. دکمه create ، بخش  Spectrum Viewer را باز کرده چگالی طیف توان سیگنال انتخاب شده را رسم می کند . دکمه Update ، بخش Spectrum Viewer را برای طیف انتخاب شده باز می کند .

بخش  Signal Browser

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

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

بخش FDATool

امکان دست یابی به یک نسخه (البته محدودتر)  FDATool برای طراحی SPTool وجود دارد . برای بازکردن آن از دکمه New (برای ساخت فیلتر  جدید) در زیر لیست فیلترها و یا Edit (برای اصلاح فیلترهای قبلی) استفاده می شود . همچنین با کلیک بر روی دکمه View می توان یک نسخه  FVToolمتصل به SPTool را داشت ، به این معنی که هر تغییری در SPTool بلافاصله در آن آشکار می شود .

بخش Spectrum Viewer

از این بخش برای تخمین و تحلیل طیف توان سیگنال در جهت فهم محتوای فرکانسی سیگنال استفاده می شود . این بخش قادر به تحلیل و مقایسه رسم های چگالی طیف ، انجام روش های مختلف تعیین طیف برای ساخت طیف (مانندBurg(pburg) ، Covariance (pcov) ، FFT (fft) ، Modified convariance (pmcov) ، MTM یا multitaper method (pmtm) ، MUSIC (pmusic) ، Welch (pwelch) وYule-WalkerAR (pyulear)) ، اصلاح پارامترهای چگالی طیف توان مانند طول FFT ، نوع پنجره و فرکانس نمونه برداری و همچنین چاپ رسم های طیفی می باشد .

برای بازکردن این بخش و ساخت یک تخمین چگالی طیف توان (PSD) در SPTool ، یک سیگنال از قسمت سیگنال ها انتخاب شده و در زیرلیست طیف دکمه create را انتخاب کرده و سپس از طریق دکمه Apply وارد آن شوید. همچنین با انتخاب یکی از تخمین های طیف موجود در لیست طیف و انتخاب دکمه Viewدر زیر لیست نیز پنجره Spectrum Viewer باز می شود . برای مثال mtlbse را در لیست سیگنالهای پیش فرض انتخاب کرده و گزینه Apply در Spectrum Viewer را انتخاب کنید تا طیف مربوطه رسم شود .

پنجره بالا از بخش های زیر تشکیل شده است :

یک بخش شناسایی سیگنال که فراهم کننده اطلاعات سیگنال مربوطه است ، بخش پارامترها برای اصلاح پارامترهای PSD ، یک بخش نمایش برای تحلیل طیف و منوهای مختلف برای اصلاح ویژگی های نمایش ،  بخش کنترل کننده های مدیریت طیف که شامل منوی Inhert form (برای استفاده از تنظیمات طیف یک سیگنال دیگر روی طیف حاضر) ، دکمه Revert برای بازگشت به تنظیمات اولیه ، دکمه Apply برای تولید یا بروز رسانی تخمین های PSD  می باشد و در نهایت یک نوار ابزار با دکمه هایی برای دسترسی آسان به توابع پرکاربرددر این بخش موجود است .

در ادامه مثال هایی برای استفاده از این GUI در طراحی فیلتر FIR میان گذر دیجیتال ، اعمال فیلتر  به یک سیگنال نویزی و تحلیل سیگنال و طیف آن ارایه می شود . ابتدا یک سیگنال نویزی در workspace تولید کرده و سپس وارد SPTool می شوید . سپس فیلتر  مربوطه را با ویژگی هایی که در ادامه بیان خواهد شد ،  طراحی کرده و سپس فیلتر  را به سیگنال نویزی اعمال می کنید تا یک سیگنال نویز با باند محدود تولید شود سپس اطلاعات حوزه زمان و طیف سیگنال اصلی و فیلتر  شده را به ترتیب در Signal Browser و Spectrum Viewer مشاهده و مقایسه خواهید کرد .

برای وارد کردن سیگنال به SPTool سیگنال باید یا یک متغیر (بردار یا ماتریس) که در workspace  تولید شده باشند و یا یک ساختار خاص داشته باشد . برای این مثال سیگنالی در خط فرمان و با استفاده از دستورات زیر تولید شده و به SPTool وارد میشود .

 

>>randn(‘state’,0) ;

>>x=randn(5000,1) ;

>>sptool

 

 

 

 

متلب

 

برای وارد کردن سیگنال به SPTool پنجره وارد کردن در منوی File بر روی گزینه Import کلیک کرده تا پنجره مربوطه باز شود . متغیر x در لیست workspace موجود است . سیگنال را انتخاب کرده و روی فلش موجود در سمت راست آن کلیک کنید . در بخش فرکانس نمونه برداری عدد ۵۰۰۰ را وارد کرده و نام سیگنال راهم noise قرار داده و سپس دکمه ok را فشار دهید . این کار موجب اضافه شدن سیگنال به لیست سیگنال های موجود در SPTool می شود . عمل وارد کردن فیلتر  و طیف نیز  SPTool به همین شکل است . همچنین می توان سیگنال ها را از فایل های MAT ذخیره شده هم وارد این بخش کرد .

قدم بعدی طراحی فیلتر  است . می توان فیلتری که از پیش طراحی شده را وارد SPTool کردو همچنین می توان یک فیلتر جدید در بخش FDATool آن طراحی نمود . در این مثال فیلتر پیش فرض در fdatool  را باز کرده و یک فیلتر  FIR میان گذر equiripple طراحی کنید . برای این کار در SPTool روی گزینه New کلیک کنید . FDATool یک فیلتر  پیش فرض با نام filt1 باز می کند . فیلتر  را با مشخصات زیر طراحی کنید : فرکانس نمونه برداری را برابر ۵۰۰۰ قرار داده ، محدوده های توقف را برابر [۰ ۵۰۰] و [۱۵۰۰ ۲۵۰۰] هرتز و محدوده عبور را برابر [۷۵۰ ۱۲۵۰] تنظیم کرده ، مقدار ریپل در باند عبور ۰٫۰۱dB و تضعیف باند توقف را۷۵dB قرار دهید .

با انتخاب گزینه Design Filter فیلتر  میان گذر  equiripple با مرتبه ۷۸ تولید می شود.

برای اعمال فیلتر  طراحی شده به سیگنال ، در پنجره SPTool سیگنال [vector] noise  را از لیست سیگنال ها و [design] filt1 (فیلتر  طراحی شده) را هم از لیست فیلترها انتخاب کرده و بر روی دکمه Apply در زیر لیست فیلتر کلیک کنید . در پنجره باز شده در بخش Algorithm دو انتخاب وجود دارد . الگوریتم پیش فرض مختص ساختار فیلتری است که در بخش FDATool Current filter Info نشان داده شده است . همچنین از الگوریتم توصیف شده در fftfilt در گزینه FFT based FIR (fftfilt) استفاده می شود . برای فیلتر  های IIR الگوریتم دوم یکIIR فاز صفر است که در fftfilt توصیف شده است .

نام سیگنال خروجی را b1noise قرار دهیدو ok کنید .

با اعمال فیلتر  به سیگنال ، سیگنال [vector] blnoise در لیست سیگنال ها ظاهر می شود .

مشاهده ، تحلیل ، چاپ و گوش کردن به سیگنال از طریق Signal Browser میسر است برای مثال با نگه داشتن دکمه shift و کلیک بر روی سیگنال های noise و blnoise در لیست سیگنال ها در پنجره SPTool و کلیک روی دکمه view در زیر لیست ، Signal Browser باز شده و هر دو سیگنال نمایش داده می شوند . نام هر دو سیگنال نیز در بالای صفحه نمایش نشان داده شده است . در حالت اولیه سیگنال نویز اولیه روی سیگنال فیلتر شده قرار می گیرد . با کلیک بر روی دکمه Select Trance  در نوار ابزار بالای پنجره Signal Browser سیگنال blnoise انتخاب می شود . در این حالت این سیگنال روی سیگنال اولیه قرار گرفته و قابل مشاهده است . برای تغییر رنگ سیگنال ها هم می توان از دکمه Line Properties در نوار ابزار بالای پنجره استفاده کرد .

برای اجرای سیگنال نیز می توان از دکمهplay در نوار ابزار بالای صفحه استفاده کرد . برای گوش دادن به تنها بخشی از سیگنال ابتدا بخش مورد نظر را با استفاده از گزینه های Vertical markers و Vertical markers with Tracking انتخاب کرده و دکمه play را کلیک کنید . برای شنیدن سیگنال دیگر نیز ، سیگنال را به همین شکل انتخاب کرده و دکمه play را فشار دهید .

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

برای تحلیل محتوای فرکانسی سیگنال با استفاده از  Spectrum Viewer (که تخمین زننده و نمایش دهنده چگالی طیف توان سیگنال است) سیگنال مربوطه را انتخاب کرده و در زیرلیست طیف ، دکمه Create را فشار دهید . صفحه Spectrum Viewer باز می شود ولی هنوز تخمین قابل رویت نمی باشد . بافشار دادن دکمه Apply تخمین مربوطه (spect1)با استفاده از تنظیمات پیش فرض نشان داده می شود . تخمین طیف سیگنال اصلی بین ۲ یا ۳dB است . در نتیجه می توان گفت که نویز تقریباً چگالی طیف توان مسطحی دارد . همه مراحل بالا برای سیگنال فیلتر شده هم انجام می شود تا تخمین PSD آن (spect2) نیز نمایش داده شود. تخمین طیف سیگنال طیف فیلتر شده نیز در محدوده ۷۵۰ تا ۱۲۵۰ هرتز نسبتاً مسطح بوده و در مناطق توقف، ۷۵dB کمتر است . می توان هر ۲ طیف را به صورت هم زمان نیز مشاهده کرد . برای این کار دکمه Ctrl  را نگه داشته و روی تخمین طیف هر دو سیگنال (spect1 و spect1) کلیک کرده و دکمه View را بفشارید .

فرستادن سیگنال ، فیلتر و طیف به خاج SPTool

برای مثال ، برای فرستادن فیلتر filt1 ابتدا آن را انتخاب کرده و سپس با کلیک بر روی گزینه Export از منوی File پنجره مربوطه باز می شود . برای فرستادن این فیلتر به Workspace از لیست تنها این فیلتر را انتخاب کرده و گزینه Export to Workspace را کلیک کنید .

فهرست

طراحی و تحلیل فیلترها

۲-۱ طراحی فیلتر

۲-۲ نمایش صفرها و قطب ها در FDATool

۲-۳ چندی کردن (Quantizing) فیلتر با استفاده از جعبه ابزار FDATool

۲-۴ فیلترهای چند نرخه

۲-۵ تبدیل فیلترهای FIR و Complex

۲-۶ فیلترهای تطبیقی

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

مقدمه

جعبه ابزار طراحی و تحلیل فیلتر (FDATool) یک ابزار قدرتمند برای طراحی و تحلیل سریع فیلترهاست که با تنظیم مشخصات فیلتر ، اضافه کردن فیلتر از Workspace و جابجایی و کم و زیاد کردن صفرها و قطب های امکان طراحی فیلترهای دیجیتال FIR و IIR را فراهم می کند . همچنین با امکاناتی نظیر پاسخ دامنه و فاز و رسم صفر و قطب ابزاری برای تحلیل فیلتر می باشد .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

طراحی فیلتر

در این بخش با استفاده از چند مثال با جعبه ابزار FDATool که به منظور طراحی فیلترهای گوناگون همچون IIR ، FIR و چند نرخه با پاسخ فرکانسی خاص به کمک روش های طراحی متفاوت همچون باتروث ، چبی چف ، پنجره و سایر روش های طراحی فیلتر استفاده می شود آشنا خواهید شد .

مثال: طراحی فیلتر با استفاده از جعبه ابزار FDATool

هدف مساله : آشنایی با طراحی فیلتر توسط جعبه ابزار FDATool

صورت مساله : با استفاده از الگوریتم Remez یک فیلتر میان گذر FIR با فرکانس نمونه برداری ۲۰۰۰Hz، باند عبور ۳۰۰-۷۰۰Hz و دامنه ۱/۰ دسی بل برای باند عبور و تضعیف ۷۵ دسی بل برای باندتوقف ، با در نظر گرفتن Density Factor برابر با ۱۶ ، به کمک FDATool طراحی کنید .

گام اول : برای باز کردن جعبه ابزار FDATool ، با نوشتن دستور fdatool در پنجره فرمان ، محیط GUI به صورت زیر باز می شود .

گام دوم : به منظور طراحی یک فیلتر میان گذر ، گزینه Bandpass را مطابق شکل در قسمت Response Type محیط GUI باز شده ، انتخاب کنید .

گام سوم : برای انتخاب روش طراحی برای پاسخ مورد نظر باید از قسمت Design Method .گزینه مورد نظر را انتخاب کرد . در این مثال برای محاسبه ضرایب فیلتر FIR با استفاده از الگوریتم Remez ، روش Equiripple را از لیست ومربوطه انتخاب کنید .

گام چهارم : مشخصات فیلتر را بسته به نوع پاسخ و روش طراحی می توان تغییر داده و تعیین کرد . برای دیدن مشخصات فیلتر ، در نوار ابزار بالای پنجره بر روی دکمه Filter Specifications کلیک کنید.

گام پنجم : برای انتخاب مرتبه (Filter Order)دو گزینه Specify order و Minimum order وجود دارد . توجه شود که انتخاب هر یک از این گزینه ها به روش طراحی فیلتر بستگی دارد . در بعضی از فیلترها ممکن است هر دو گزینه وجود نداشته باشد.

در این مثال مرتبه فیلتر به صورت حداقل انتخاب می شود .

گام ششم تنظیم گزینه های Options

گزینه موجود بستگی به روش طراحی فیلتر دارد . روش های مختلف طراحی فیلتر را می توان از منوی کشویی موجود در قسمت Response Type تعیین کرد .

فقط برای روش های طراحی FIR Equiripple و FIR Window و برای بعضی پاسخ های فرکانسی خاص ذکر شده در جدول زیر ، گزینه های قابل تنظیم ذکر شده است.

برای FIR Equiripple ، گزینه Dencity Factor و برای FIR windowگزینه scale Passband و انتخاب Window وجود دارد که برای هر پنجره ، پارامتر قابل تنظیم به صورت جدول زیر موجود می باشد .

 

 

 

می توان پنجره انتخابی راتوسط (wvtool) Window Visualization Tool با کلیک دکمه View مشاهده کرد . در این مثال ، پارامتر Density factor را ۱۶ قرار دهید .

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

– واحد فرکانس (Hz,KHz,MHz,Normalized(0-1))

– فرکانس نمونه برداری

– فرکانس های باند عبور

– فرکانس باند توقف

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

– فرکانس نمونه برداری :Fs=2000

– انتهای باند توقف اول :Fstop1=200

– ابتدای باند عبور :Fpass1=300

– اتهای باند عبور : Fpass2=700

– ابتدای باند عبور توقف دوم : Fstop2=800

مشخصات دامنه فیلتر میان گذر

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

– واحد پاسخ دامنه (dB یا خطی)

– ریپل باند عبور

– تضعیف باند توقف

گام هشتم : حال که مشخصات فیلتر مورد نظر را وارد کردید ، برای مشاهده پاسخ های فیلتر و به دست آوردن ضرایب مربوطه بر روی دکمه Design Filter کلیک کنید .

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

فیلتر طراحی شده را به روش های مختلفی می توان ذخیره نمود . برای این کار می توان ضرایب فیلتر را به Workspace ، MAT File و SPTool فرستاد . این کار هم از طریق فرستادن متغیرهای ضرایب فیلتر و هم به صورت متغیر شی فیلتر میسر است . برای ذخیره کردن فیلتر در Workspace ابتدا از طریق گزینه Export در منوی File پنجره فرستادن را باز کنید و سپس در بخش Export To گزینه Workspace را انتخاب نمایید . برای فرستادن از طریق ضرایب یا شی گزینه مورد نظر در Export As را انتخاب کرده و در بخش Variable Names قسمت های مربوطه را تنظیم کنید . در حالتی که متغییرهایی به همین نام در Workspace وجود داشته باشند و بخواهید روی آن ها بنویسید ، باید گزینه Overwirte Variables انتخاب شده باشد . در انتها هم بر روی دکمه Export کلیک کنید . برای فرستادن ضرایب به یک MAT File با یک شی گزینه MAT-file را انتخاب کرده و بسته به این که قصد ذخیره کردن آن به صورت ضرایب یا شی را داشته باشید ، بخش های مربوطه انتخاب شده و سایر موراد بر طبق حالت انتخاب شده تنظیم می شوند .

همچنین با انتخاب Gennerate M-file در قسمت File به کدهای مربوطه برای فیلتر می توان دسترسی داشت .

نمایش صفرها و قطب ها در FDATool

یکی از امکانات FDATool تغییر مکان و یا تعداد صفرها و قطب های فیلتر و نمایش هم زمان این تغییرات در پاسخ ها ، تخمین ها و حتی پایداری فیلتر می باشد . در این قسمت می توان یک فیلتر طراحی شده و یا وارد شده را با جابجایی یا حذف و اضافه کردن صفر و قطب اصلاح کرد صفر و قطب های کوانتیزه شده قابل جابجایی نیستند ، تنها صفر و قطب های مرجع را می توان جابجا کرد . می توان از طریق گزینه Pole/Zero Editor در منوی Edit و یا فشار دادن دکمه Pole/Zero Editor در نوار ابزار کناری برای نمایش این بخش استفاده کرد . قطب ها با علامت x و صفرها با علامت o نشان داده می شوند. برای تغییر مکان قطب و صفرها ، اضافه کردن قطب ، اضافه کردن صفر و حذف صفر قطب از نوار ابزار گوشه بالای سمت چپ قسمت نمودار صفر و قطب استفاده می شود .

چندی کردن (Quantizing) فیلتر با استفاده از جعبه ابزار FDATool

فیلترهای چندی شده این مزیت را دارند که با آن ها می توان داده های چندی شده مشخصی را فیلتر کرد . با استفاده از پارامترهای چندی کردن در پنجره FDATool می توان ویژگی های فیلتر مربوطه را تعیین کرد . برای این کار در نوار ابزار سمت چپ پنجره FDATool از گزینه Set Quantization Parameters استفاده می شود .

 

 

مثال ۲-۲ : چندی کردن فیلتر

هدف مساله : آشنایی با چندی کردن و تنظیم آن توسط پارامترهای آن توسط جعبه ابزار FDATool

صورت مساله : با استفاده از ساختار ۸ بیتی ، یک فیلتر پایین گذر چبی چف درجه چهار را شبیه سازی و Quantize  کنید . تاثیر چندی .کردن ضرایب را در پاسخ فرکانسی نشان دهید.

گام اول :ابتدا با توجه به مثال یک فیلتر پایین گذر چبی چف نوع اول مرتبه چهار با فرکانس نمونه برداری ۲۸۰KHz و فرکانس ۳۰KHz را طراحی کنید .

گام دوم : سپس با انتخاب Set Quantization Parameters در نوار ابزار کناری پنجره FDAToolوارد قسمت چندی کردن شوید .

گام سوم : حال به منظور چندی کردن یک فیلتر Double-Precision مراحل زیر را طی کنید :

ابتدا گزینه Fixed-point را از قسمت Filter arithmetic انتخاب کنید . هنگامی که یکی از گزینه های تنظیمات arithmetic را انتخاب کنید ، FDATool ، فیلتر حاضر را  بر طبق تنظیمات گزینه های پنجره  Set Quantization Parametersچندی می کند و اطلاعات نشان داده شده در قسمت آنالیز به منظور نمایش فیلتر چندی شده را تغییر می دهد .

در پنجره های Coefficients ، Input /Output و Filter Internals تنظیمات را برای فیلتر مورد نظر انجام دهید . در این مثال با توجه به این که از ساختار ۸ بیتی استفاده می شود ، تنظیمات مربوطه را انجام دهید .

و سپس تنظیمات ورودی / خروجی را انجام دهید .

سرانجام تنظیمات مربوط به Filter Internalsرا انجام دهید .

گام چهارم : پس از اعمال تنظیمات ، دکمه Apply را کلیک کنید .       

حال کافی است به منظور مشاهده تغییرات انجام گرفته بر روی ضرایب فیلتر و مشاهده خطای چندی کردن ، ضرایب فیلتر اولیه و فیلتر چندی شده را با انتخاب Export در قسمت File به محیط Workspace انتقال دهید .

فیلتر های چند نرخه

فیلتر چند نرخه برای فیلتر های FIR که دارای پهنای گذر خیلی باریک و یا پهنای عبور خلیی باریک یا خیلی پهن هستند ، استفاده می شود . این فیلتر های FIR فیلتر های عمومی هستند ، اما دارای جنبه عملی برای پیاده سازی در زمینه فیلتر های متغیر با زمان یا فیلتر هایی با طول خیلی زیاد نیستند . در این بخش طراحی فیلتر های چند نرخه و تحلیل این فیلتر ها با استفاده از دو مثال زیر بحث می شود :

مثال ۲-۳ : طراحی فیلتر چند نرخه با استفاده از جعبه ابزار  FDATool

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

صورت مساله : یک فیلتر پایین گذر FIR مرتبه ۱۶۷ با فرکانس نمونه برداری ۴۸KHz با نرخ ۳/۷ را طراحی کنید .

گام اول : ابتدا در قسمت طراحی فیلتر ، فیلتر پایین گذر FIR از مرتبه ۱۶۷ با فرکانس نمونه برداری ۴۸KHz را با تعیین پارامترهای فیلتر طراحی کنید .

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

گام دوم : با انتخاب گزینه Craete a multirate filter از نوار ابزار سمت چپ پنجره جعبه ابزار ، وارد قسمت طراحی فیلترهای چند نرخه شوید .

گام سوم : با انتخاب Fractional-rate converter و تنظیم Interpolation Factor به عدد ۷ و Decimation Factor به عدد ۳ ، فیلتر مورد نظر با نرخ ۳/۷ را طراحی کنید . پس از اعمال تغییرات FDATool مشخصات فیلتر جدید را در قسمت Current Filter Information نشان داده و پاسخ فرکانسی آن را نمایش می دهد .

 

 

مثال ۲-۴ : تحلیل فیلترهای چندنرخه

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

صورت مساله: پاسخ فرکانسی Interpolatorهای CIC ، Hold Interpolator ، Linear Interpolator و Nyquist FIR Filter را از لحاظ عملکرد پایین گذری فیلتر با تنظیم L=4 برای تمامInterpolator ها مقایسه کنید .

ابندا CIC را طراحی کنید.

پس از انکه بر روی آیکون Craete a multirate filter برای طراحی کلیک کردید ، به منظور ذخیره و مشاهده مجدد پاسخ فرکانسی ، بر روی دکمه Store Filter در سمت چپ صفحه در قسمت Information   Current filterکلیک کنید و فیلتر را با نام پیش فرض ذخیره کنید .

سپس بقیه فیلترها را نیز پس از طراحی به همین ترتیب ذخیره کنید . برای طراحی Interpolator از Nyquist FIR استفاده کنید .

همین طور برای Hold Interpolar و Linear Interpolar به این صورت عمل کنید :

حال به منظور مشاهده نتایج ذخیره شده ، ابتدا با انتخاب گزینه Filter Manager در قسمت Current Filter Information  صفحه ای ظاهر می شود که ، با انتخاب نام فیلترهای موجود و کلیک بر روی FVTool پاسخ فرکانسی تمام فیلترهای طراحی شده نمایش داده می شوند .

تبدیل فیلترهای IIR به فیلترهای FIR و complex

در جعبه ابزار طراحی و تحلیل فیلتر می توان فیلترهای IIR طراحی شده را به فیلترهای FIR و Complex تبدیل کرد . همچنین می توان باند عبور فیلتر را به میان گذر ، میان نگذر و یا بالا گذر تغییر داد . در مثال زیر این مطلب شرح داده شده است .

تبدیل های فرکانسی فیلترهای IIR

هدف مساله : آشنایی با تبدیل های فرکانسی توسط جعبه ابزار FDATool

صورت مساله : یک فیلتر elliptic مرتبه ۳ با فرکانس عبور ۴۰۹/۰ و دامنه پیک – پیک ۱/۰ دسی بل و تضعیف ریپل ۳۰ دسی بل در باند توقف  را طراحی کرده ، سپس تبدیل پایین گذر – پایین گذر را به منظور تغییر فرکانس قطع از ۵/۰ به ۰۵/۰ اعمال کنید . نتایج این تبدیل را نشان دهید .

ابتدا فیلتر IIR مثال را طراحی کرده و آن را با استفاده از Store Filter ذخیره کنید .

سپس با ورود به قسمت Transform filter از نوار ابزار سمت چپ صفحه و تنظیم پارامترها تبدیل مورد نظر را اعمال کرده و ذخیره کنید .

حال مانند مثال قبل ، دو فیلتر ذخیره شده را از Filter Manager انتخاب کرده و توسط FDATool نمایش دهید .

فیلتر های تطبیقی

برای شناسایی سیستم ناشناخته ورودی را به سیستم و فیلتر اعمال کرده و پارامترهای سیستم راتغییر دهید تا خطای اندازه گیری شده (تفاوت فیلتر و خروجی سیستم) به صفر نیل کند .

 

 

 

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

طراحی فیلتر های تطبیقی

هدف مساله : استفاده از فیلترهای تطبیقی به منظور استخراج سیگنال مطلوب از سیگنال نویزی

صورت مساله : با استفاده از فیلترهای تطبیقی ، سیگنال مطلوب سینوسی s=sin(3πn/4)  را از سیگنال نویزی که شامل نویز autoregressive جمع شونده است ، با فرض این که سیگنال مرجع از کورولیشن نویز با یک سیگنال moving average به دست می آید ، استخراج کنید .

با فرض سینوسی بودن سیگنال مطلوب را می توان با دستورات زیر ایجاد کرد :

 

>>n=(1:1000)’;

>>s=sin(0.075*pi*n) ;

 

 

 

 

 

 

 

و برای تولید نویز ، با فرض autoregressive بودن ، دستورات زیر را وارد کنید :

>>v=0.8*randn(1000,1) ;

>>ar=[1,0.5] ;

>>v1=filter(1,ar,v) ;

 

 

 

 

 

 

دستور Y=filter(B,A,X) که اساسی ترین دستور فیلترینگ است ، بدین صورت عمل می کند که اطلاعات موجود در بردار X را توسط بردارهای B و A که ضرایب فیلتر مورد نظر هستند ، فیلتر می کند .

با توجه به این که نویز جمع شونده است ، برای اجاد سیگنال نویزی دستور زیر را تایپ کنید :

>>x=s+v1;

 

 

 

 

 

 

با فرضیات صورت مساله برای سیگنال مرجع می توان نوشت :

>>ma=[1,-0.8,0.4,-0.2] ;

>>v2=filter(ma,1,v) ;

 

 

 

 

 

 

حال از دو فیلتر تطبیقی با ۷ وزن (taps/weights) یکی LMS نرمالیزه شده (NLMS) استفاده کنید .

برای کسب اطلاعات بیشتر از نحوه ساختداین دو فیلتر، دستورات helpwin adaptfilt.lms و helpwin adaptfilt.nlms را در خط فرمان MATLAB تایپ کنید .

>>L=7;

>>hlms=adaptfilt.lms(7) ;

>>hnlms=adaptfilt.nlms(7) ;

 

 

 

 

 

برای تمام الگوریتم های مشابه LMS یک step size تعریف می شود که نشان دهنده میزان تصحیح هنگامی که فیلتر از یک مرحله برای مرحله بعد خود را تطبیق می دهد ، می باشد . انتخاب این مقدار همیشه کار ساده ای نیست ، زیرا اگر مقدار آن کم انتخاب شود در سرعت همگرایی خلل وارد می کند و اگر زیاد انتخاب شود باعث واگرایی فیلتر می شود . با استفاده از دستور maxstep ابتدا بزرگترین مقدار ممکن برای step size را به دست آورید.

 

 

>>[xmumaxlms,mumaxmselms]=maxstep(hlms,x)

>>[mumaxnlms,mumaxmsenlms]=maxstep(hnlms) ;

 

 

 

 

خروجی اول دستور maxstep مقدار ضروری برای همگرایی میانگین ضرایب و خروجی دوم مقدار مورد نیاز برای همگرایی میانگین مربع ضرایب است . از آن جا که انتخاب بزرگترین مقدار ممکن برای step size سبب اختلافات زیاد در مقادیر همگرایی می شود ، به صورت زیر مقدار آن را تنظیم کنید :

>>hlms.StepSize=mumaxmselms/30;

>>hnlms.StepSize=mumaxmsenlms/20;

 

 

 

 

 

 

اگر از ابتدا مقدار step size را بدانید ، به راحتی می توان مقدار آن را در همان ابتدا به صورت زیر تنظیم کرد :

>>hlms=adaptifilt.lms(L,step) ;

 

 

 

 

 

 

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

>>[ylms,elms]=filter(hlms,v2,x) ;

>>[ynlms,enlms]=filter(hnlms,v2,x) ;

 

 

 

 

 

 

که elms و enmls سیگنال های سینوسی بدون نویز هستند .

 

 

 

 

 

 

 

 

 



برچسب‌ها :
ads

درباره نویسنده

mrk kiani 356 نوشته در انجام پروژه متلب |پروژه متلب | انجام پروژه متلب برق | شبیه سازی با متلب دارد . مشاهده تمام نوشته های

دیدگاه ها


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *