طراحی فیلتر در نرم افزار MatLab
در این مطلب قصد داریم طراحی فیلتر در نرم افزار متلب را بررسی نماییم . برای این منظور از fdatool استفاده می کنیم .
در قسمت command window عبارت fdatool را تایپ می کنیم . صفحه زیر ظاهر می شود :
در این صفحه مشخصات مورد نیاز فیلتر را وارد می کنیم . برای مثال در قسمت های Frequency Specification و Magnitude Specification اطلاعات زیر را وارد می کنیم :
Fs=9600
Fpass=1650
Fstop=1750
Apass=0.1
Astop=80
در قسمت Response Type نیز انواع فیلتر ها وجود دارد که متناسب با کار خود یکی از آنها را انتخاب می کنیم .
حال با کلیک بر روی Design Filter ، فیلتر مورد نظر طراحی می شود .
حال در نیمه بالایی این پنجره می توان مشخصات مختلف فیلتر را مشاهده کرد :
1 - اندازه پاسخ
2 - فاز پاسخ
3 - اندازه و فاز پاسخ
4 - تأخیر گروه
5 - تأخیر فاز
6 - پاسخ ضربه
7 - پاسخ پله
8 - نمودار صفر و قطب
9 - ضرایب فیلتر
10 - اطلاعات فیلتر
اندازه و فاز فیلتر
پاسخ ضربه فیلتر
نمودار صفر و قطب فیلتر
حال برای استفاده از این فیلتر به کد آن احتیاج داریم . اگر کد متلب این فیلتر را لازم داشته باشیم به صورت زیر عمل می نماییم :
در منوی file گزینه Generate MATLAB Code را انتخاب می کنیم .
با انتخاب گزینه فوق پنجره جدیدی باز می شود که مسیر ذخیره این کد را تعیین می کنیم و سپس کد به صورت زیر تولید می شود :
function Hd = lpf
%LPF Returns a discrete-time filter object.
%
% MATLAB Code
% Generated by MATLAB(R) 7.12 and the DSP System Toolbox 8.0.
%
% Generated on: 28-Feb-2014 16:13:22
%
% Equiripple Lowpass filter designed using the FIRPM function.
% All frequency values are in Hz.
Fs = 9600; % Sampling Frequency
Fpass = 1650; % Passband Frequency
Fstop = 1750; % Stopband Frequency
Dpass = 0.0057563991496; % Passband Ripple
Dstop = 0.0001; % Stopband Attenuation
dens = 20; % Density Factor
% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);
% Calculate the coefficients using the FIRPM function.
b = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);
% [EOF]
و اگر به این فیلتر در برنامه های دیگر احتیاج داشته باشیم ، از منوی Targets استفاده می کنیم که سه نوع خروجی در اختیارمان قرار می دهد .
نحوه استفاده از این تابع در کدنویسی :
ابتدا کد تولید شده که در بالا ذکر کردیم را با نام lpf ذخیره می کنیم . حال برای استفاده از این فیلتر به صورت زیر عمل می کنیم :
Hd = lpf;
filtered_signal = filter(Hd,signal);