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

توابع موجود برای فیلتر کردن سیگنال ها در متلب
5 (100%) 2 votes

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

یکی از اصلی ترین مراحل در کدنویسی پردازش سیگنال استفاده از توابع آماده برای اعمال فیلتر بر روی سیگنال هست در ادامه آموزش های گروه متلب پروژه شما را به این مبحث آشنا خواهیم کرد

پیاده سازی بانک فیلتر چند نرخی : تابع 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 این اعوجاج تا حدودی حذف می شود .

برای مثال برای یک سیگنال به طول 1 ثانیه که با نرخ 100Hz نمونه برداری شده و دو مؤلفه سینوسی در 3 و 40Hz دارد داریم :

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

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

 

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

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

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

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

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

 

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