تبلیغات
تبلیغات متنی
محبوبترینها
ماندگاری بیشتر محصولات باغ شما با این روش ساده!
بارشهای سیلآسا در راه است! آیا خانه شما آماده است؟
بارشهای سیلآسا در راه است! آیا خانه شما آماده است؟
قیمت انواع دستگاه تصفیه آب خانگی در ایران
نمایش جنگ دینامیت شو در تهران [از بیوگرافی میلاد صالح پور تا خرید بلیط]
9 روش جرم گیری ماشین لباسشویی سامسونگ برای از بین بردن بوی بد
ساندویچ پانل: بهترین گزینه برای ساخت و ساز سریع
خرید بیمه، استعلام و مقایسه انواع بیمه درمان ✅?
پروازهای مشهد به دبی چه زمانی ارزان میشوند؟
تجربه غذاهای فرانسوی در قلب پاریس بهترین رستورانها و کافهها
دلایل زنگ زدن فلزات و روش های جلوگیری از آن
صفحه اول
آرشیو مطالب
ورود/عضویت
هواشناسی
قیمت طلا سکه و ارز
قیمت خودرو
مطالب در سایت شما
تبادل لینک
ارتباط با ما
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
آمار وبسایت
تعداد کل بازدیدها :
1837183559
تبدیل گسسته فوریه
واضح آرشیو وب فارسی:سایت رسیک: مهمترین کاربرد FFT، یا تبدیل سریع فوریه، در پردازش سیگنال است. که در آن، سیگنال به صورت تابعی از زمان به شدت سیگنال است. همان طور که می توان (برخی از) توابع را به صورت بسط تیلور از توابع چندجمله ای نوشت، می توان توابع متناوب را به خوبی بر حسب تابعهای سینوسی با فاز اولیه و ضریب دلخواه نوشت. حال تبدیل شکل سیگنال به سری فوریه با روشهای تبدیل سریع فوریه انجام می شود. به وسیله تبدیل گسسته فوریه (Discrete Fourier transform - DFT) میتوان توابع و سیگنالهای گسسته را از حوزهٔ زمان به حوزهٔ فرکانس (و یا از حوزهٔ مکان به حوزهٔ عدد موج) تبدیل کرد.
البته نوعی دیگر از این تبدیل، که با نام تبدیل گسستهٔ فوریه شناخته میشود در بررسی الگوریتمها برای ضرب سریع چندجمله ای ها و بردازش رایانه ای سیکنالها استفاده می شود. در این بحث به این سری از کاربردهای تبدیل سریع فوریه می بردازیم.
تعاریف و ویژگیهای کلی
[ویرایش] تعریف
[ویرایش] ویژگیها
[ویرایش] کامل بودن
کامل بودن تبدیل فوریه بدین معنا است که میتوان سیگنال اولیه را از سیگنال انتقال یافته دوباره ساخت. به عبارت دیگر با اعمال تبدیل فوریه دادهای از دست نمیرود و تبدیل بازگشتپذیر است.
[ویرایش] تعامد
بردارهای دو به دو بر هم عمود هستند، یعنی:
که تابع دلتای کرونکر میباشد.
[ویرایش] کازبرد در ضرب چندجمله ایها
علاوه بر این کاربرد، در بررسی الگوریتم ها، برای ضرب چند جمله ایها از نوعی از تبدیل فوریه با نام خاص تر تبدیل سریع فوریهٔ گسسته (Discrete Fourior Transform یا DFT) استفاده می شود. در این روش ابتدا چندجمله ای را به فرم دیگری تبدیل می کنیم که انجام عملیات ضرب و تقسیم بر روی این فرم نمایش می تواند سریع انجام شود. پس از انجام عملیات، با تبدیل عکس فوریه (DFT − 1) می توان پاسخ را در قالب چندجمله ای بدست آورد. در ادامه به برسی دقیق این الگوریتم می پردازیم.
فرمهای نمایش توابع
برای نمایش توابع راههای گوناگونی وجود دارد، به طور مثال می توان یک تابع را با مجموعه اعضا (برای توابع با دامنهٔ محدود)، ضابطهٔ کلی تابع، یک سری مانند بسط تیلور یا بسط فوریه و ... نمایش داد. یک فرم که در انجام محاسبات بسیار کاراست، را در این جا توضیح می دهیم. می دانیم که در صفحه می توان هرچند جمله ای از درجه n را با دقیقا n+1 نقطه از آن به طور یکتا مشخص کرد. مثلا هر خط راست را می توان با دو نقطه از آن به طور یکتا مشخص کرد و برعکس. و یا این که هر سه نقطه یک سهمی را به طور یکتا تعیین می کنند. پس یک روش نمایش چندجمله ایهای درجه n، نگهداری n+1 نقطهٔ آن است. دقت کنید که این نقاط به دلخواه از دامنهٔ تابع انتخاب می شوند. به طور دقیق تر:
برای مثال نمایشهای زیر هم ارزند:
نکته ای مهم در این نمایش این است که لازم نیست که مختصات نقاط حقیقی باشند و می توان مقدار تابع را در نقاطی مختلط محاسبه کرد و به عنوان نمایش آن تابع دانست. از این موضوع در الگوریتم تبدیل سریع فوریه به خوبی استفاده می کنیم.
لازم به ذکر است که اگر یک چندجمله ای درجه n را در بیش از تعداد لازم نقطه مقداریابی کنیم، به آن فرم فوریهٔ گسترش یافته می گویند. مثلا این که سه نقطهٔ هم خط هم یک چندجمله ای درجه یک را مشخص می کنند، هر چند که یک نقطهٔ آن اضافی است. در نتیجه می توان هر چندجمله ای در فرم فوریه را با یافتن آن در تعدادی نقاط اضافی، به فرم گسترش یافته تبدیل کرد. این کار نیز در ضرب چند جمله ایها لازم است، زیرا اگر دو چندجمله ای درجه n را در فرم فوریه داشته باشیم برای بدست آوردن حاصل ضرب آن دو نیاز به تعداد بیش تری نقطه از هر یک داریم.
[ویرایش] تبدیل فرمها
تا این جا دو فرم مهم برای نمایش چندجمله ایها ارائه دادیم: فرم فوریه و فرم ضابطه ای. حال می خواهیم به تبدیل بین این دو فرم بپردازیم. این تبدیل اساس کار الگوریتمهای محاسباتی پیش رو خواهد بود. به تبدیل از فرم ضابطه ای به فرم فوریه، مقداریابی می گویند و به عکس این عمل یعنی تبدیل از فرم فوریه به فرم چندجمله ای درون یابی گفته می شود.
یک الگوریتم برای تبدیل فرم ضابطه ای به فرم فوریه، این است که ابتدا n+1 مقدار دلخواه را انتخاب کنیم و سپس مقدار چند جمله ای را در این نقاط محاسبه کنیم (مثلا با الگوریتم هورنر) که زوج مرتبهای بدست آمده یک فرم فوریه برای چندجمله ای خواهند بود. این الگوریتم از است. در ادامه نشان می دهیم که می توان برای هر چندجمله ای، فرم فوریه آن را در زمان بدست آورد که به این الگوریتم تبدیل سریع (گسسته ی) فوریه می گویند.
برای انجام عکس این عمل، یعنی درون یابی یا (DFT − 1) نیز الگوریتم سریعی وجود دارد.
[ویرایش] محاسبات روی فرم فوریه
نکتهٔ جالب در مورد فرم فوریه برای نمایش چند جمله ای ها، سادگی انجام برخی محاسبات روی آن است. به طور مثال اگر بخواهیم دو چندجمله ای را جمع/ضرب کنیم، کافی است آن دو را با یک سری مقادیر x یکسان به فرم فوریه تبدیل کنیم و سپس مقادیر متناظر هر نقطه از آن دو تابع را با هم جمع/ضرب کنیم. دیده میشود که در این فرم اعمالی مانند ضرب و یا تقسیم بسیار آسان تر از صورت ضابطه ای قابل انجام اند. در حقیقت جمع و تفریق و ضرب و تقسیم چندجملههای به این فرم با امکان پذیر است. در ادامه به بررسی جزییات پیاده سازی ضرب چندجمله ایها می پردازیم.
[ویرایش] مسئلهٔ ضرب چندجمله ای
در این مسئله می خواهیم دو چندجمله ای از درجههای m و n که به فرم ضابطه ای با ضرایب هر توانی از x آنها مشخص شده اند را در هم ضرب کنیم و ضابطهٔ چندجمله ای حاصل را بدست آوریم.
حال با توجه به بحث پیش، می توان دید که اگر دو چندجمله ای داشته باشیم می توان ابتدا آنها را در تعدادی نقطهٔ مشترک مقداریابی کرد و پس از آن فرم فوریهٔ ضرب آنها را از ضرب مولفههای دوم زوج مرتبهای بدست آمده پیدا کرد. باید توجه کرد که حاصل ضرب، یعنی دارای درجه ای برابر m + n است پس باید برای نمایش آن به تعداد m + n + 1 زوج مرتب از آن را داشته باشیم، به همین منظور می توان از ابتدا هر دو چندجمله ای را به فرم فوریهٔ گسترش یافته با m + n + 1 نقطه تبدیل کرد، و سپس این نقاط را نظیر به نظیر ضرب کرد و حاصل ضرب را در فرم فوریه بدست آورد. برای یافتن جواب کافی است آن را از فرم فوریه به فرم ضابطه ای تبدیل کنیم. پس دوباره با دو مسئله ای که به آنها اشاره کردیم روبرو شدیم: تبدیل فرمهای ضابطه ای و فوریه. کافی است به بررسی پیاده سازی سریع این دو مسئله بپردازیم.
[ویرایش] تبدیل سریع فرمها
برای این که بتوانیم از روی فرم ضابطه ای چندجمله ای، n نقطه از نمودار را بدست آوریم، به گونه ای هوشمندانه طوری آن n نقطه را انتخاب می کنیم که نوعی وابستگی به هم داشته باشند و در نتیجه بتوانیم در کل محاسبات مربوط به پیدا کردن مقدار تابع در آن n نقطه را به خاطر همان وابستگی سریع تر انجام دهیم، زیرا عملاً برخی از محاسبات تکراری می شوند. در ادامه به بیان دقیق تر الگوریتم را بیان می کنیم.
[ویرایش] بخش یک: تبدیل مستقیم یا DFT
فرض می کنیم که چندجمله ای داده شده باشد. تبدیل فوریهٔ n ام A را ماتریس مقدارهای این چندجمله ای در ریشههای n ام واحد تعریف کرده و با Y نشان می دهیم:
به طور بدیهی می توان این ماتریس را در زمان n2 محاسبه کرد زیرا محاسبهٔ آن شامل n بار محاسبهٔ مقدار چندجمله ای است که هر بار آن با روشی مانند الگوریتم هورنر به میزان زمان نیاز دارد. برای بهبود این روش می توان الگوریتم بازگشتی با زمان ارائه کرد. فرض کنید می خواهیم مقدار ماتریس تبدیل فوریه را بیابیم. اگر تعریف کنیم:
خواهیم داشت:
ولی اگر n زوج باشد، مربعات ریشهٔ n ام واحد، ریشههای ام واحد هستند. زیرا که:
پس توانستیم مسئله را به دو زیر مسئله تقسیم کنیم، زیرا اکنون کافی است که ماتریس تبدیل فوریهٔ Aiها را که از اندازهٔ هستند، در نقاط با مختص اول ریشههای ام واحد پیدا کنیم که همان مسئلهٔ ابتدایی است. پس از دو بازگشت، کافی است با رابطهٔ داده شده جوابها را با هم ادغام کنیم تا جواب اصلی مسئله حاصل شود. الگوریتم کلی به روش بازگشتی در زیر آمده است:
DFT(a)
n = length[A] //must be a power of 2
if (n==1) return A
wn = exp(2ᴨi/n)
w = 1
a0 = (a0, a2, ..., an-2)
a1 = (a1, a3, ..., an-1)
y0 = FFT(a0)
y1 = FFT(a1)
for ( k=0 to n/2-1) do
yk = yk0 + w.yk1
yk+n/2 = yk0 - w.yk1
w = w.wn
return y
برای تحلیل زمانی این الگوریتم می توان به راحتی رابطهٔ بازگشتی زیر را پیشنهاد داد:
که با یکی از روشهای حل معادله بازگشتی مانند قضیهٔ اساسی می توان دید که:
بخس دو: تبدیل معکوس یا DFT − 1
اکنون به بررسی فرایند معکوس یعنی نوعی از درون یابی می پردازیم. در این مسئله ماتریس Y را داریم و می خواهیم که A را بیابیم. توجه می کنیم که می توان تبدیل فوریه را به شکل ماتریسی زیر هم نوشت:
که در آن V ماتریس واندرمور است که با رابطهٔ زیر تعریف می شود:
پس یک معادلهٔ ماتریسی برای تبدیل فوریه یافتیم. حال اگر حدس طرفین معادله را در وارون ماتریس واندرمور ضرب کنیم می توانیم A را بر حسب Y بیان کرد. ولی به راحتی می توان دید که برای وارون ماتریس واندرمور داریم:
زیرا که ضرب آن در خود ماتریس واندرمور ماتریس همانی می شود:
نکتهٔ جالب تشابه بسیار زیاد ماتریس واندرمور و وارون آن است، تا جایی که می توان از همان الگوریتم تبدیل فوریهٔ مستقیم برای وارون تبدیل فوریه نیز استفاده کنیم با این تغییرات که در آن الگوریتم، نقش A و Y را جابجا کنیم، wn را به تبدیل کنیم و تک تک درایههای نتیجهٔ حاصل را در آخر کار بر n تقسیم کنیم.
[ویرایش] نکات پیاده سازی
با وجود آسان بودن بیان الگوریتم بازگشتی بالا، پیاده سازی آن سختیهای خاص خود را دارد. 1) اولین مشکل این است که باید در هر مرحله از بازگشت، n عددی زوج باشد، که یعنی n آغازین باید توانی از دو باشد که شاید مسئلهٔ اصلی این شرط را برآورده نکند. برای حل این مشکل، متداولترین راه چندجمله ای اولیه است، به این معنی که آن را یک چندجمله ای با درجه ای بیش از n فرض کرد، مثلا m که m کوچکترین توان دوی بزرگ تر از n باشد، و سپس ضرایب بزرگ تر از n آن را صفر گذاشت. این کار به ظاهر مشکل را حل میکند و در اکثر کاربردها نیز همین گونه است ولی در برخی موارد مانند پردازش سیگنال، این روش به خاطر ماهیت الگوریتم فوریه که شامل محاسبات مختلط است، دچار خطا شده و حتی در جواب پایانی سیگنال هایی با فرکانس بالای اضافه پدید می آیند. روش حل این مشکل فراتر از سطح این بحث است و نادیده گرفته می شود. 2) علاوه بر این مشکل، سختی خود پیاده سازی الگوریتم گفته شده به صورتی کاراست. زیرا در هر مرحله باید آرایه را به دو بخش جدید تقسیم کنیم که نیاز به حافظهٔ اضافی دارد. یک روش این است که پیش از فراخوانی بازگشتی مسئله برای اندازهٔ نصف، به جای ایجاد دو آرایهٔ جدید، عناصر آرایهٔ اولیه را جابجا کنیم و عناصر با اندیس زوج را به نیمهٔ اول آرایه و عناصر با اندیس فرد را به نیمهٔ دوم آرایه انتقال دهیم و پس از اتمام بازگشت نیز دوباره ترتیب قبلی را بازیابی کنیم. همچنین خود بازگشنی بودن الگوریتم کمی سربار اضافی دارد که می توان سعی کرد که آن را به فرم غیربازگشتی پیاده سازی کرد. با اعمال این دو تغییر به پیاده سازی کاراتری خواهیم رسید که در بخش بعد به توضیح آن می پردازیم. 3) مشکل بنیادی تری که الگوریتم تبدیل سریع فوریه دارد این است که حتی زمانی که چند جمله ای اولیه دارای ضرایب صحیح باشد، نیاز به محاسبات مختلط پیش می آید. با این که این گونه محاسبات در رایانههای پیشرفتهٔ امروزی به راحتی و با سرعت قابل قبولی انجام پذیر است، ولی مشکلی که وجود دارد این است که شاید در طی این محاسبات مختلط، بخشی از دقت محاسبه کم شود. به بیان دقیق تر این الگوریتم از لحاظ محاسباتی پایداری کمی دارد و خطای اولیه به شدت تشدید می شود. این مشکل برای حالتی که ضرایب صحیح باشند با استفاده از حساب پیمانه ای به جای حساب مختلط قابل حل است ولی بیش از این به جزییات آن نمی پردازیم.
[ویرایش] روشهای پیاده سازی سریع
اگر به روش بازگشت تابع بازگشتی فوق دقت کنیم خواهیم دید که ترتیب خواصی در فراخوانی زیر تابعها وجود دارد. به شکل زیر دقت کنید:
حال اگر بتوانیم از همان ابتدا آرایه را به صورت بالا بچینیم می توانیم به راحتی بدون انجام بازگشت به تدریج بخشهای مجاور را با هم ادغام کنیم و به سمت بالا برویم. یعنی عملاً به جای رویکرد بالا به بایین از روش بایین به بالا بهره بردیم که باعث سادگی بیاده سازی و کارایی بیش تر آن می شود. الگوریتم انجام این کار را نیز آورده ایم. لازم به توضیح است که آن بخشی از الگوریتم که جدا نوشته شده و با نام Bit-Reverse-Copy نام گذاری شده در ابتدا آرایه را به ترتیبی که گفتیم بازچینی می کند. این الگوریتم منحصر به این مبحث نیست و در بسیاری از تابعهای بازگشتی مورد استفاده قرار می گیرد.
//Rearranges a and stores the result in A
Bit-Reverese-Copy(a, A)
n = length[a]
for (k=0 to n-1) do
A[reverse-bits(k)] = ak
//Computues the DFT of a without recursion
Iterative-DFT(a)
Bit-Reverse-Copy(a, A)
n = length[a]
for (s=1 to lg n) do
m = 2s
wm = exp(2πi/m)
for (k=0 to n-1) by m do
w=1
for (j=0 to m/2 - 1) do
t = wA[k + j + m/2]
u = A[k + j]
A[k + j] = u + t
A[k + j + m/2] = u - t
w = w.wn
[ویرایش] موازی سازی الگوریتم
مشاهده میشود که در بیاده سازی فوق بخشهای مختلف از آرایه تا حد زیادی از هم مستقل هستند. به این معنی که مراحل اولیهٔ ادغام بخشهای مختلف آرایه می توانند مستقل از هم انجام شوند. به این ترتیب اگر ما بیش از یک بردازنده داشته باشیم به راحتب می توان بهترین استفاده از این موضوع را برد و مراحل اولیه را بین بردازندهها تقسیم کنیم. در یابان نیز می توان عمل ادغام نهایی کار بردازندهها را مشابها با یک بردازنده انجام داد و به جواب رسید.
در الگوریتم DFT که در بالا آمده بخش اصلی بردازش مربوط به سه خط درونی حلقهٔ برنامه است. در حقیقت کل محاسبات توسط این خطوط انجام می شود. حال اگر به این فرآیند یک عملیان بروانه ای بگوییم می توان گفت که کل تبدیل فوریه بر اساس عملیاتهای بروانه ای انجام می شود. می توان الگوریتم فوریه را بر اساس شبکههای موازی الگوریتم بیاده سازی کرد. به طور خلاصه در این نظریه فرض میشود که تعداد زیادی بردازنده داریم (متناسب با n) که هر کدام تنها می توانند عمل خاصی را انجام دهند مانند مقایسه یا ... حال شبکه ای طراحی میشود که دادهها با عبور از آن و بردازش شدن در حین عبور در انتهای شبکه فرم دلخواه را بگیرند (و به جواب برسیم). در این شبکهها معیار زمان اجرا عمق شبکه است. با استفاده از این نظریه در حالتی که n بردازنده داشته باشیم (که هر یک بتوانند عملیات بروانه ای روی دو یا چند ورودی خود انجام دهند) می توان با شبکه ای با عمق lg n تبدیل فوریه را محاسبه کرد. ایدهٔ کلی بسیار ساده است به این صورت که در درخت بازگشت که یک مثال آن در بالا رسم شده است راسهای برگ را ورودی فرض کنیم و به جای هر راس غیر برگ یک بردازنده قرار دهیم
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت رسیک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 6549]
-
گوناگون
پربازدیدترینها