ضربِ دو طیف و تبدیلِ معکوس، بدونِ طولِ مناسب میتواند کانولوشنِ دوری بدهد؛ این نتیجه با کانولوشنِ خطیِ کامل یکی نیست. برایِ دو دنبالهٔبهطولِ N وM،طولِ تبدیلِ دستکمN+M−1 جایِ کافی برایِ حاصلِ خطی دارد. در این تمرین سه عدد و یک فیلترِ دوعددی را با حلقه،np.convolve وFFTِ دو طول واقعاً مقایسه میکنیم.
خروجیِ خطی را با حلقهٔمستقل بسازیم
ورودیِ اصیلa=[۱،۲،۳] وb=[۱،−۱] است. تعریفِ خطی y[n]=Σ a[m]b[n−m] است؛ در حلقهٔمستقیم، حاصلِ a[i]×b[j] به خانهٔi+j اضافه میشود و همان نگاشت را میسازد. طولِ خروجی۳+۲−۱=۴ است و مقدارهایِ[۱،۱،۱،−۳] به دست میآیند. برایِ نمونه، خانهٔ۱ از۲×۱+۱×(−۱)=۱ ساخته میشود.
کد سپس np.convolve را با modeِ full اجرا میکند و برابریِ هرچهارخانه با همان حلقه را کنترل میکند. در اینجا NumPy۲٫۳٫۵ واقعاً اجرا شده است؛ SciPy یا سرویسِ پردازشِ صوت اجرا نشدهاند. عددها سیگنالِ آموزشیاند و فایلِ گفتارِ واقعی نداریم.
تبدیلِ سهتایی کدام مقدار را تا میکند؟
در مسیرِ FFT باn=3،هردو ورودی به طولِ سه واردِ تبدیل میشوند،دو طیف ضرب وifft گرفته میشود. نتیجهٔمشاهدهشده[−۲،۱،۱] است؛ خانهٔچهارمِ حاصلِ خطی در نمایشِ سهتایی جایِ جدا ندارد و با خانهٔصفر جمع شده است:۱+(−۳)=−۲. این folding را یک حلقهٔمستقل رویِ حاصلِ خطی هم میسازد.
پس فقط بریدنِ آرایهٔآخر رخ نداده است؛ مقدارِ خانهٔاول هم عوض شده است. اگر یک پیادهسازی را صرفاً با سه خانهٔاولِ مرجعِ خطی مقایسه کنیم، علتِ خطا پنهان میماند. نوعِ دوری یاخطیِ قرارداد باید پیش از تفسیرِ خروجی روشن باشد.
| روشِ همین نمونه | طول | حاصل |
|---|---|---|
| حلقهٔخطی وconvolveِ full | ۴ | [۱،۱،۱،−۳] |
| FFTِ سهتایی | ۳ | [−۲،۱،۱] |
| FFTِ صفرپُرشده تا۴ | ۴ | [۱،۱،۱،−۳] |
با طولِ چهار،جا برایِ حاصلِ کامل داریم
همان ورودیها باn=4 صفرپُر میشوند. ضربِ طیف وifft حالا با تمامِ حاصلِ خطی برابر است. مقایسهٔعددهایِ ممیزشناور با rtolِ صفر وatolِ ۱e−12 انجام میشود؛ باقیماندهٔبخشِ موهومی نیز باید کوچکتر ازهمین حد باشد. این قراردادِ عددِ آموزشی است،نه آستانهٔکیفیتِ شنیداری.
سه fixtureِ جدا با ضربهٔآغاز،ضربهٔجابهجا وورودیِ تکعضوی نیز اجرا شدهاند. برایِ هرکدام طولِ N+M−1 ومرجعِ حلقهٔمستقل داریم. ورودیِ خالی،طولِ تبدیلِ کوتاهتر ازهرکدامِ ورودیها ومقدارِ NaN درسه آزمون رد میشوند؛ سقفِ طولِ هرورودی۸ وn حداکثر۱۶ انتخابِ محدودِ فایل است.
این صفرپُرکنی با طولانیکردنِ مشاهده فرق دارد
راهنمایِ FFT،طولِ مشاهده وپنجره نشان میدهد صفرهایِ اضافی دادهٔتازه ازموج نمیسازند. اینجا هم مشاهدهٔجدیدی اضافه نشده است؛ اما طولِ نمایشِ حاصل باید مانعِ تاخوردنِ دوریِ همین عملیات شود. دو کاربردِ صفرپُرکنی را با یک عبارتِ کلی توضیح ندهیم.
همچنین قراردادِ full باsame وvalid یکسان نیست؛ مستنداتِ convolve طول ومحدودهٔآنها را جدا تعریف میکند. در این مثال فقطfull را بامرجعِ خطی میسنجیم. تبدیلِ موفق بهتنهایی روشِ مرزِ فایلِ بزرگ،overlap-add،پردازشِ زنده یافیلترِ عملیاتی نمیسازد.
از یک محاسبه،سرعت یا کیفیتِ مدل نسازیم
مثالِ Sobel دربارهٔقراردادِ کرنل وعلامت درپنجرهٔتصویر است؛ این صفحه کانولوشنِ یکبعدیِ خطی ودوری را واقعاً اجرا میکند. هیچ شبکهٔCNN یا مدلِ گفتار آموزش ندادهایم و زمانِ اجرا را هم بنچمارک نکردهایم. روشِ بزرگتر برایِ مسئلهٔکوچک لزوماًسریعتر نیست.
برای ادامه به مبانی هوش مصنوعی بروید و هنگامِ مقایسهٔدو پیادهسازی،طولِ ورودی،mode،طولِ تبدیل،مقیاس وtolerance را کنارِ نتیجه بنویسید. تمامِ دادهها ساختهٔتحریریهاند و روشِ فیلتر یا کیفیتِ داخلیِ محصولاتِ اپرا ازآنها نتیجه نمیشود.
فایل تمرین و منبع
کد مستقلِ تمرینِ محدود · تمام خروجیِ واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.