อะไรคือความแตกต่างระหว่าง DFT และ FFT ที่ทำให้ FFT เร็วมาก?


16

ฉันพยายามเข้าใจ FFT นี่คือสิ่งที่ฉันมี:

เพื่อที่จะหาขนาดของความถี่ในรูปแบบของคลื่นเราจะต้องตรวจสอบพวกเขาโดยการคูณคลื่นด้วยความถี่ที่พวกเขากำลังค้นหาในสองขั้นตอนที่แตกต่างกัน (บาปและ cos) และเฉลี่ยแต่ละค่า เฟสถูกพบโดยความสัมพันธ์กับทั้งสองและโค้ดสำหรับสิ่งนั้นเป็นดังนี้:

//simple pseudocode
var wave = [...];                //an array of floats representing amplitude of wave
var numSamples = wave.length;
var spectrum = [1,2,3,4,5,6...]  //all frequencies being tested for.  

function getMagnitudesOfSpectrum() {
   var magnitudesOut = [];
   var phasesOut = [];

   for(freq in spectrum) {
       var magnitudeSin = 0;
       var magnitudeCos = 0;

       for(sample in numSamples) {
          magnitudeSin += amplitudeSinAt(sample, freq) * wave[sample];
          magnitudeCos += amplitudeCosAt(sample, freq) * wave[sample];
       }

       magnitudesOut[freq] = (magnitudeSin + magnitudeCos)/numSamples;
       phasesOut[freq] = //based off magnitudeSin and magnitudeCos
   }

   return magnitudesOut and phasesOut;
}

เพื่อที่จะทำเช่นนี้สำหรับความถี่จำนวนมากอย่างรวดเร็ว FFTs ใช้เทคนิคมากมาย

เทคนิคใดบ้างที่ใช้ในการทำให้ FFT เร็วกว่า DFT มาก

PS ฉันลองดูขั้นตอนวิธี FFT ที่เสร็จสมบูรณ์แล้วบนเว็บ แต่เทคนิคทั้งหมดมีแนวโน้มที่จะรวมตัวเป็นโค้ดที่สวยงามเพียงชิ้นเดียวโดยไม่มีคำอธิบายมากมาย สิ่งที่ฉันต้องการก่อนที่ฉันจะเข้าใจได้ทั้งหมดคือการแนะนำการเปลี่ยนแปลงที่มีประสิทธิภาพเหล่านี้เป็นแนวคิด

ขอขอบคุณ.


7
"DFT" ไม่ได้อ้างถึงอัลกอริทึม: มันหมายถึงการดำเนินการทางคณิตศาสตร์ "FFT" หมายถึงคลาสของวิธีการคำนวณการดำเนินการนั้น

1
เพียงแค่ต้องการชี้ให้เห็นว่าการใช้งานsudoในตัวอย่างโค้ดของคุณอาจสร้างความสับสนเนื่องจากเป็นคำสั่งที่รู้จักกันดีในโลกคอมพิวเตอร์ คุณอาจหมายถึง psuedocode
— rwfeather

1
@nwfeather เขาอาจหมายถึง 'pseudocode'
— user207421

คำตอบ:


20

การดำเนินงานที่ไร้เดียงสาของ -point DFT เป็นพื้นคูณโดยที่N × Nเมทริกซ์ ผลนี้ในความซับซ้อนของO ( N 2 )NN×NO(N2)

หนึ่งในอัลกอริทึมการแปลงฟูริเยร์ (FFT) ที่พบมากที่สุดคืออัลกอริทึมRadix-2 Cooley-Tukey Decimation-in-Time FFT นี่คือวิธีการแบ่งและพิชิตขั้นพื้นฐาน

อันดับแรกให้คำจำกัดความ"twiddle factor"เป็น: โดยที่j≜

WN≜e−j2πN
คือหน่วยจินตภาพจากนั้น DFTX[k]ของx[n]มอบให้โดย X[k]= N - 1 ∑ n =j≜−1X[k]x[n] หากยังไม่มี
X[k]=∑n=0N−1x[n]WNkn.
ยังไม่มีข้อความเป็นเลขคู่ (และคือจำนวนเต็ม) ผลรวมสามารถหารได้สองผลรวมดังนี้ X[k]= N / 2 - 1 ∑ n=0x[2n]W 2 k n N + N / 2 - 1 ∑ n=0x[2n+1]W k ( 2 n + 1 ) Nยังไม่มีข้อความ2
X[k]=Σn=0ยังไม่มีข้อความ/2-1x[2n]Wยังไม่มีข้อความ2kn+Σn=0ยังไม่มีข้อความ/2-1x[2n+1]Wยังไม่มีข้อความk(2n+1)
โดยที่ผลรวมแรกเกี่ยวข้องกับตัวอย่างคู่ของและวินาทีที่มีตัวอย่างแปลก ๆ ของ x [x[n] ] นิยาม x e [ n ]x[n]และ x o [ n ] ≜ x [ 2 n + 1 ]และใช้ความจริงที่xอี[n]≜x[2n]xโอ[n]≜x[2n+1]
  1. และWยังไม่มีข้อความk(2n+1)=Wยังไม่มีข้อความ2knWยังไม่มีข้อความk
  2. Wยังไม่มีข้อความ2kn=Wยังไม่มีข้อความ/2kn

สิ่งนี้สามารถเขียนใหม่เป็น

X[k]=∑n=0N/2−1xe[n]WN/2kn+WNk∑n=0N/2−1xo[n]WN/2kn=Xe[k]+WNkXo[k]
Xe[k]Xo[k]N2x[n]NN2-point DFTs. This reduces computational cost because
2(N2)2+N<N2
when N>2.

We can then re-iterate the same process on those two smaller DFTs. This divide-and-conquer approach allows to reach complexity of O(Nlog⁡N), which is way better than the O(N2) we had with the naive DFT implementation (as is greatly illustrated by leftaroundabout's answer).


คุณยินดีที่จะแสดงรายการสิ่งที่แต่ละตัวแปรหมายถึง? ฉันค่อนข้างใหม่ในการนี้เพื่อให้W, j, X(), Nและkยังไม่ได้มีความหมายสำหรับฉัน
— Seph Reed

Wมีการกำหนดไว้แล้วในคำตอบของฉัน ฉันพยายามกำหนดสัญลักษณ์อื่น ๆ ให้ดีขึ้นk หมายถึงดัชนีในโดเมนความถี่และ nดัชนีในโดเมนเวลา
— anpar

19

http://nbviewer.jupyter.org/gist/leftaroundabout/83df89a7d3bdc24373ea470fb50be629

DFT ขนาด 16

ไดอะแกรมของการดำเนินการในขนาด 16 naïve DFT

FFT ขนาด 16

แผนภาพแสดงการดำเนินงานในขนาด -16 radix-2 FFT

ความแตกต่างในความซับซ้อนนั้นค่อนข้างชัดเจนจากนั้นใช่ไหม


นี่คือวิธีที่ฉันเข้าใจ FFT

ก่อนอื่นฉันจะคิดเกี่ยวกับฟูริเยร์ก่อนเสมอเมื่อแปลงฟังก์ชั่นต่อเนื่องเช่นการทำแผนที่ bijectiveFT:L2(R)→L2(R). ในแสงนั้นเห็นได้ชัดว่ามันไม่จำเป็นจริงๆที่จะต้องไปที่“ ระดับที่ลึกที่สุด” และวนรอบองค์ประกอบแต่ละส่วนเพราะ“ องค์ประกอบแต่ละส่วน” เป็นจุดเดียวบนเส้นจริงซึ่งมีจำนวนอนันต์นับไม่ถ้วน .

แล้วการเปลี่ยนรูปแบบนี้ยังมีความชัดเจนเป็นอย่างไร มันสำคัญมากที่ไม่ได้ทำงานในพื้นที่ฟังก์ชั่นทั่วไปR→คแต่เฉพาะในพื้นที่ของ (Lebesgue-, Square-) integrableฟังก์ชั่น ตอนนี้การบูรณาการนี้ไม่ได้เป็นคุณสมบัติที่แข็งแกร่งมาก (อ่อนแอกว่าความแตกต่าง ฯลฯ ) แต่ก็ต้องการให้ฟังก์ชั่นกลายเป็น เช่น Discription จะได้รับจากค่าสัมประสิทธิ์ของการเป็นเวลาสั้นแปลงฟูริเยร์†กรณีที่ง่ายที่สุดคือฟังก์ชั่นของคุณนั้นต่อเนื่องและคุณแบ่งมันในพื้นที่เล็ก ๆ ที่มันคงที่ในแต่ละอัน จากนั้นแต่ละ STFTs มีระยะเวลาที่แข็งแกร่งที่สุด หากคุณเพิกเฉยต่อค่าสัมประสิทธิ์อื่น ๆ (ต่อไป) แต่ละโดเมนเป็นเพียงจุดข้อมูลเดียว จากค่าสัมประสิทธิ์ระยะเวลาอันสั้น - เหล่านี้ของ LF คุณสามารถทำการแปลงฟูริเยร์แบบแยก ในความเป็นจริงนั่นคือสิ่งที่คุณทำเมื่อทำการ FT ใด ๆ บนข้อมูลจริงที่วัดได้!

ข้อมูลที่วัดได้นั้นไม่จำเป็นต้องสอดคล้องกับปริมาณทางกายภาพพื้นฐาน ตัวอย่างเช่นเมื่อคุณวัดความเข้มของแสงคุณแค่วัดความกว้างของคลื่นแม่เหล็กไฟฟ้าที่มีความถี่สูงเกินไปที่จะสุ่มตัวอย่างด้วย ADC แต่เห็นได้ชัดว่าคุณสามารถคำนวณ DFT ของสัญญาณความเข้มแสงตัวอย่างและราคาถูกดังนั้นแม้จะมีความถี่บ้าของคลื่นแสง

สิ่งนี้สามารถเข้าใจได้เนื่องจากเหตุผลที่สำคัญที่สุดของ FFT คือราคาถูก:

อย่ากังวลกับการพยายามดูรอบการสั่นของแต่ละบุคคลจากระดับสูงสุด ให้เปลี่ยนข้อมูลที่ค่อนข้างสูงซึ่งได้รับการประมวลผลล่วงหน้าแล้วในเครื่องแทน

แต่นั่นไม่ใช่ทั้งหมดที่มีให้ สิ่งที่ดีเกี่ยว FFT คือว่าจะยังคงให้ข้อมูลทั้งหมดที่สมบูรณ์ DFT จะให้ คือข้อมูลทั้งหมดที่คุณจะได้รับเมื่อสุ่มตัวอย่างคลื่นแม่เหล็กไฟฟ้าที่แน่นอนของลำแสง สามารถทำได้โดยการแปลงสัญญาณโฟโตไดโอดหรือไม่? - คุณสามารถวัดความถี่แสงที่แน่นอนได้หรือไม่?

ดีคำตอบคือไม่มีคุณจะไม่สามารถ นั่นคือถ้าคุณใช้เทคนิคพิเศษ
ครั้งแรกของทั้งหมดที่คุณจำเป็นต้องมีอย่างน้อยประมาณวัดความถี่ในบล็อกระยะเวลาอันสั้น นั่นเป็นไปได้ด้วยสเปกโตรกราฟ แต่มันเป็นไปได้ด้วยความแม่นยำเท่านั้นΔν=1/Δเสื้อ, ความสัมพันธ์ที่ไม่แน่นอนโดยทั่วไป‡

การมีช่วงเวลาที่ยาวขึ้นโดยรวมทำให้เราสามารถลดความไม่แน่นอนของความถี่ได้ด้วย และนี่เป็นไปได้จริง ๆ ถ้าคุณวัดเฉพาะที่ไม่ใช่แค่ความถี่คร่าวๆ แต่ยังรวมถึงระยะของคลื่นด้วย คุณรู้ว่าสัญญาณ 1,000 Hz จะมีเฟสเหมือนกันทุกประการถ้าคุณดูในอีกหนึ่งวินาทีในภายหลัง ในขณะที่สัญญาณ 1,000.5 Hz ในขณะที่ไม่สามารถแยกแยะได้ในช่วงสั้น ๆ จะกลับด้านในหนึ่งวินาทีในภายหลัง

โชคดีที่ข้อมูลเฟสนั้นสามารถถูกเก็บไว้เป็นจำนวนเชิงซ้อนได้เป็นอย่างดี และนั่นคือวิธีที่ FFT ทำงาน! มันเริ่มต้นจากการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ในท้องถิ่น สิ่งเหล่านี้มีราคาถูก - สำหรับสิ่งหนึ่งที่เห็นได้ชัดเพราะพวกเขาใช้ข้อมูลเพียงเล็กน้อยเท่านั้น แต่อย่างที่สองเพราะพวกเขารู้ว่าเนื่องจากช่วงเวลาสั้น ๆ พวกเขาไม่สามารถแก้ไขความถี่ได้อย่างแม่นยำอยู่แล้ว - ดังนั้นจึงยังไม่แพง ทำสิ่งที่เปลี่ยนแปลงมากมายเช่นนี้

อย่างไรก็ตามสิ่งเหล่านี้ทำบันทึกช่วงและจากนั้นคุณสามารถทำให้ความละเอียดความถี่ที่แน่นอนมากขึ้นในระดับบนสุด การแปลงที่ต้องการนั้นมีราคาถูกอีกครั้งเพราะมันไม่ได้รบกวนการทำงานของความถี่สูง แต่มีเฉพาะข้อมูลความถี่ต่ำที่ผ่านการประมวลผลล่วงหน้า


†เอาล่ะการถกเถียงของฉันเป็นแบบวงกลม ณ จุดนี้ ลองเรียกมันว่าเกิดซ้ำและเราก็โอเค ...

‡ ความสัมพันธ์นี้เป็นไม่ได้ควอนตัมกล แต่ความไม่แน่นอนของไฮเซนเบิร์กมีจริงเหตุผลพื้นฐานเดียวกัน


2
การบรรยายภาพที่ดีของปัญหา :-)
— robert bristow-johnson

2
คุณไม่ชอบไดอะแกรมที่ทำซ้ำทุกที่และไม่เคยอธิบายได้จริงทุกที่ :)
— user541686

1
ฉันเข้าใจภาพหลังจากเพิ่งอ่านคำตอบของ anpar
— JDługosz

15

นี่คือรูปภาพที่จะเพิ่มไปยังคำตอบที่ดีของ Robert ที่แสดงให้เห็นถึง "การใช้ซ้ำ" ของการดำเนินการในกรณีนี้สำหรับ DFT 8 จุด "ปัจจัย Twiddle" จะแสดงในแผนภาพโดยใช้สัญกรณ์Wยังไม่มีข้อความnk ซึ่งเท่ากับ อีJ2πnkยังไม่มีข้อความ

สังเกตเส้นทางที่แสดงและสมการใต้แสดงผลลัพธ์สำหรับความถี่ช่อง X (1) ตามที่กำหนดโดยสมการของ Robert

เส้นประไม่แตกต่างจากเส้นทึบเพียงเพื่อให้ชัดเจนเมื่อรวมเข้าด้วยกัน

การใช้งาน FFT


8

เป็นหลักในการคำนวณความไร้เดียงสาของ DFT โดยตรงจากการรวม:

X[k]=Σn=0ยังไม่มีข้อความ-1x[n]อีJ2πnkยังไม่มีข้อความ

มี ยังไม่มีข้อความ การค้นหาตารางสำหรับปัจจัย twiddle อีJ2πnkยังไม่มีข้อความ, ยังไม่มีข้อความ การคูณที่ซับซ้อนและ ยังไม่มีข้อความ-1เพิ่มเติม และนั่นเป็นเพียงหนึ่งค่าX[k] และอีกหนึ่งตัวอย่างของ k. จากนั้น DFT ที่ไร้เดียงสาจะละทิ้งข้อมูลกลางทั้งหมดนั้นออกไปและผ่านทั้งหมดอีกครั้งเพื่อX[k+1].

  1. ดังนั้น FFT จึงเก็บข้อมูลขั้นกลางไว้บางส่วน
  2. FFT จะใช้แฟคตอริ่งแฟคตอริ่งเพียงเล็กน้อยเพื่อให้สามารถใช้ปัจจัยเดียวกันสำหรับการรวมกันของข้อมูล

4

ฉันเป็นคนที่มองเห็น ฉันชอบที่จะจินตนาการว่า FFT เป็นกลอุบายแบบเมทริกซ์แทนที่จะเป็นแบบการรวมกัน

หากต้องการอธิบายในระดับสูง:

naive DFT คำนวณแต่ละตัวอย่างเอาต์พุตอย่างอิสระและใช้ทุกตัวอย่างอินพุตในแต่ละการคำนวณ (อัลกอริทึมN²แบบดั้งเดิม)

FFT ทั่วไปใช้ symmetries และรูปแบบในการกำหนด DFT เพื่อทำการคำนวณใน "เลเยอร์" (เลเยอร์ N บันทึก) แต่ละเลเยอร์ที่มีความต้องการเวลาคงที่ต่อตัวอย่างสร้างอัลกอริทึม N log N

เฉพาะเจาะจงมากขึ้น:

วิธีหนึ่งในการมองเห็นสมมาตรเหล่านี้คือการดู DFT เป็นอินพุตเมทริกซ์ 1 × N คูณด้วยเมทริกซ์ NxNของเลขชี้กำลังเชิงซ้อนทั้งหมดของคุณ เริ่มจากกรณี "radix 2" เราจะแยกแถวคู่และคี่ของเมทริกซ์ (ตรงกับตัวอย่างอินพุตคู่และคี่) และพิจารณาพวกมันเป็นการคูณเมทริกซ์สองตัวแยกกันซึ่งรวมเข้าด้วยกันเพื่อให้ได้ผลลัพธ์สุดท้ายเดียวกัน

ทีนี้ลองดูเมทริกซ์เหล่านี้: ในครึ่งแรกครึ่งซ้ายจะเหมือนกับครึ่งขวา ในอีกครึ่งทางขวาคือครึ่งซ้าย x −1 นี่หมายความว่าเราต้องใช้ครึ่งทางซ้ายของเมทริกซ์เหล่านี้เพื่อการคูณและสร้างครึ่งทางขวาอย่างถูกด้วยการคูณด้วย 1 หรือ −1 ถัดไปสังเกตว่าเมทริกซ์ที่สองนั้นแตกต่างจากเมทริกซ์แรกโดยปัจจัยที่เหมือนกันในแต่ละคอลัมน์ดังนั้นเราจึงสามารถแยกตัวประกอบนั้นออกมาและนำไปคูณกับอินพุทดังนั้นตอนนี้ทั้งคู่และคี่ใช้ตัวอย่างเมทริกซ์เดียวกัน เป็นครั้งแรก และขั้นตอนสุดท้ายคือการสังเกตว่าเมทริกซ์ N / 2 × N / 2 ที่ได้นี้นั้นเหมือนกับเมทริกซ์ N / 2 DFT และเราสามารถทำสิ่งนี้ซ้ำแล้วซ้ำอีกจนกระทั่งเราได้เมทริกซ์ 1 × 1 ที่ DFT เป็นฟังก์ชันเอกลักษณ์

หากต้องการพูดเกินขอบเขต Radix 2 คุณสามารถดูการแยกทุกแถวที่สามและดูคอลัมน์สามคอลัมน์หรือคอลัมน์ที่ 4 เป็นต้น

ในกรณีที่มีการป้อนข้อมูลขนาดใหญ่มีวิธีการอย่างถูกต้องเป็นศูนย์แผ่น, FFT และตัดทอน แต่นั่นอยู่นอกเหนือขอบเขตของคำตอบนี้

ดู: http://whoiskylefinn.com/MatrixFFT.html


นายก FFT , FFT ต่างๆ การใช้ zero-pad ไม่ใช่ตัวเลือกเดียว ขออภัยฉันเพิ่งพบการใช้ศูนย์เกินจำนวนมากเกินไป หนึ่งคำถามเล็ก ๆ ฉันไม่เข้าใจว่าคุณหมายถึง "แต่ละเลเยอร์ที่มีความต้องการเวลาคงที่ต่อตัวอย่าง" ถ้าคุณสามารถอธิบายได้มันจะยอดเยี่ยม
— Evil

1
ขออภัยฉันไม่ได้ตั้งใจจะบอกว่าการเติมเต็มศูนย์เป็นวิธีที่ต้องการเพียงแค่ชี้ไปที่การอ่านเพิ่มเติม และ "เลเยอร์" หมายถึงการเรียกซ้ำหรือการแปลจาก N DFT เป็น 2 N / 2 DFT โดยมีเวลาคงที่ต่อตัวอย่างหมายความว่าขั้นตอนนี้คือ O (N)
— kylefinn

จนถึงตอนนี้ของคำอธิบายทั้งหมดอันนี้ดูเหมือนจะใกล้เคียงที่สุดที่จะทำให้ปัญหาซับซ้อนง่ายขึ้น สิ่งใหญ่ที่ขาดหายไปคือตัวอย่างของเมทริกซ์เหล่านี้ คุณจะมีไหม
— Seph Reed

อัปโหลดสิ่งนี้ควรช่วย: whoiskylefinn.com/MatrixFFT.html
— kylefinn

1

DFT จะทำการเดรัจฉานแบบแรง N ^ 2 คูณ

FFTs ใช้เทคนิคที่ฉลาดใช้ประโยชน์จากคุณสมบัติของเมทริกซ์ (ลดจำนวนเมทริกซ์ที่ลดลง) เพื่อลดต้นทุนการคำนวณ

ให้เราดูที่ DFT ขนาดเล็กก่อน:

W = FFT (ตา (4));

x = rand (4,1) + 1j * rand (4,1);

X_ref = fft (x);

X = W * x;

ยืนยัน (สูงสุด (abs (X-X_ref)) <1e-7)

ยอดเยี่ยมดังนั้นเราจึงสามารถทดแทนการเรียก MATLAB ไปยังห้องสมุด FFTW ด้วยการคูณเมทริกซ์ 4x4 (ซับซ้อน) ขนาดเล็กโดยการกรอกเมทริกซ์จากฟังก์ชั่น FFT เมทริกซ์นี้มีลักษณะเป็นอย่างไร

N = 4,

Wn = exp (-1j * 2 * ปี่ / N)

f = ((0: N-1) * (0: N-1))

f =

 0     0     0     0
 0     1     2     3
 0     2     4     6
 0     3     6     9

W = Wn. ^ ฉ

W =

1 1 1 1

1 -i -1 i

1 -1 1 -1

1 i -1 -i

แต่ละองค์ประกอบมีค่า +1, -1, + 1j หรือ -1j เห็นได้ชัดว่านี่หมายความว่าเราสามารถหลีกเลี่ยงการคูณที่ซับซ้อนได้ นอกจากนี้คอลัมน์แรกยังเหมือนกันซึ่งหมายความว่าเราคูณองค์ประกอบแรกของ x ซ้ำไปซ้ำมาด้วยปัจจัยเดียวกัน

ปรากฎว่าผลิตภัณฑ์ Kronecker tensor, "twiddle factor" และเมทริกซ์การเปลี่ยนแปลงซึ่งดัชนีจะเปลี่ยนไปตามการตอบกลับแบบไบนารีที่พลิกกลับเป็นทั้งขนาดกะทัดรัดและให้มุมมองทางเลือกเกี่ยวกับวิธีการคำนวณ FFTs เป็นชุดของการดำเนินการเมทริกซ์

บรรทัดด้านล่างนี้เป็น Decimation อย่างง่าย ๆ ในความถี่ (DIF) radix 2 ไปข้างหน้า FFT แม้ว่าขั้นตอนอาจดูยุ่งยาก แต่ก็สะดวกที่จะนำกลับมาใช้ใหม่สำหรับการส่งต่อ / ผกผัน FFT, radix4 / split-radix หรือการทำลายล้างในเวลาในขณะที่เป็นตัวแทนที่ยุติธรรมของวิธีการ FFT ในสถานที่มีแนวโน้มที่จะดำเนินการ ฉันเชื่อ.

N = 4;

x = randn (N, 1) + 1j * randn (N, 1);

T1 = exp (-1j * 2 * pi * ([ศูนย์ (1, N / 2), 0: (N / 2-1)]). '/ N),

M0 = kron (ตา (2), fft (ตา (2))),

M1 = kron (fft (ตา (2)), ตา (2)),

X = bitrevorder (x. * * * * * * * * M1 diag (T1) * M0)

X_ref = FFT (x)

ยืนยัน (สูงสุด (เอบีเอส (X () - X_ref (:))) <1e-6)

CF Van Loan มีหนังสือยอดเยี่ยมเกี่ยวกับเรื่องนี้


1

หากคุณต้องการดื่มจาก Firehose of Wisdom ฉันแนะนำ:

"การแปลงอย่างรวดเร็ว - อัลกอริธึมการวิเคราะห์การใช้งาน" โดย Douglas F. Elliott, K. Ramamohan Rao

ครอบคลุม FFT, Hartley, Winograd และแอปพลิเคชัน

จุดแข็งอย่างหนึ่งคือแสดงให้เห็นว่า FFT เป็นชุดของการกระจายแบบเมทริกซ์แบบเบาบางด้วยการเรียงลำดับการสลับบิต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.