قلم

وبلاگ امیرحسین حاجی حسینی

قلم

وبلاگ امیرحسین حاجی حسینی

قلم

طبقه بندی موضوعی

جمعه, ۸ آذر ۱۳۹۲، ۱۰:۴۷ ب.ظ

طراحی فیلتر باترورث در نرم افزار متلب

جمعه, ۸ آذر ۱۳۹۲، ۱۰:۴۷ ب.ظ

برای طراحی فیلتر باترورث در نرم افزار متلب ،ابتدا با استفاده از تابع buttord ، درجه فیلتر مورد نظر را تعیین می کنیم . در این قسمت باید تمامی فرکانس ها را نرمالیزه کنیم یعنی تمامی فرکانس های موجود را بر فرکانس نایکوئیست تقسیم کنیم .  سپس با استفاده از تابع butter صورت و مخرج تابع تبدیل را محاسبه می کنیم . سپس می توانیم با  استفاده از تابع gain که خودمان آن را ایجاد می کنیم ، گین یا بهره تابع تبدیل را محاسبه کنیم و در نهایت با استفاده از تابع plot نمودار این تابع طراحی شده را رسم می کنیم .

برای مثال میخواهیم یک فیلتر میان نگذر باترورث با مشخصات زیر طراحی کنیم :

فرکانس باند عبور : 0.3 و 0.7

فرکانس باند نگذر : 0.4 و 0.6

تضعیف باند گذر : 0.4dB

تضعیف باند نگذر : 50dB

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


% Design of a Butterworth Bandstop Digital Filter

Ws = [0.4 0.6]; Wp = [0.3 0.7]; Rp = 0.4; Rs = 50;

% Estimate the Filter Order

[N1, Wn1] = buttord(Wp, Ws, Rp, Rs);

% Design the Filter

[num,den] = butter(N1,Wn1,'stop');

% Display the transfer function

disp('Numerator coefficients are ');disp(num);

disp('Denominator coefficients are ');disp(den);

% Compute the gain response

[g,w] = gain(num,den);

% Plot the gain response

plot(w/pi,g);grid

axis([0 1 -60 5]);

xlabel('\omega /\pi'); ylabel('Gain, dB');

title('Gain Response of a Butterworth Bandstop Filter / *** www.Hajihoseini.ir ***');

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

 function [g,w] = gain(num,den)

w = 0:pi/255:pi;

h = freqz(num,den,w);

g = 20*log10(abs(h));

در نهایت خروجی این برنامه به صورت زیر می باشد :

butterworth filter

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

نظرات  (۱۳)

سلام . چهار خطی که برای تابع gain نوشته بودید را ابتدای دستور نوشتم اما خطا میده  به این صورت 
function [g,w] = gain(num,den)
w = 0:pi/255:pi;
h = freqz(num,den,w);
g = 20*log10(abs(h));
% Design of a Butterworth Bandstop Digital Filter
Ws = [0.4 0.6]; Wp = [0.3 0.7]; Rp = 0.4; Rs = 50;
% Estimate the Filter Order
[N1, Wn1] = buttord(Wp, Ws, Rp, Rs);
% Design the Filter
[num,den] = butter(N1,Wn1,'stop');
% Display the transfer function
disp('Numerator coefficients are ');disp(num);
disp('Denominator coefficients are ');disp(den);
% Compute the gain response
[g,w] = gain(num,den);
% Plot the gain response
plot(w/pi,g);grid
axis([0 1 -60 5]);
xlabel('\omega /\pi'); ylabel('Gain, dB');
title('Gain Response of a Butterworth Bandstop Filter / *** www.Hajihoseini.ir ***');
ولی این خطا رو میده Error using gain (line 4)
Not enough input arguments.
پاسخ:
سلام
چون تابع را اول کد استفاده کردید، هنوز متغیرهای ورودی آن تعریف نشده اند و با این پیام خطا مواجه شدید. ابتدا باید ورودی های تابع در کد تعریف شوند، بعد از آن تابع استفاده کنید. 
سلام خسته نباشید
میشه خواهش کنم برنامه یک فیلترپایین گذریابالاگذرباترورث روهم بزارید واقعاممنون میشم
پاسخ:
سلام
لطفا به Help متلب مراجعه کنید و توضیحات تابع buttord و butter را مطالعه کنید. با تغییر Ws و Wp نوع فیلتر (پایین گذر، بالاگذر) تغییر می کند.
سلام . من نیاز به کد باترورث بالاگذری دارم که از فرکانس 5 هرتز به پایین را حذف کند . میتونین کمکم کنین ؟ 
پاسخ:
سلام
از پست زیر هم میتونید استفاده کنید:
http://fa.hajihoseini.ir/post/filter-design-in-matlab
سلام اگه این فرکانس ها یا تضعیف و نداشته باشیم یعنی فقط فرکانس قطع رو داشته باشیم و بدونیم که درجه ۲ هست چه جوری باید طراحی کنیم
پاسخ:
سلام
توی قسمت specify order میتونید درجه فیلتر رو وارد کنید. برای طراحی باید برای بقیه پارامترها هم یک مقداری رو در نظر بگیرید.
سلام ،خسته نباشید
من یک شکل نموداری دارم که نویز داره ، برای رفع این نویزها باید از دی نویزینگ(هار) و فیلتر پایین گذر باترورث درجه دوم استفاده کنم .
برای نوشتن این فیلتر تابع تبدیل ندارم ، میخواستم بپرسم شما میتونید کمک کنید؟
باتشکر
پاسخ:
سلام
اگر مشخصات فیلتر رو داشته باشید، فرکانس قطع، میزان تضعیف در باند عبور و ... با همین تولباکس متلب میتونید فیلتر رو طراحی کنید. 
سلام ممنون از پستتون .. منم دانشگاه شاهدی هستم .. لطفا سوالای دی اس پی دکتر ساجدی رو بذارین با جواب ..ممنون
پاسخ:
سلام
خواهش میکنم
بنده درس DSP رو با دکتر ساجدی نداشتم ...

سلام، روز به خیر

شما اجرای فیلتر FIR  و IIR با متلب انجام می دهید؟

پاسخ:
سلام
وقتتون بخیر
نه متاسفانه درحال حاضر فرصت ندارم.
سلام میخواستم یه فیلتر فعال متغییر حالت با مشخصه باتروث طراحی کنم اگه میتونید کمکم کنید خواهشا خیلی گیرم وقتم کمه ...با مشخصه هایی مثل w .q امگا و ضریب کیفیت باید کار کنم به دادم برسید
پاسخ:
سلام
شرمنده بلد نیستم، فرصت مطالعه هم ندارم.
سلام آقای مهندس
برای طراحی فیلتر خیلی خیلی ... ممنون کمک بزرگی کردید.
ببخشید شما در زمینه پردازش سیگنالهای الکتروکاردیوگرام(ECG) آشنایی دارید؟
آخه من روی پردازش سیگنالهای نرمال ECG  کار میکنم اما من نمیتوانم  پایگاه داده نرمالBIH/MIT از لینک زیر:
http://physionet.org/physiobank/database/nsrdb/
با تکه کد زیر در متلب:
http://www.physionet.org/physiotools/matlab/rddata.m
فراخوانی کنم خواهش میکنم اگه تونستین کمکم کنید.
با تشکر فراوان
پاسخ:
سلام
خواهش میکنم
خیر متاسفانه آشنایی ندارم .
۲۶ اسفند ۹۲ ، ۱۱:۰۲ مارکا مارکا1
سلام آقای مهندس
فیلتر میان گذر باترورث با فرکانس قطع بالا و پایین 5 و 40 هرتز تو متلب چطوری میشه شبیه سازی کرد؟
این فیلتر را چگونه میشه به سیگنال اعمال کرد؟
پاسخ:
سلام
با عرض معذرت بنده پیام قبلی شما رو هم دیدم ولی متاسفانه فرصت نکردم جواب بدم . 
برای طراحی این فیلتر از این مطلب استفاده کنید : 
http://hajihoseini.ir/post/filter-design-in-matlab

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

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان