- چرا DTFT فصل 16 قابل محاسبه نیست و دو محدودیت - طول محدود و بسامدهای بسیار محدود - که آن را به DFT تبدیل می کند.
- جفت DFT، فاکتور پیچیدگی \(W_N = e^{-j2\pi/N}\)، و اثبات فرمول وارونگی که بر چیزی جز یک سری هندسی استوار نیست.
- همپوشانی طیفی در حوزه زمانی: نمونهبرداری از طیف، سیگنال زمان را مجبور می کند تا متناوب شود، که منشأ هر عجیب و غریب "دایره ای" است که در ادامه می آید.
- جابجایی دایرهای و کانولوشن دایرهای، و شرایط دقیق لایهبندی صفر \(N \ge L+M-1\) که کانولوشن دایرهای را ایجاد میکند کانولوشن خطی فصل 7 را بازتولید میکند.
- Overlap-add و overlap-save – چگونه فیلتری روی سیگنالی اجرا می شود که هرگز با استفاده از تبدیلی که بر بلوک های محدود پافشاری می کند، پایان نمی یابد.
- FFT در زمان قطع ریشه-2 از ابتدا مشتق شده است: تقسیم برابری، پروانه، ترتیب ورودی معکوس بیت، و افت از \(N^2\) به \(\tfrac{N}{2}\log_2 N\) ضرب.
- آنچه DFT یک سیگنال اندازهگیری شده واقعاً به شما میگوید: نشتی، پنجرهها، وضوح، و چرا لایهبندی صفر امتیاز بیشتری میدهد اما جزئیات بیشتری را ارائه نمیدهد.
طیفی که یک ماشین می تواند نگه دارد
فصل 16 تبدیل فوریهٔ گسسته زمان را تعریف کرد و فصل های 23 تا 25 تبدیل z را در بالای آن ساختند. هر دو پاسخ کاملی برای این سوال هستند که "این دنباله از چه فرکانس هایی ساخته شده است". هیچکدام توسط رایانه قابل ارزیابی نیستند، و دلیل آن ارزش بیان دقیق را دارد، زیرا این راه حل به جای اینکه برای راحتی انتخاب شود، به دلیل دشواری به ما تحمیل شده است.
دو چیز مانع است. این مجموع بیش از بینهایت نمونهها را شامل میشود و هیچ ماشینی رکورد بینهایتی ندارد. و \(\Omega\) یک متغیر پیوسته است، بنابراین \(X(e^{j\Omega})\) تابعی است در یک بازه — اعداد غیرقابل شمارش، و هیچ ماشینی نیز برای آن حافظه ندارد. بنابراین، یک تبدیل قابل محاسبه باید دو بار محدود باشد: نمونههای بسیار محدودی که وارد میشوند، تعداد محدودی اعداد بیرون میآیند.
هر دو محدودیت در عمل طبیعی است. هر اندازه گیری واقعی یک رکورد محدود است: شما ابزار را روشن می کنید، نمونه های \(N\) را جمع آوری می کنید، آن را خاموش می کنید. و هر نمایش واقعی یک طیف یک لیست محدود است: یک تحلیلگر چند صد یا چند هزار نقطه را ترسیم می کند، نه یک پیوستار. بنابراین سؤال این نیست که آیا باید این دو محدودیت ایجاد کرد یا نه، بلکه هزینه آنها چیست، و پاسخ صادقانه - که در بخش 26-4 کار شده و در بخش 26-9 بازگشته است - این است که هزینه آنها بیشتر از چیزی است که یک مبتدی انتظار دارد.
تبدیلی که حاصل می شود تبدیل فوریهٔ گسسته است. این تبدیل پنجمی نیست که در کنار سری فوریه، تبدیل فوریه، DTFT و تبدیل z به خاطر سپرده شود. این DTFT یک دنباله با طول محدود است که در فرکانسهای محدود خوانده میشود و هر یک از ویژگیهای آن را میتوان به همان جمله ردیابی کرد.
نمونهبرداری از DTFT: DFT
دنباله ای را در خارج از \(0 \le n \le N-1\) در نظر بگیرید که صفر است. سپس مجموع DTFT آن فقط دارای عبارات غیر صفر \(N\) است و اولین مشکل خود به خود از بین می رود.
این یک جمع محدود است، اما همچنان تابعی از یک \(\Omega\) پیوسته است. پس نمونهبرداری کنید DTFT در \(\Omega\) دوره ای با دوره \(2\pi\) است، بنابراین یک دوره همه چیز را حمل می کند. آن دوره را به قسمت های مساوی \(N\) تقسیم کنید و در آنجا ارزیابی کنید.
چرا دقیقا امتیاز \(N\)؟ از آنجایی که توالی با اعداد \(N\) مشخص می شود، بنابراین اعداد \(N\) طیف دقیقاً برای تعیین مجدد آن کافی است. تعداد کمتری اطلاعات را به طور جبران ناپذیر از دست می دهند. بیشتر زائد خواهد بود، زیرا مقادیر اضافی را می توان از اولین \(N\) بازسازی کرد. شمارش مصالحه نیست - این حسابداری دقیق است که تبدیل را وارونه می کند.
هر دو شاخص بیش از \(0,1,\dots,N-1\) اجرا می شوند. تبدیل رو به جلو حامل علامت منفی و بدون ضریب مقیاس است. معکوس حامل علامت مثبت و \(1/N\) است. ضریب \(k\)-امین DTFT است که در \(\Omega_k = 2\pi k/N\) ارزیابی شده است، بنابراین \(X[k] = X(e^{j\Omega})\big|_{\Omega = 2\pi k/N}\).
نمایی آنقدر ظاهر می شود که نامی به آن داده می شود. عامل پیچیدگی است
با آن جفت \(X[k] = \sum_n x[n]W_N^{kn}\) و \(x[n] = \tfrac1N\sum_k X[k]W_N^{-kn}\) را می خواند. از نظر هندسی، \(W_N^{kn}\) در اطراف دایره واحد در مراحل \(2\pi/N\) راه می رود. این سه هویت می گویند که بعد از گام های \(N\) شما در خانه هستید، پیاده روی تکرار می شود و نیم دور یک تغییر علامت است. هویت سوم کوچک، واضح است و دلیل کامل وجود FFT بخش 26-7 است.
دو ضریب را می توان بدون هیچ حسابی نوشت. تنظیم \(k=0\) نمایی را از بین میبرد، بنابراین \(X[0] = \sum_n x[n]\) مجموع نمونهها است - مقدار DC و یک بررسی رایگان روی هر DFT که محاسبه میکنید. اگر \(N\) زوج باشد، تنظیم \(k = N/2\) به \(e^{-j\pi n} = (-1)^n\) میدهد، بنابراین \(X[N/2] = \sum_n (-1)^n x[n]\) مجموع متناوب است، ضریب \(\Omega = \pi\)، بالاترین فرکانسی که یک سیگنال نمونهبرداری میتواند حمل کند.
این رقم ارزش حمل و نقل را دارد. منحنی خاکستری طیف واقعی رکورد محدود است. ساقه های طلا اعداد \(N\) هستند که DFT برمی گرداند. هیچ چیز در ساقههای طلا نمیگوید که منحنی بین آنها چگونه رفتار میکند، و بسیاری از اشتباهات عملی ناشی از فراموشی این است که DFT یک طیف نمونهبرداری شده را گزارش میکند، نه یک طیف پیوسته.
چرا معکوس کار می کند
فرمول وارونگی در بالا بیان شد. سزاوار برهان است و دلیل کوتاه است. همه چیز بر یک جمله متعامد در مورد عوامل پیچیدگی استوار است که خود چیزی بیش از مجموع یک سری هندسی نیست.
نمایی های گسسته \(N\) به طور متقابل در یک دوره متعامد هستند، که دقیقاً ویژگی مورد نیاز سری فوریه در فصل 10 و تبدیل فوریه در فصل 13 است. DFT همان ایده با مبنای محدود است.
برای دیدن آن، \(r = e^{j2\pi(n-m)/N}\) را قرار دهید و جمع را به صورت \(\sum_{k=0}^{N-1} r^{k}\) بخوانید. اگر \(n-m\) مضربی از \(N\) باشد، آنگاه \(r = 1\) و هر جمله 1 است، بنابراین مجموع آن \(N\) و مقدار نرمال شده 1 است. در غیر این صورت \(r \neq 1\): سری های محدود است.
صورت ناپدید می شود زیرا \(n-m\) یک عدد صحیح است و مخرج ناپدید نمی شود زیرا \(r \ne 1\). اکنون تبدیل رو به جلو را با معکوس ادعا شده جایگزین کنید و دو مجموع متناهی را مبادله کنید که همیشه قانونی است:
براکت مجموع متعامد است، که برای \(m = n\) 1 و برای هر \(m\) دیگر در محدوده 0 است، بنابراین مجموع بیرونی به عبارت واحد \(x[n]\) جمع می شود. این تمام اثبات است، و توضیح میدهد که \(1/N\) از کجا آمده است: نماییها متعامد هستند اما نرمالسازی نشدهاند و طول هر کدام \(N\) مربع است.
قیمت: همپوشانی طیفی دامنه زمانی
تا اینجا اشتقاق فرض میکرد که توالی خارج از \(0 \le n \le N-1\) واقعاً صفر است. فرض کنید اینطور نیست - فرض کنید \(x[n]\) برای همیشه روشن است و ما DTFT آن را در نقاط \(N\) به هر حال نمونهبرداری می کنیم. DFT معکوس به چه ترتیبی دست می دهد؟
محاسبه مانند بخش قبل است، اما اکنون مجموع داخلی تمام شده است\(m\)بر روی همه اعداد صحیح اجرا می شود، و رابطه متعامد می گوید هر زمان که براکت 1 است\(m\)و\(n\)با مضرب متفاوت است\(N\)- نه تنها زمانی که برابر باشند.
DFT معکوس نه \(x[n]\) بلکه پسوند دورهای آن را با دوره \(N\) برمیگرداند که با جابجایی سیگنال توسط هر مضربی از \(N\) و اضافه کردن آن ایجاد میشود. اگر \(x[n]\) کوتاهتر از \(N\) باشد، کپیهای جابجا شده با هم همپوشانی ندارند و چیزی از بین نمیرود. اگر طولانیتر باشد، دمها به سمت بالای سر جمع میشوند و آسیب غیرقابل برگشت است.
فصل 20 دوگانه این عبارت را مشخص کرد: نمونهبرداری از یک سیگنال در زمان، طیف آن را دوره ای می کند، و اگر سیگنال محدود به باند نباشد، کپی های طیفی با یکدیگر همپوشانی دارند و همپوشانی طیفی. در اینجا نقش ها رد و بدل می شوند. نمونهبرداری از طیف در فرکانس، سیگنال را دوره ای می کند و اگر سیگنال محدود به نمونه های \(N\) نباشد، کپی های زمانی با هم همپوشانی دارند. این پدیده همپوشانی طیفی حوزه زمان نامیده می شود و این دو گزاره یک قضیه هستند که در دو جهت خوانده می شوند.
این واقعیتی است که همه چیز عجیب و غریب در مورد DFT را توضیح می دهد. از آنجا که تبدیل معکوس فقط می تواند یک دنباله تناوبی را برگرداند، DFT لزوماً ورودی خود را به عنوان یک دوره از یک سیگنال تناوبی در نظر می گیرد. تفاوت بین رکوردی که به آن دادی و تکرار بی پایان آن رکورد را نمی داند. بنابراین جابجایی ها دور می شوند، کانولوشن ها دور می شوند و شاخص \(n\) در همه جا \(n \bmod N\) است.
شیفت دایره ای و کانولوشن دایره ای
\((n)_N\) را برای مدول کاهش یافته \(n\) \(N\) بنویسید. یک جابجایی دایره ای توسط \(m\) دنباله \(x[(n-m)_N]\) است: نمونه هایی که از انتهای سمت راست رکورد خارج شده اند دوباره در سمت چپ ظاهر می شوند. تصویر کردن نمونههای \(N\) در اطراف یک حلقه، همانطور که در شکل نشان داده شده است، این امر را آشکار میکند - یک جابجایی دایرهای چرخش حلقه است، و هیچوقت هیچ چیز گم یا ایجاد نمیشود.
تبدیل یک جابجایی دایرهای آسان است، و اثبات نشان میدهد که محل قرارگیری از کجا حفظ میشود. قرار دادن \(p = (n-m)_N\); همانطور که \(n\) یک بار از طریق \(0,\dots,N-1\) اجرا می شود، \(p\) نیز انجام می شود. سپس \(W_N^{kn} = W_N^{k(p+m)} = W_N^{km}W_N^{kp}\)، جایی که مرحله مشروع است زیرا \(W_N^{kN}=1\) مدول را جذب می کند. از این رو
کانولوشن دایره ای از همین الگو پیروی می کند. برای دو دنباله با طول \(N\) تعریف کنید،
با جایگزینی به DFT و مبادله مجموع قضیه در دو مرحله به دست می آید. با \(p = (n-m)_N\) دوباره،
فصل 7 نشان داد که یک سیستم LTI کانولوشن خطی را انجام می دهد. ضرب دو DFT به جای آن کانولوشن دایره ای را انجام می دهد. بخش 26-6 دقیقاً نشان میدهد که چه مقدار لایه صفر تفاوت را حذف میکند - و تا زمانی که این لایهبندی اعمال نشود، این دو یکسان نیستند و خطا نیز کم نیست.
خواص باقی مانده در زیر جمع آوری شده است. خطی بودن نیازی به اظهار نظر ندارد. ویژگی تقارن نسخه DFT تقارن مزدوج فصل 14 است: برای یک سیگنال حقیقی، نیمه دوم طیف تصویر آینه اول است، بنابراین از اعداد مختلط \(N\) فقط حدود \(N/2\) مستقل هستند - به همین دلیل است که یک ورودی واقعی با هزینه FFT تقریباً نصف است.
| اموال | دنباله | DFT |
|---|---|---|
| خطی بودن | \(a\,x_1[n] + b\,x_2[n]\) | \(a\,X_1[k] + b\,X_2[k]\) |
| تغییر زمان دایره ای | \(x[(n-m)_N]\) | \(W_N^{km}X[k]\) |
| تغییر فرکانس دایره ای | \(W_N^{-\ell n}x[n]\) | \(X[(k-\ell)_N]\) |
| کانولوشن دایره ای | \(x_1[n]\circledast x_2[n]\) | \(X_1[k]\,X_2[k]\) |
| ضرب | \(x_1[n]\,x_2[n]\) | \(\tfrac{1}{N}\,X_1[k]\circledast X_2[k]\) |
| زمان معکوس دایره ای | \(x[(-n)_N]\) | \(X[(-k)_N]\) |
| تقارن مزدوج (\(x\) واقعی) | \(x[n]\) واقعی | \(X[(N-k)_N] = X^{*}[k]\) |
| پارسهوال | \(\sum_{n=0}^{N-1}|x[n]|^2\) | \(\tfrac{1}{N}\sum_{k=0}^{N-1}|X[k]|^2\) |
کانولوشن خطی توسط DFT
فیلتر کردن کانولوشن است و کانولوشن گران است: یک سیگنال نقطه \(L\) از طریق فیلتر \(M\)-tap تقریباً ضرب \(LM\) به طور مستقیم هزینه دارد. قضیه کانولوشن دایره ای وعده جایگزینی آن را با دو تبدیل رو به جلو، ضرب \(N\) و یک تبدیل معکوس می دهد، که - زمانی که FFT بخش بعدی در دسترس باشد - به طور چشمگیری ارزان تر است. مانع کلمه دایره است .
رفع مستقیماً از بخش 26-4 می آید. کانولوشن دایره ای مدول کانولوشن خطی \(N\) است. اگر نتیجه خطی به اندازه کافی کوتاه باشد تا در نمونه های \(N\) قرار گیرد، چیزی برای بسته بندی وجود ندارد و این دو بر هم منطبق هستند. فصل 7 طول یک کانولوشن خطی را نشان داد: یک دنباله نقطه ای \(L\) که با یک دنباله نقطه ای \(M\) در هم می پیچد، نقاط \(L+M-1\) را تولید می کند. پس شرط خودش را می نویسد.
هر دو دنباله را با صفر به طول مشترک \(N\) که این نابرابری را برآورده می کند، قرار دهید، DFT های آنها را بگیرید، نقطه به نقطه ضرب کنید و معکوس کنید. اولین نمونه های \(L+M-1\) نتیجه دقیقاً کانولوشن خطی هستند. بقیه صفر هستند اگر \(N\) کوچکتر باشد، آخرین نمونه های \(L+M-1-N\) روی نمونه های اول جمع می شوند و آنها را خراب می کنند.
که یک بلوک را مدیریت می کند. یک مشکل فیلترینگ واقعی سیگنالی دارد که بسیار طولانی تر از فیلتر است یا اصلاً پایانی ندارد - صدا از میکروفون می رسد، نمونه هایی که از ADC می آیند. دگرگونی کل موضوع غیرممکن است و در هر صورت تاخیری غیرقابل قبول را به همراه خواهد داشت. بنابراین سیگنال به بلوکها بریده میشود و دو روش استاندارد برای دوختن نتایج مسدود شده به یکدیگر ارزش دانستن نام دارند.
Overlap-add ورودی را به بلوک های غیر همپوشانی به طول \(L\) برش می دهد. هر بلوک با فیلتر \(M\)-tap با استفاده از یک DFT نقطهای \(N\) با \(N \ge L+M-1\) پیچیده میشود و یک بلوک خروجی به طول \(L+M-1\) تولید میکند. از آنجایی که کانولوشن خطی است و بلوکهای ورودی به ورودی اضافه میشوند، بلوکهای خروجی باید به خروجی جمع شوند - اما بلوکهای خروجی متوالی توسط نمونههای \(M-1\) همپوشانی دارند و در آن منطقه همپوشانی اضافه میشوند. نام یک توصیف تحت اللفظی است.
همپوشانی-ذخیره حسابداری را به روش دیگری ترتیب می دهد. بلوکهای ورودی با طول \(N\) با همپوشانی نمونههای \(M-1\) بین بلوکهای متوالی گرفته میشوند. هر بلوک به صورت دایرهای با فیلتر پرشده در هم میپیچد و اولین نمونههای خروجی \(M-1\) از هر بلوک - دقیقاً نمونههایی که در اثر پیچشدن خراب شدهاند - دور ریخته میشوند. چیزی اضافه نشده است. قطعات باقی مانده به سادگی به هم متصل می شوند. نیازی به بافر خروجی ندارد، به همین دلیل است که انتخاب معمولی در سخت افزار است.
هزینه، و ایده پشت FFT
محاسبات را در DFT به صورت نوشته بشمارید. هر یک از مقادیر \(N\) \(X[k]\) مجموع محصولات \(N\) است، بنابراین محاسبه مستقیم هزینه های \(N^2\) ضرب مختلط و \(N(N-1)\) را دارد. رشد درجه دوم مشکل است. دوبرابر کردن طول رکورد کار را چهار برابر میکند و یک تبدیل 4096 نقطهای تقریباً به هفده میلیون ضرب پیچیده نیاز دارد - برای یک پردازنده مدرن یک بار کاملاً قابل احترام است و اگر باید هزار بار در ثانیه انجام شود ناامیدکننده است.
کولی و توکی این فرار را در سال 1965 منتشر کردند، اگرچه گاوس همان ترفند را در سال 1805 پیدا کرد و آن را به لاتین منتشر نکرد. ایده تفرقه کن و غلبه کن، و اهرم سومین هویت پیچیده، \(W_N^{k+N/2} = -W_N^{k}\) است.
بگذارید \(N\) زوج باشد و مجموع را بر برابری شاخص نمونه تقسیم کنیم - نمونههای زوج در یک گروه و با اعداد فرد در گروه دیگر. نوشتن \(n = 2r\) برای شرایط زوج و \(n = 2r+1\) برای فرد:
اکنون مشاهده حیاتی در مورد توان. از آنجایی که \(W_N^{2} = e^{-j4\pi/N} = e^{-j2\pi/(N/2)} = W_{N/2}\)، هر دو مجموع باقیمانده دقیقاً \(N/2\) نقطه DFT هستند - به ترتیب از دنبالههای فرعی با نمایهسازی زوج و دنبالهای با نمایهسازی فرد. آنها را \(G[k]\) و \(H[k]\) صدا کنید.
به نظر میرسد که فقط \(k = 0,\dots,N/2-1\) را پوشش میدهد، زیرا \(G\) و \(H\) تبدیلهای نقطهای \(N/2\) هستند و فقط تا اینجا تعریف شدهاند. اما آنها دوره ای با دوره \(N/2\) هستند، بنابراین \(G[k+N/2] = G[k]\) و \(H[k+N/2] = H[k]\). و هویت twiddle به \(W_N^{k+N/2} = -W_N^{k}\) می دهد. بنابراین جایگزینی \(k+N/2\) هزینه جدیدی ندارد:
یک ضرب مختلط \(W_N^k H[k]\) دو مقدار خروجی تولید می کند، یکی با جمع و دیگری با تفریق. این دو به یک کل پس انداز است، و هر چیز دیگری در FFT حسابداری در اطراف آن است.
آنچه به دست آمده را بشمارید. محاسبه دو DFT نقطهای \(N/2\) مستقیماً ضربهای \(2(N/2)^2 = N^2/2\) را هزینه میکند و هزینه نوترکیب \(N/2\) بیشتر است - تقریباً نیمی از \(N^2\) اصلی. اما دو تبدیل نیمه طول را می توان به همین ترتیب تقسیم کرد و نصف آنها بعد از آن. اگر \(N\) توان دو باشد، تقسیم تا زمانی ادامه مییابد که تبدیلها به طول 1 شوند و یک DFT 1 نقطهای هویت است: \(X[0] = x[0]\)، اصلاً حسابی وجود ندارد.
سطوح تقسیم \(\log_2 N\) وجود دارد، هر سطح شامل پروانه های \(N/2\) است، هر پروانه یک ضرب مختلط و دو جمع پیچیده هزینه دارد. مجموع ضربهای مختلط \(\tfrac{N}{2}\log_2 N\) و جمعهای مختلط \(N\log_2 N\) است و تبدیل از درجه دوم به تقریباً خطی شده است.
پروانه ها، معکوس کردن بیت، و تعداد عملیات
فرمول نوترکیبی به عنوان یک تقاطع دو ورودی، دو خروجی ترسیم می شود که شکل آن نام آن را می دهد. ورودی بالایی مستقیماً از هر دو خروجی عبور می کند. ورودی پایین تر در ضریب پیچیدگی یک بار ضرب می شود و سپس در بالا اضافه می شود و در پایین کم می شود.
چیدمان پروانه های \(N/2\) در هر مرحله و \(\log_2 N\) نمودار جریان زیر را برای \(N = 8\) ایجاد می کند. آن را از چپ به راست بخوانید: مرحله اول نمونهها را به صورت جفت ترکیب میکند، مرحله دوم نتایج جفت را ترکیب میکند، مرحله سوم آنها را ترکیب میکند. سه مرحله، هر کدام چهار پروانه، در مجموع دوازده پروانه - در مقابل شصت و چهار ضربی که یک DFT 8 نقطه ای مستقیم نیاز دارد.
ترتیب ورودی دلخواه به نظر می رسد و اینطور نیست. اولین تقسیم از شاخص های فرد جدا می شود. دومی هر نیمه را با بیت بعدی شاخص تقسیم می کند. و غیره پس از تقسیم \(\log_2 N\)، نمونه \(n\) به موقعیتی که نمایش باینری آن \(n\) به عقب نوشته شده است، منتقل شده است. برای \(N = 8\): شاخص 1 \(001\) است، \(100 = 4\) معکوس است، بنابراین \(x[1]\) در موقعیت 4 قرار می گیرد - دقیقاً جایی که شکل آن را نشان می دهد.
| \(n\) اعشاری | باینری \(n\) | معکوس شد | موقعیت |
|---|---|---|---|
| 0 | 000 | 000 | 0 |
| 1 | 001 | 100 | 4 |
| 2 | 010 | 010 | 2 |
| 3 | 011 | 110 | 6 |
| 4 | 100 | 001 | 1 |
| 5 | 101 | 101 | 5 |
| 6 | 110 | 011 | 3 |
| 7 | 111 | 111 | 7 |
خواندن ستون "موقعیت" به سمت پایین \(0,4,2,6,1,5,3,7\)، ترتیب ورودی در نمودار جریان را می دهد. جایگشت معکوس خودش است، بنابراین یک گذر در محل از مبادله های زوجی آن را انجام می دهد، و سپس کل تبدیل در همان آرایه بدون ذخیره سازی اضافی انجام می شود. این ویژگی در محل به اندازه سرعت در سخت افزارهای کوچک اهمیت دارد.
یک الگوریتم آینه-تصویر وجود دارد، کاهش در فرکانس، که شاخص خروجی را به جای شاخص ورودی تقسیم می کند. ورودیها را به ترتیب طبیعی میگیرد و خروجیها را به صورت بیت معکوس ارائه میکند، تعداد عملیات یکسانی دارد، و تنها در این که ضرب twiddle قبل یا بعد از جمع- تفریق اتفاق میافتد متفاوت است. هیچ کدام بهتر نیست؛ کتابخانه ها هرکدام را که با چیدمان حافظه آنها مطابقت دارد انتخاب می کنند.
سود به بهترین وجه از نظر عددی قدردانی می شود.
| \(N\) | DFT مستقیم: \(N^2\) mults | Radix-2 FFT: \(\tfrac{N}{2}\log_2 N\) | افزایش سرعت |
|---|---|---|---|
| 8 | 64 | 12 | 5.3 × |
| 64 | 4 096 | 192 | 21.3 × |
| 256 | 65 536 | 1 024 | 64 × |
| 1 024 | 1 048 576 | 5 120 | 204.8 × |
| 4 096 | 16 777 216 | 24 576 | 682.7 × |
| 65 536 | 4 294 967 296 | 524 288 | 8 192 × |
تجزیه و تحلیل طیفی در عمل
فرض کنید یک سیگنال پیوسته در \(f_s\) هرتز نمونهبرداری شده است، نمونه های \(N\) جمع آوری شده و DFT آنها گرفته می شود. Bin \(k\) در \(\Omega_k = 2\pi k/N\) رادیان در هر نمونه قرار دارد که با توجه به رابطه فصل 20 \(\Omega = 2\pi f/f_s\) با فرکانس آنالوگ مطابقت دارد.
فاصله بین \(\Delta f\) متقابل مدت زمان رکورد \(T\) است و آن رابطه واحد بر هر چیزی که در ادامه می آید حاکم است. یک سیگنال را برای یک دهم ثانیه تماشا کنید و طیف به یک شبکه 10 هرتز می رسد، هر نرخ نمونهبرداری.
حالا سختی. بریدن یک سینوسی بی نهایت به نمونه های \(N\) توسط یک پنجره مستطیلی ضرب می شود، و فصل 14 نشان داد که ضرب در زمان یک کانولوشن فرکانس است. طیف واقعی یک لحن خالص یک خط است. با تبدیل پنجره مستطیل شکل - یک هسته دیریکله، پسر عموی مجزای سینک - به یک لوب اصلی با عرض محدود احاطه شده توسط حصاری از لوب های جانبی تبدیل می شود. این لکه گیری نشت طیفی است و در هر DFT هر سیگنال اندازه گیری شده وجود دارد.
یک مورد شانس وجود دارد. اگر فرکانس آهنگ دقیقاً روی یک bin قرار گیرد، تعداد صحیحی از چرخههای آن در داخل رکورد قرار میگیرد، پسوند دورهای بخش 26-4 یکپارچه به هم میپیوندد، و هر لوب جانبی دقیقاً روی یک صفر از هسته قرار میگیرد. سپس DFT یک سنبله تمیز را نشان می دهد. تون را نیم سطل به سمت مرکز حرکت دهید و رکورد دیگر به بالا نمیپیوندد: ناپیوستگی در درز دارای محتوای پهنای باند است، لوبهای کناری دیگر روی صفر قرار نمیگیرند و انرژی در کل طیف ظاهر میشود.
DFT در هر دو مورد به درستی رفتار می کند. طیف گسترش دورهای آنچه شما به آن دادهاید را گزارش میکند، و زمانی که رکورد به آرامی به هم نمیپیوندد، آن فرمت دورهای واقعاً شامل یک ناپیوستگی گام در هر نمونه \(N\) است.
راه حل این است که رکورد را باریک کنید تا به آرامی به هم بپیوندد، که به معنای ضرب در پنجره ای است که به جای بریدن ناگهانی در دو انتها به صفر می رسد. باریکتر ملایمتر، لوبهای جانبی را بهطور چشمگیری پایین میآورد، به قیمت یک لوب اصلی گستردهتر - شما توانایی دیدن یک لحن کوچک در کنار یک صدای بزرگ را با توانایی جدا کردن دو تن با اندازه مشابه عوض میکنید. این مبادله کل موضوع طراحی پنجره است.
| پنجره | تعریف در \(0 \le n \le N-1\) | عرض لوب اصلی | لوب کناری قله |
|---|---|---|---|
| مستطیل شکل | \(w[n]=1\) | 2 خانه | \(-13\) دسی بل |
| هان | \(0.5-0.5\cos\!\frac{2\pi n}{N-1}\) | 4 خانه | \(-31\) دسی بل |
| همینگ | \(0.54-0.46\cos\!\frac{2\pi n}{N-1}\) | 4 خانه | \(-43\) دسی بل |
| بلکمن | \(0.42-0.5\cos\!\frac{2\pi n}{N-1}+0.08\cos\!\frac{4\pi n}{N-1}\) | 6 خانه | \(-58\) دسی بل |
دو نکته عملی دیگر فصل را می بندد. اولین مورد وضوح است. تنها در صورتی می توان دو تن را از هم جدا کرد که لوب های اصلی آنها با هم ادغام نشوند، بنابراین با یک پنجره مستطیلی باید تقریباً \(1/T\) هرتز و با پنجره هان یا همینگ با تقریباً \(2/T\) از هم جدا شوند. وضوح با زمان مشاهده و با هیچ چیز دیگری خریداری می شود - نه با نرخ نمونهبرداری سریع تر، و نه با تبدیل طولانی تر همان داده ها.
آن تذکر آخر نکته دوم است. صفر کردن یک رکورد به طول تبدیل طولانیتر، خانههای بیشتری را ایجاد میکند، با فاصله ریزتر، و نموداری بهطور واضح صافتر ایجاد میکند. هیچ اطلاعاتی اضافه نمیکند: نمونههای اضافی صفر هستند، مدت زمان رکورد \(T\) بدون تغییر است، و شبکه ظریفتر فقط همان DTFT زیرین را درونیابی میکند. لایهبندی صفر مفید است – اوج را با دقت بیشتری تعیین میکند و جلوه حصار حصار را حذف میکند، که در آن پیکی که بین خانهها قرار میگیرد تا 3.9 دسیبل کمتر خوانده میشود – اما این ادعا که وضوح را بهبود میبخشد به سادگی نادرست است.
نمونه های کار شده
مشکل DFT 4 نقطه ای \(x[n] = \{1,\,2,\,3,\,4\}\) را برای \(n = 0,1,2,3\) محاسبه کنید و با استفاده از رابطه پارسوال پاسخ را تأیید کنید.
راه حل. با \(N = 4\) فاکتور پیچیدگی \(W_4 = e^{-j\pi/2} = -j\) است، بنابراین کل محاسبات توان های \(-j\) است و نیازی به مثلثات نیست. از آنجایی که \(X[k] = \sum_{n} x[n](-j)^{kn}\)،
دو چک فوری است. \(X[0] = 10\) مجموع نمونه ها است، همانطور که باید باشد. و \(X[2] = X[N/2]\) مجموع متناوب \(1-2+3-4 = -2\) است، همچنین همانطور که باید باشد. سیگنال حقیقی است، بنابراین تقارن مزدوج نیاز به \(X[3] = X^{*}[1]\) دارد و در واقع \(-2-2j\) مزدوج \(-2+2j\) است.
رابطه پارسوال قوی ترین آزمون است، زیرا شامل هر عدد می شود:
با استفاده از \(|-2+2j|^2 = 4+4 = 8\). این دو موافق هستند، بنابراین تبدیل درست است.
مشکل دنباله \(x[n] = (0.5)^n u[n]\) بی نهایت طولانی است. DTFT آن در نقاط \(N = 4\) نمونهبرداری می شود و DFT معکوس گرفته می شود. چه چیزی برمی گردد و چقدر با \(x[n]\) تفاوت دارد؟
راه حل. در نتیجه بخش 26-4 پاسخ پسوند دوره ای مستعار \(x_p[n] = \sum_{r} x[n+rN]\) است. از آنجایی که \(x[n]\) علّی است، فقط \(r \ge 0\) کمک می کند و هر جمله مضرب ثابت عبارت قبلی است:
به صورت عددی \(x_p = \{1.0667,\ 0.5333,\ 0.2667,\ 0.1333\}\) در برابر \(\{1,\ 0.5,\ 0.25,\ 0.125\}\) واقعی. هر نمونه با همان ضریب \(1/0.9375\) بسیار بزرگ است، یعنی 6.67٪ - دم تا شده به خودی خود یک کپی مقیاس شده از سر است، زیرا یک دنباله هندسی در هنگام جابجایی خود مشابه است.
تأیید کنید که DFT 4 نقطه ای \(x_p\) واقعاً نمونه های DTFT را بازتولید می کند. DTFT \(X(e^{j\Omega}) = 1/(1-0.5e^{-j\Omega})\) است، بنابراین در \(\Omega_0 = 0\) برابر با \(1/0.5 = 2\) است. و مجموع \(x_p\) \(1.0667+0.5333+0.2667+0.1333 = 2.000\) است. در \(\Omega_1 = \pi/2\)، \(X = 1/(1+0.5j) = 0.8 - 0.4j\)؛ و
دقیقا همانطور که لازم است مقادیر DFT نمونه های صحیحی از DTFT هستند. این توالی است که آنها به آن معکوس می کنند که خراب شده است. افزایش \(N\) خطا را مانند \(0.5^N\) کوچک می کند، به همین دلیل است که اگر رکورد چندین ثابت زمانی را پوشش دهد، سیگنال پوسیده معمولاً ایمن است.
مشکل اجازه دهید \(x[n] = \{1,2,3\}\) و \(h[n] = \{1,1\}\). کانولوشن خطی و سپس کانولوشن دایره ای 3 نقطه را پیدا کنید و نشان دهید که چگونه لایه صفر آنها را با هم تطبیق می دهد.
راه حل. کانولوشن خطی دارای طول \(3+2-1 = 4\) است. لغزش \(h\) در امتداد \(x\) به روش فصل 7 نشان می دهد
اکنون کانولوشن دایره ای 3 نقطه ای. Pad \(h\) به \(\{1,1,0\}\) بنابراین هر دو دنباله دارای طول 3 هستند و \(y[n] = \sum_{m=0}^{2}x[m]h[(n-m)_3]\) را ارزیابی می کنند:
بنابراین \(y_{\text{circ}} = \{4,3,5\}\). با نتیجه خطی مقایسه کنید: نمونه چهارم، 3، در یک رکورد طول 3 جایی برای رفتن نداشت و به دور اول پیچید و عدد 1 را به \(1+3 = 4\) تبدیل کرد. هیچ چیز دیگری تغییر نکرد. این همپوشانی طیفی دامنه زمانی در عینی ترین شکل آن است.
شرط \(N \ge L+M-1 = 4\) می گوید از تبدیل 4 نقطه ای استفاده کنید. روی \(x = \{1,2,3,0\}\) و \(h = \{1,1,0,0\}\) قرار دهید و تکرار کنید:
که \(\{1,3,5,3\}\) است، کانولوشن خطی دقیقا. یک صفر اضافی در هر دنباله کل تفاوت بین یک پاسخ اشتباه و یک پاسخ درست بود.
مشکل DFT 8 نقطه ای \(x[n] = \{1,1,1,1,0,0,0,0\}\) را با استفاده از تجزیه به موقع محاسبه کنید و \(X[1]\) را در برابر ارزیابی مستقیم تأیید کنید.
راه حل. تقسیم بر اساس برابری. نمونههای دارای نمایه زوج \(g = \{x[0],x[2],x[4],x[6]\} = \{1,1,0,0\}\) و شاخصهای فرد \(h = \{x[1],x[3],x[5],x[7]\} = \{1,1,0,0\}\) هستند - یک دنباله یکسان، بنابراین یک DFT 4 نقطهای برای هر دو استفاده میشود. با \(W_4 = -j\)،
اکنون با استفاده از \(W_8 = e^{-j\pi/4}\) با پروانه دوباره ترکیب کنید تا \(W_8^0 = 1\)، \(W_8^1 = \tfrac{\sqrt2}{2}(1-j)\)، \(W_8^2 = -j\) و \(W_8^3 = -\tfrac{\sqrt2}{2}(1+j)\). اصطلاحات عجیب و غریب پیچ خورده هستند
با استفاده از \((1-j)^2 = -2j\) و \((1+j)^2 = 2j\). با افزودن و تفریق این موارد از \(G[k]\)، هر هشت خروجی به طور همزمان به دست میآید:
سه چک \(X[0] = 4\) مجموع نمونه ها است. تقارن مزدوج \(X[8-k] = X^{*}[k]\) برای هر جفت برقرار است. و ارزیابی مستقیم \(X[1] = \sum_{n=0}^{3}e^{-j\pi n/4}\) یک سری هندسی را با \((1-e^{-j\pi})/(1-e^{-j\pi/4}) = 2/(0.2929+0.7071j) = 1 - 2.4142j\) جمع میکند که با نتیجه پروانه مطابقت دارد.
کار را بشمارید: دوازده پروانه، در برابر شصت و چهار ضرب برای تبدیل مستقیم - و نیمی از این پروانهها ضریب چرخشی 1 یا 0 داشتند و اصلاً هزینهای نداشتند.
مشکل یک فیلتر FIR 256 ضربه ای باید روی سیگنال حقیقی طولانی با استفاده از همپوشانی-افزودن با FFT های 1024 نقطه ای اجرا شود. هزینه محاسباتی هر نمونه خروجی را با کانولوشن مستقیم مقایسه کنید.
راه حل. با \(M = 256\) و \(N = 1024\)، هر بلوک می تواند نمونه های ورودی جدید \(L = N - M + 1 = 769\) را حمل کند و همچنان \(N \ge L+M-1\) را برآورده کند. DFT فیلتر یک بار محاسبه می شود و مجدداً مورد استفاده قرار می گیرد، بنابراین هزینه هر بلوک یک FFT رو به جلو، \(N\) ضرب پیچیده در حوزه فرکانس و یک FFT معکوس است:
تقسیم بر 769 نمونه خروجی که بلوک تولید می کند، ضرب های پیچیده \(11\,264/769 \approx 14.6\) را در هر نمونه خروجی به دست می دهد. یک ضرب مختلط چهار ضرب واقعی است، بنابراین این در حدود 58.6 ضرب واقعی در هر نمونه است.
کانولوشن مستقیم یک ضرب واقعی برای هر ضربه در هر نمونه هزینه دارد، یعنی 256. بنابراین کانولوشن سریع در اینجا حدود \(256/58.6 \approx 4.4\) برابر ارزانتر است. دوبرابر کردن فیلتر به 512 ضربه، هزینه مستقیم را دو برابر می کند در حالی که به سختی هزینه FFT را جابجا می کند، بنابراین مزیت تقریباً دو برابر می شود. از طرف دیگر، برای یک فیلتر ده یا بیست ضربه ای، باتلاق های سربار تبدیل، صرفه جویی و کانولوشن مستقیم برنده می شود.
نقطه سربه سر معمولاً چیزی بین 30 تا 60 ضربه روی یک پردازنده همه منظوره است. در زیر آن، مستقیماً بپیچید. در بالای آن، تبدیل.
مشکل یک سیگنال در \(f_s = 8\) کیلوهرتز نمونهبرداری می شود و نمونه های \(N = 1024\) تبدیل می شوند. الف) فاصله بین سطل ها چقدر است؟ (ب) صدای 1000 هرتز کجا ظاهر می شود و آیا نشت می کند؟ ج) آیا دو تن در 1000 هرتز و 1006 هرتز قابل حل هستند؟ (د) آیا صفر کردن تا 4096 امتیاز کمکی می کند؟
راه حل (الف). \(\Delta f = f_s/N = 8000/1024 = 7.8125\) هرتز، و رکورد \(T = 1024/8000 = 0.128\) s طول می کشد. همانطور که وعده داده شده بود، \(1/T = 7.8125\) هرتز.
راه حل (ب).\(k = 1000/7.8125 = 128\)دقیقاً، بنابراین تن دقیقاً روی bin 128 می افتد. تعداد صحیح چرخه - 128 تای آنها - در داخل رکورد قرار می گیرد، پسوند دوره ای بدون درز به هم می پیوندد، و طیف یک خط تمیز را در bin 128 نشان می دهد (با آینه آن در bin).\(1024-128 = 896\)) و اساساً هیچ جای دیگر. صدایی در 1005 هرتز مینشیند\(k = 128.64\)، بین خانه ها، و به همه آنها نشت می کرد.
راه حل (ج). تونها 6 هرتز از هم فاصله دارند که کمتر از فاصله بین 7.8125 هرتز است، بنابراین آنها در یک سطل قرار می گیرند و نمی توان آنها را از هم جدا کرد - هیچ مقدار پردازش آنها را بازیابی نمی کند. وضوح نیاز به مشاهده طولانی تری دارد: یک پنجره مستطیلی به \(T \ge 1/6 \approx 0.167\) s نیاز دارد، از این رو \(N \ge 8000/6 \approx 1334\)، تا 2048 نمونه گرد شده است. با پنجره هان که پهنای لوب اصلی آن دو برابر است، \(T \ge 2/6 = 0.333\) s و \(N \ge 2667\) به 4096 گرد شده است.
راه حل (د). نه. صفر کردن همان 1024 نمونه به یک تبدیل 4096 نقطه ای، فاصله سطل را تا 1.95 هرتز یک چهارم می کند و منحنی صاف تری می کشد، اما \(T\) هنوز 0.128 ثانیه است و DTFT زیربنایی بدون تغییر است - این دو رنگ بیشتر در یک نمونه ادغام شده اند. درون یابی صفر بالشتک. حل نمی شود ارزش این را دارد که در مورد 1005 هرتز در قسمت (ب) انجام شود، جایی که یک شبکه ریزتر محل اوج را پین میکند و از خوانش پایین حصار تا 3.9 دسی بل جلوگیری میکند.
خلاصه فصل
\(X[k]=\sum_{n=0}^{N-1}x[n]W_N^{kn}\)، \(x[n]=\tfrac1N\sum_k X[k]W_N^{-kn}\)، با \(W_N=e^{-j2\pi/N}\). این DTFT نمونهبرداری شده در \(\Omega_k = 2\pi k/N\) است.
نمونهبرداری از طیف سیگنال را دوره ای می کند: DFT معکوس \(\sum_r x[n+rN]\) را برمی گرداند. همه چیز دایره ای از این نتیجه می گیرد.
\(X_1[k]X_2[k]\) به دایره ای، نه خطی، کانولوشن معکوس می شود. پد به \(N \ge L+M-1\) و این دو موافق هستند.
\(X[k]=G[k]+W_N^kH[k]\)، \(X[k+N/2]=G[k]-W_N^kH[k]\). یک ضرب، دو خروجی - کل صرفه جویی در FFT.
\(N^2\) تبدیل به \(\tfrac{N}{2}\log_2 N\) می شود: ضریب 205 در \(N=1024\) و 8192 در \(N=65536\). ورودی ها به صورت بیت معکوس می رسند.
\(\Delta f = f_s/N = 1/T\). نشت صداهای خارج از بن. پنجره ها لوب های جانبی را برای عرض تجارت می کنند. لایه صفر درون یابی می شود اما هرگز حل نمی شود.
مشکلات
مسائل 1 تا 3 تعریف و ویژگی های آن را بیان می کنند. 4 و 5 مربوط به کانولوشن دایره ای است. 6 و 7 ساختار FFT. 8 کاربردهای اندازه گیری قبل از حرکت، هر تبدیل عددی را با \(X[0]\) و با Parseval بررسی کنید.
- DFT 4 نقطه ای \(x[n] = \{1,\,0,\,-1,\,0\}\) را محاسبه کنید. \(X[0]\) را تأیید کنید، تقارن مزدوج را تأیید کنید و رابطه پارسوال را بررسی کنید.
- DFT 4 نقطه ای برخی از دنباله های واقعی \(X = \{6,\ -2+2j,\ -2,\ -2-2j\}\) است. \(x[n]\) را با استفاده از DFT معکوس بازیابی کنید و بدون محاسبه بیان کنید که DFT \(x[(n-1)_4]\) چقدر خواهد بود.
- نشان دهید که اگر \(x[n]\) واقعی است و حتی در مورد \(n = 0\) به معنای دایره ای، یعنی \(x[(-n)_N] = x[n]\)، آنگاه \(X[k]\) برای هر \(k\) واقعی است. آرگومان خود را روی \(x = \{3,\,1,\,2,\,1\}\) با \(N=4\) تست کنید.
- اجازه دهید \(x = \{1,\,-1,\,2\}\) و \(h = \{2,\,1\}\). کانولوشن خطی، کانولوشن دایره ای 3 نقطه ای و کوچکترین طول تبدیلی را که نتیجه دایره ای برابر با خطی است، پیدا کنید.
- یک فیلتر 64 ضربه ای با همپوشانی-افزودن با استفاده از تبدیل های 512 نقطه ای اعمال می شود. هر بلوک چند نمونه ورودی جدید حمل میکند، بلوکهای خروجی متوالی با چند نمونه همپوشانی دارند و هر نمونه خروجی چند ضرب پیچیده هزینه دارد؟
- نمودار جریان 4 نقطه ای کاهش در زمان را رسم کنید. ترتیب ورودی را برچسب گذاری کنید، هر فاکتور پیچیدگی را علامت بزنید و ضرب هایی را که در واقع بی اهمیت هستند بشمارید.
- نشان دهید که تعداد کل اضافات پیچیده در یک radix-2 FFT به طول \(N\) \(N\log_2 N\) است. سپس توضیح دهید که چرا صرفه جویی در DFT مستقیم برای جمع کمتر از ضرب است.
- یک تون 2 کیلوهرتز و یک تن 2.1 کیلوهرتز با دامنه های بسیار متفاوت در 20 کیلوهرتز نمونهبرداری می شود. (الف) چه طول رکوردی برای حل آنها با یک پنجره مستطیلی لازم است؟ (ب) چرا ممکن است یک پنجره همینگ ترجیح داده شود حتی اگر به رکورد طولانی تری نیاز دارد؟ (ج) اگر \(N = 1024\)، تون 2 کیلوهرتز روی کدام سطل قرار می گیرد و آیا نشت می کند؟