FFT روشی کارآمد برایِ حسابِ تبدیلِ فوریهٔ گسسته یا DFT است. نتیجه کمک میکند سهمِ فرکانسها را در یک قطعهٔ عددی ببینیم؛ از آن بهتنهایی متنِ گفتار به دست نمیآید. در این تمرین برایِ شفافبودنِ محاسبه، DFT را مستقیم با حلقه مینویسیم، نه الگوریتمِ سریعِ FFT. بنابراین زمانِ اجرایِ این کد، بنچمارکِ FFT یا کتابخانهٔ NumPy نیست.
اول، نرخ و طولِ مشاهده را معلوم کنیم
نرخِ ساختگیِ ۶۴ نمونه در ثانیه را برایِ سادهشدنِ عددها انتخاب کردهایم؛ این نرخِ ضبطِ پیشنهادی برایِ گفتار نیست. شانزده نمونه، یکچهارمِ ثانیه و سیودو نمونه، نیمثانیه مشاهده دارند. در تبدیلِ همطولِ این دو، فاصلهٔ شبکهٔ فرکانسی بهترتیب ۴ و۲هرتز است: نرخ تقسیم بر طولِ تبدیل.
شمارهٔ خانه، خودِ فرکانس نیست. خانهٔ دوم در تبدیلِ شانزدهتاییِ این مثال ۸هرتز است؛ در تبدیلِ سیودوتایی، خانهٔ چهارم همان ۸هرتز میشود. اگر نرخ یا طول را کنارِ تصویرِ طیف ننویسیم، مقایسهٔ شمارهها میتواند گمراهکننده باشد. مستندِ fftfreq هم واحدِ خانهها را به فاصلهٔ زمانیِ نمونه وصل میکند.
موجِ رویِ خانه با موجِ بینِ دو خانه فرق دارد
برایِ موجِ کسینوسیِ ۸هرتز، شانزده نمونه با پنجرهٔ مستطیلی داریم؛ در نیمهٔ غیرمنفی، قله رویِ خانهٔ دوم است. موجِ ۱۰هرتز در همان مدت میانِ خانههایِ ۸ و۱۲ قرار میگیرد و سهمش فقط به یک خانه محدود نمیماند. دادهٔ اصلی و همهٔ قدرهایِ غیرمنفی در JSON آمدهاند؛ نمودارِ تخیلیِ محصول جایِ محاسبه نشده است.
با سیودو مشاهدهٔ واقعی از موجِ ۱۰هرتز، شبکهٔ دوهرتزی داریم و قلهٔ غیرمنفی رویِ خانهٔ پنجم میافتد. این بار مدتِ مشاهده هم بیشتر شده است. از این مثالِ یکموجی نتیجه نگیرید دو فرکانسِ نزدیکِ گفتار همیشه به همین سادگی از هم جدا میشوند؛ مدت، پنجره، نسبتِ دامنهها و نویز نیز مهماند.
صفرپُرکنی خانهٔ بیشتری میسازد، مشاهدهٔ تازه نه
در حالتِ چهارم، همان شانزده نمونهٔ موجِ ۱۰هرتز را نگه میداریم و تا طولِ ۶۴ صفر میافزاییم. فاصلهٔ خانهها یکهرتز میشود، ولی مدتِ دادهٔ دیدهشده همان یکچهارمِ ثانیه است. کد تعدادِ مشاهده و طولِ تبدیل را در دو فیلدِ جدا ثبت میکند تا افزایشِ نقاطِ خروجی با جمعآوریِ اطلاعاتِ جدید اشتباه نشود.
| حالتِ موجِ۱۰هرتز | مشاهدهٔ واقعی | طولِ تبدیل | فاصلهٔ خانه |
|---|---|---|---|
| کوتاه | ۱۶ | ۱۶ | ۴هرتز |
| مشاهدهٔ بلندتر | ۳۲ | ۳۲ | ۲هرتز |
| صفرپُرکنیِ کوتاه | ۱۶ | ۶۴ | ۱هرتز |
پنجره خودش محاسبه را عوض میکند
حالتِ پنجم موجِ ۸هرتزِ شانزدهنمونهای را در پنجرهٔ Hannِ متقارن با مخرجِ N−1 ضرب میکند. این قرارداد صریح است؛ آن را با همهٔ تعریفهایِ دورهایِ پنجره یکسان نمینامیم. قدرِ خانهها پس از ضرب تغییر میکند، پس برایِ مقایسهٔ دامنه باید اثرِ پنجره و نرمالسازی را هم مشخص کرد.
در این صفحه اصلاحِ دامنهٔ پنجره یا تخمینِ توانِ گفتار انجام نمیدهیم. صرفِ کوچکشدنِ یک ستون، شاهدِ حذفِ نویز نیست. کنترلِ جداگانهٔ Parseval برایِ هر پنج حالت، انرژیِ دادهٔ واقعاً واردشده به تبدیل را با جمعِ انرژیِ خروجی تطبیق میدهد؛ این آزمون کیفیتِ فایل یا مدل را تضمین نمیکند.
گزارشِ قابلِ استفاده چه چیزهایی داشته باشد؟
نرخ، تعدادِ مشاهده، طولِ تبدیل، پنجره و مقیاسِ دامنه را کنارِ نتیجه ثبت کنید. در دادهٔ واقعی، مثبت و منفیِ طیف و نحوهٔ نمایشِ یکطرفه نیز باید روشن باشند؛ این کد فقط قدرهایِ غیرمنفی را برایِ خواندن نشان میدهد ولی کنترلِ انرژی از کلِ تبدیل است. هیچ میکروفن یا فایلِ خصوصی خوانده نشده است.
نرخِ نمونهبرداری واحدِ زمانی را توضیح میدهد؛ مثالِ Aliasing ابهامِ ثبت را جدا نشان میدهد. اگر نیازِ شما خروجیِ متنی است، قالب و معیارِ خروجی را با تیمِ اپرانگار بررسی کنید؛ داشتنِ طیف، به معنیِ تشخیصِ کلمه نیست.
فایل تمرین و منبع
DFT مستقیمِ پنج حالتِ طول، پنجره و صفرپُرکنی را اجرا کنید · قدرِ هر خانهٔ غیرمنفی، فاصلهٔ شبکه و کنترلِ انرژیِ واقعی
- مرجعِ اصلی؛ تفاوتِ محاسبهٔ سریعِ FFT و خروجیِ DFT و طولِ تبدیل؛ NumPy اینجا اجرا نشده است
- مرجعِ اصلی؛ واحد و فاصلهٔ خانههایِ فرکانسی از نرخ و طول
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.