فروش پروژه آماده متلب انجام پروژه متلب | متلب| پروژه متلب | آموزش متلب | انجام پایان نامه | پروژه پایانی |matlab |matlabi |matlab project - انجام پروژه متلب |پروژه متلب | پروژه آماده متلب | انجام پایان نامه
ضمانت بازگشت
فایل های تست شده
پرداخت آنلاین
تضمین کیفیت
دانلود فوری

قیمت محصول : 0 ریال

0 خرید نسخه : 1.0

مقدمه

متلب:یکی از جعبه ابزارهای پرکاربرد 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 سیگنال های سینوسی بدون نویز هستند .

 

 

 

 

 

 

 

 

 

به این پست امتیاز دهید.
هر چقدر ما رو دوست دارید ستاره بدید!!!
بازدید : 26 views بار دسته بندی : , , , تاريخ : ۱۵ آذر ۱۳۹۷ به اشتراک بگذارید :
دیدگاه کاربران
    • دیدگاه ارسال شده توسط شما ، پس از تایید توسط مدیران سایت منتشر خواهد شد.
    • دیدگاهی که به غیر از زبان فارسی یا غیر مرتبط با محصول باشد منتشر نخواهد شد.