مقدمه
تبدیل فوریه
یک قضیه ریاضی می گوید که تقریبا همه توابع را می توان به عنوان مجموعه ای از دامنه های سینوسی و فرکانس های مختلف نشان داد. تبدیلات فوریه یک تکنیکی در ریاضیات است، که برای پیدا کردن دامنه ها و فرکانس های سینوسی آن می باشد. گسسته سازی تبدیلات فوریه –Discrete Fourier Transform – (DFT) یک الگوریتم که محاسبات برای داده های عددی می باشد. تبدیل فوریه سریع یک اجرا و پیاده سازی موثر و کارآمدی است. توبع زیر در متلب تبدیلات فوریه و عملیات مرتبط را انجام می دهد:
تبدیل فوریه سریع یک بعدی | fft |
تبدیل فوریه سریع دو بعدی | fft2 |
تبدیل فوریه سریع چند بعدی | fftn |
انتقال کندی (عقب افتادگی) صفر به مرکز تبدیل | fftshift |
معکوس تبدیل فوریه سریع یک بعدی | ifft |
معکوس تبدیل فوریه سریع دو بعدی | ifft2 |
معکوس تبدیل فوریه سریع چند بعدی | ifftn |
قدر مطلق (اندازه اعداد مختلط) | abs |
زاویه | angle |
مرتب کردن اعداد مختلط بر اساس جفت های مزدوج مختلط | cplxpair |
توان دو به بعد | nextpow2 |
زاویه فاز صحیح | unwarp |
دستور fft برای یک بردار ستونی:
>> y = [2 0 1 0 2 1 1 0]’;>> Y= fft (y)
Y =
7.0000 -0.7071 + 0.7071i 2.0000 – 1.0000i 0.7071 + 0.7071i 5.0000 0.7071 – 0.7071i 2.0000 + 1.0000i -0.7071 – 0.7071i |
اولین مقدار Y مجموع عناصر y است، و دامنه هایی که ازفرکانس های صفر یا ثابت هستند جزئی از سری فوریه هستند. عبارات 2 تا 4 (اعداد مختلط) دامنه هایی از فرکانس های مثبت مولفه های فوریه هستند. عبارت 5 دامنه ای از عنصر در فرکانس نایکوئیست، که نیمی از فرکانس نمونه برداری شده است. سه عبارت آخرمولفه های فرکانس های منفی هستند، که برای سیگنال های واقعی(real) ترکیبات اعداد مختلط از مولفه های فرکانس های مثبت هستند.
تابع fftshift برای تنظیم یک تبدیل فوریه که در آن منفی و مثبت در دو طرف فرکانس صفر قرار می گیرد.
fftshift(Y)
ans =
5.0000 0.7071 – 0.7071i 2.0000 + 1.0000i -0.7071 – 0.7071i 7.0000 -0.7071 + 0.7071i 2.0000 – 1.0000i 0.7071 + 0.7071i |
و قدر مطلق Y برابر است با:
>> abs(Y)
ans =
7.0000 1.0000 2.2361 1.0000 5.0000 1.0000 2.2361 1.0000 |
معکوس سری فوریه Y را با تابع ifft بدست می آوریم:
>> ifft(Y)
ans =
2.0000 -0.0000 1.0000 0 2.0000 1.0000 1.0000 0
>> y
y =
2 0 1 0 2 1 1 0
|
ابتدا باید یک سمبل انتخاب کنیم:
symsx
سپس باید تابع پله خواسته شده را بر اساس دو تابع پله صعودی ونزولی نوشت:
f = heaviside(x+1)-heaviside(x-1);
سپس مقادیر فرمولی مقدار DC و ضرایب سری فوریه را وارد می کنیم و در یک لوپ که N بار تکرار می شود قرار می دهیم
N تعداد ضرایب سری فوریه است:
N=10;
a_0=(1/pi)*int(f,-1.5,1.5);
for n=1:N
a_n(n)=(1/pi)int(fcos(n*x),-1.5,1.5);
b_n(n)=(1/pi)int(fsin(n*x),-1.5,1.5);
end
بعد دستور تبدیل فوریه را می دهیم:
fourier(f)
و در نهایت باید سمبل ها را به اعداد تبدیل نماییم:
subs(a_0)
subs(a_n)
subs(b_n)
خروجی برنامه برای اولین شکل موج به صورت زیر شده است:
ans =
- (- sin(w) + cos(w)i)/w + (sin(w) + cos(w)i)/w
a0 =
0.6366
an =
0.5357 0.2894 0.0299 -0.1204 -0.1221 -0.0296 0.0598 0.0787 0.0292 -0.0346
bn =
0 0 0 0 0 0 0 0 0 0
برای دومین شکل موج هم ترتیب کار به همین صورت است و تنها حدود را تغییر می دهیم کد های نوشته شده به این صورت اند:
clearall;
clc;
symsx
f = heaviside(x)-heaviside(x-2);
N=10;
a_0=(1/pi)*int(f,-1.5,1.5);
for n=1:N
a_n(n)=(1/pi)int(fcos(n*x),-1.5,1.5);
b_n(n)=(1/pi)int(fsin(n*x),-1.5,1.5);
end
TABDIL_FOURIE=fourier(f)
a0=subs(a_0)
an=subs(a_n)
bn=subs(b_n)
خروجی متلب هم به این گونه اند:
TABDIL_FOURIE =
(sin(2w) + cos(2w)*i)/w – i/w
a0 =
0.4775
an =
0.3175 0.0225 -0.1037 -0.0222 0.0597 0.0219 -0.0400 -0.0213 0.0284 0.0207
bn =
0.2958 0.3167 0.1285 0.0032 0.0416 0.1014 0.0671 0.0062 0.0143 0.0560
همانگونه که دیده می شود این بار bn صفر نیست زیرا دیگر تابع زوج نمی باشد که درستی روابط را به ما نشان می دهد
هر دو فایل برنامه نیز ضمیمه شده اند.