محاسبه سری فوریه با استفاده از نرم افزار متلب
با استفاده از دستور زیر در متلب می توانیم جملات سری فوریه یک تابع را محاسبه کنیم:
f=fit(xdata,ydata,'fourier1')
برای تعیین تعداد جملات، می توان به جای fourier1، fourier2 … Fourier8 را قرار داد. نکته قابل توجه در این دستور این است که متلب این عملیات را حداکثر برای 8 جمله محاسبه می کند.
مثال) مطلوبست تعیین 5 جمله از سری فوریه تابع tanx.
x=[-pi:.1:pi];
y=tan(x);
f=fit(x,y,'fourier5')
بعد از زدن اینتر جواب به صورت زیر خواهد بود:
f=
General model Fourier5:
f(x) = a0 + a1*cos(x*w) + b1*sin(x*w) + a2*cos(2*x*w) + b2*sin(2*x*w) + a3*cos(3*x*w) + b3*sin(3*x*w) + a4*cos(4*x*w) + b4*sin(4*x*w) + a5*cos(5*x*w) + b5*sin(5*x*w)
Coefficients (with 95% confidence bounds):
a0 = 0.7328 (-2.167, 3.632)
a1 = -1.591 (-5.895, 2.714)
b1 = 2.485 (-1.396, 6.366)
a2 = 1.325 (-2.906, 5.557)
b2 = -2.889 (-6.843, 1.066)
a3 = -1.244 (-5.386, 2.898)
b3 = 3.461 (-0.5495, 7.471)
a4 = 0.9245 (-3.14, 4.989)
b4 = -3.307 (-7.397, 0.7843)
a5 = -0.6392 (-4.66, 3.382)
b5 = 3.664 (-0.4395, 7.767)
w = 1.854 (1.769, 1.94)
همانطور که می بینید در قسمت اول شکل کلی جواب و در قسمت دوم ضرایب آن نشان داده شده است.
همچنین می توانیم تغییرات در تعداد جملات و تاثیر آن روی بازسازی سیگنال اصلی را به صورت نمودار گرافیکی ببینیم. در این حالت دیگر محدودیتی برای تعیین تعداد جملات نداریم. در این قسمت یک تابع مربعی را بررسی می کنیم. اگر n را 20 انتخاب کنیم، یعنی 20 جمله اول سری فوریه ی سیگنال را با هم جمع می کنیم. شکل اصلی سیگنال به ما نشان داده خواهد شد ولی دارای ریپل هایی می باشد. هرچه تعداد جملات یعنی n افزایش یابد، نمایش سری فوریه به سیگنال اصلی آن نزدیکتر خواهد شد.
دستور زیر سری فوریه یک سیگنال مربعی را هم برای n=20 و هم برای n=2000 نشان می دهد:
N = 2000;
x = [0:100]/100;
f = ones(1,101)*1/2; % yek signale DC az 1 ta 101 be andazeye 0.5 bevojood miavarad
for i = 1:2:N % amale jam kardan az 1 ta N ba gam e 2 ra anjam midahad
a = 2/pi/i;
f = f+ a*sin(2*pi*i*x); % be jaye a*sin(2*pi*i*x) mitavan tabee delkhah ra gharar dad
end
plot(x,f)
Hold on
N = 20;
x = [0:100]/100;
f = ones(1,101)*1/2;
for i = 1:2:N
a = 2/pi/i;
f = f+ a*sin(2*pi*i*x);
end
plot(x,f)