อะไรคือความแตกต่างระหว่าง 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

WNej2πN
คือหน่วยจินตภาพจากนั้น DFTX[k]ของx[n]มอบให้โดย X[k]= N - 1 n =j1X[k]x[n] หากยังไม่มี
X[k]=n=0N1x[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/21xe[n]WN/2kn+WNkn=0N/21xo[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(NlogN), 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.