طراحی فیلتر در نرم افزار 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);
سلام خسته نباشید، میخوام فیلتری طراحی کنم که نویزهای اصافی رو از صوت بردارم ازش نمودار اف اف تی گرفتم اصلا جور در نمیاد یعنی نمیتونم فرکانس هایی که لازم بترکونه رو پیدا کنم میشه کمکم کنید ممنون میشم