คำถามติดแท็ก fft

การแปลงฟูริเยร์ที่รวดเร็วเป็นอัลกอริธึมที่มีประสิทธิภาพในการคำนวณการแปลงฟูริเยร์แบบแยก (DFT) และอินเวอร์ส

2
เหตุใดการรั่วไหลของสเปกตรัมจึงเกิดขึ้นใน FFT
ฉันลอง googling และ wikipedia แล้ว แต่ฉันยังไม่ได้รับคำตอบนอกเหนือจาก 'เพราะความถี่ของสัญญาณอินพุตอยู่ระหว่างสองถังขยะ' ฉันเข้าใจว่านี่คือเหตุผล แต่สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่การรั่วไหลดูเหมือนว่าจะขยายไปยังถังขยะติดกันหลายแห่งแทนที่จะเป็นถังขยะที่อยู่ติดกันเพียงถังเดียว เพื่อแสดงสิ่งที่ฉันกำลังพูดถึงนี่คือข้อมูลจำลอง (รหัสที่ท้ายโพสต์): ด้านบนคือสเปกตรัม FFT (พล็อตในระดับบันทึก) ของคลื่นไซน์ของความถี่ 10 อัตราการสุ่มตัวอย่างคือหนึ่งและจำนวนตัวอย่างคือ 100 กราฟได้รับการเลื่อน FFT เห็นได้ชัดว่ามีเพียงจุดสูงสุดที่ bin 10 และส่วนที่เหลืออยู่ในลำดับของข้อผิดพลาดเชิงตัวเลขหรือที่นั่น นี่คือสเปกตรัมความถี่ที่ความถี่ที่สร้างขึ้นที่ 10.1 เห็นได้ชัดว่ามี 'การรั่วไหล' ในถังขยะมากกว่าถังขยะที่อยู่ติดกันทันที นี่คือโครงเรื่องสำหรับความถี่ 10.5 คำถาม:ทำไมมีการรั่วไหลนี้และทำไมมันถึงขยายไปยังถังขยะอื่นทั้งหมดแทนที่จะเป็นถังขยะที่อยู่ติดกัน? รหัสสำหรับทุกคนที่สนใจ (รหัสหลาม) import numpy as np import matplotlib.pyplot as plt xFreq = 10.5 xSize = 100.0 xPeriod = …

3
ทำไมขนาดปกติในระหว่างการสังเคราะห์ (IDFT) ไม่ใช่การวิเคราะห์ (DFT)
ในตัวอย่างส่วนใหญ่และรหัส FFT ที่ฉันได้เห็นเอาท์พุท (ขนาดคลื่นความถี่) ของการดำเนินการ DFT ไปข้างหน้าจะถูกปรับขนาดโดย N - นั่นคือแทนที่จะให้ขนาดของถังขยะแต่ละอันทำให้คุณมีขนาดเป็น N การดำเนินการนี่เป็นเพียงเพราะ DFT คำนวณโดยการใช้ผลิตภัณฑ์ด้านในของสัญญาณที่มีพื้นฐานแต่ละไซน์ (เช่นความสัมพันธ์ที่ไม่เป็นมาตรฐาน อย่างไรก็ตามนั่นไม่ได้ตอบคำถามเชิงปรัชญาว่าทำไมเราไม่หารหารด้วย N ก่อนส่งคืนผลลัพธ์ อัลกอริธึมส่วนใหญ่หารด้วย N เมื่อทำการสังเคราะห์ใหม่ นี่ดูเหมือนจะขัดกับฉันและ (เว้นแต่ฉันจะทำบางสิ่ง) มันทำให้คำอธิบายทั้งหมดของ DFT สับสนมาก ในทุกสถานการณ์ที่ฉันสามารถฝันได้ขนาดที่แท้จริง (ไม่ใช่ขนาด * N) คือค่าที่ฉันต้องการจากการดำเนินการ DFT และขนาดปกติคือค่าที่ฉันต้องการป้อนลงในการดำเนินการ IDFT เหตุใด DFT จึงไม่ถูกกำหนดเป็น DFT / N และ IDFT ถูกกำหนดให้เป็นผลรวมของไซนัสอยด์ขนาดปกติ

4
คุณคำนวณความเรียบของสเปกตรัมจาก FFT อย่างไร
ตกลงความเรียบของสเปกตรัม (หรือเรียกอีกอย่างว่า Wiener เอนโทรปี) ถูกกำหนดเป็นอัตราส่วนของค่าเฉลี่ยเรขาคณิตของสเปกตรัมต่อค่าเฉลี่ยเลขคณิต วิกิพีเดียและการอ้างอิงอื่น ๆ บอกว่าสเปกตรัมกำลัง นั่นคือจตุรัสของฟูริเยร์ใช่ไหม FFT สร้าง "สเปกตรัมแอมพลิจูด" แล้วคุณยกกำลังสองนั้นเพื่อให้ได้ "สเปกตรัมพลังงาน"? โดยพื้นฐานแล้วสิ่งที่ฉันอยากรู้คือถ้าspectrum = abs(fft(signal))สิ่งใดที่ถูกต้อง? spectral_flatness = gmean(spectrum)/mean(spectrum) spectral_flatness = gmean(spectrum^2)/mean(spectrum^2) คำนิยามของ Wikipedia ดูเหมือนว่าจะใช้ขนาดโดยตรง: F l a t n e s s = ∏ยังไม่มีข้อความ- 1n = 0x ( n )---------√ยังไม่มีข้อความΣยังไม่มีข้อความ- 1n = 0x ( n )ยังไม่มีข้อความ= ประสบการณ์( 1)ยังไม่มีข้อความΣยังไม่มีข้อความ- …

3
FFT ที่มีหน้าต่างแบบอสมมาตรหรือไม่?
ฟังก์ชั่นหน้าต่างที่ไม่ใช่สี่เหลี่ยมทั่วไปดูเหมือนว่าจะสมมาตร เคยมีกรณีบ้างไหมที่จะต้องการใช้ฟังก์ชั่นหน้าต่างที่ไม่สมมาตรต่อหน้า FFT? (พูดว่าข้อมูลที่อยู่ด้านหนึ่งของรูรับแสง FFT นั้นถือว่าสำคัญกว่าข้อมูลอื่น ๆ หรือมีเสียงรบกวนน้อยกว่า ฯลฯ ) ถ้าเป็นเช่นนั้นฟังก์ชั่นหน้าต่างแบบอสมมาตรชนิดใดที่ได้รับการศึกษาและจะมีผลต่อการตอบสนองความถี่อย่างไรเมื่อเทียบกับหน้าต่างออฟเซ็ตแบบสมมาตร

8
มีอัลกอริทึมในการคำนวณเฟสสำหรับความถี่เดี่ยวหรือไม่?
หากคุณมีฟังก์ชั่นและการอ้างอิงคลื่นของคลื่นอะไรจะเป็นวิธีที่รวดเร็วในการคำนวณ ?f(t)=A⋅sin(ωt+ϕ)f(t)=A⋅sin⁡(ωt+ϕ)f(t)=A \cdot \sin(\omega t+\phi)sin(ωx)sin⁡(ωx)\sin(\omega x)ϕϕ\phi ฉันดูอัลกอริธึมของGoertzelแต่ดูเหมือนจะไม่เกี่ยวข้องกับเฟสเลยใช่ไหม

7
อะไรคือความแตกต่างระหว่าง DFT และ FFT ที่ทำให้ FFT เร็วมาก?
ฉันพยายามเข้าใจ 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) { …
16 fft  dft  algorithms 

1
การตอบสนองของเฟสและขนาดของสัญญาณรบกวนสีขาวคืออะไร?
ฉันต้องการสร้างเสียงรบกวนสีขาวในโดเมนความถี่แล้วแปลงเป็นโดเมนเวลาโดยใช้ python เพื่อทำความเข้าใจกับปัญหาฉันเพียงแค่สร้างเสียงรบกวนสีขาวในโดเมนเวลาและเปลี่ยนเป็นโดเมนความถี่: import scipy.signal as sg import numpy as np import matplotlib.pyplot as plt e = np.random.normal(0,1,1e3) E = sg.fft(e) plt.figure("Bode plot") plt.subplot(211) plt.title("Magitude") plt.plot(abs(E)) plt.subplot(212) plt.title("Phase") plt.plot(np.angle(E)) plt.show() ฉันไม่ได้ดูอย่างที่คาด: คำถาม: เสียงสีขาวไม่ควรที่จะตอบสนองขนาดแบนหรือไม่? (จำนวนเท่ากันสำหรับทุกความถี่) อะไรคือความสัมพันธ์ระหว่างค่าเบี่ยงเบนมาตรฐาน (1 ในตัวอย่างของฉัน) และขนาดและเฟส ขอบคุณล่วงหน้า!
16 fft  noise  python 

2
DFT พร้อมช่องว่างแบบเรขาคณิต?
การแปลงฟูริเยร์แบบไม่ต่อเนื่องแบบดั้งเดิม (DFT) และลูกพี่ลูกน้องของมันคือ FFT ผลิตถังขยะที่เว้นระยะเท่ากัน พูดอีกอย่างก็คือคุณได้รับ 10 เฮิร์ตซ์แรกในถังขยะแรก 10.1 ถึง 20 ในวินาที ฯลฯ อย่างไรก็ตามฉันต้องการบางสิ่งที่แตกต่างออกไปเล็กน้อย ฉันต้องการช่วงความถี่ที่ครอบคลุมโดยแต่ละถังเพื่อเพิ่มแบบเรขาคณิต สมมติว่าฉันเลือกตัวคูณ 1.5 จากนั้นเรามี 0 ถึง 10 ในถังขยะแรกฉันต้องการ 11 ถึง 25 ในถังขยะที่สอง, 26 ถึง 48 ในถังขยะที่สาม ฯลฯ เป็นไปได้หรือไม่ที่จะปรับเปลี่ยนอัลกอริทึม DFT ให้ทำงานในลักษณะนี้
16 fft  dft 

1
ค้นหาเพลงที่คล้ายกันโดยใช้ FFT Spectrums
ฉันได้ทดลองหลายสัปดาห์เพื่อหาวิธีจับคู่ / ค้นหาเพลงที่คล้ายกันในห้องสมุดที่มีแนวดนตรีที่แตกต่างกัน ความพยายามครั้งแรกของฉันคือการตรวจสอบคุณสมบัติเช่น Tempo หรือเสียงเบสที่มีในเพลงที่รวมตัวกันเป็นกลุ่ม แต่ฉันไม่ได้ไปไกลกับวิธีนี้ (การตรวจจับจังหวะการเปลี่ยนแปลงตามปริมาณ) ตั้งแต่ประมาณ 20% ของเพลง Beat เสมอบางครั้ง 1/2 หรือ 1/3 ของพวกเขาและฉันไม่สามารถใช้มันได้ หลังจากพยายามล้มเหลวหลายสัปดาห์ฉันก็มีความคิดใหม่ซึ่งจะอธิบายต่อไปในโพสต์นี้ เพียงแค่ทำให้มันใช้งานได้โดยใช้ Spectrum Samples of Files ทำให้เป็นเหมือน "Average Spectrum" ของไฟล์เพื่อเปรียบเทียบ แนวคิดที่อยู่เบื้องหลังคือตัวอย่างเช่น Hardstyle มีเบสมากกว่าเพลงร็อคโดยเฉลี่ยฉันยังตรวจสอบเรื่องนี้ด้วยการดู Spectrums ใน Audacity ไฟล์ 1: นำไฟล์เต็ม FFT Spectrums (2048 ตัวอย่างขนาด ATM, สัดส่วนการบันทึก Amplitudes) รวมอาร์เรย์สเปกตรัมทั้งหมดใช้ค่าเฉลี่ยของแต่ละ Bin ทำเช่นเดียวกันกับไฟล์อื่นบางไฟล์จัดเก็บผลลัพธ์ทั้งหมด ทำรายการค่า FFT ความแตกต่างระหว่างไฟล์ 1 …
16 audio  fft  music 

2
ทำไมส่วนที่แท้จริงของ FFT จึงแปลงภาพเป็นการหมุน + ดั้งเดิม
ฉันได้อ่านภาพนี้: นำ FFT ของมัน (2D) แล้ว Inverse FFT เพื่อให้ได้ภาพกลับมาอย่างแน่นอน รหัสที่ให้ไว้สำหรับการอ้างอิง: imfft = fft2(photographer); im = uint8(ifft2(imfft)); imshow(im); %Output is same image แต่เมื่อฉันเปลี่ยนฟูเรียร์และมีส่วนที่แท้จริงเท่านั้น imfft = real(fft2(photographer)); im = uint8(ifft2(imfft)); imshow(im); ฉันได้รับภาพเช่นนี้ ( โปรดทราบว่าการเปลี่ยนแปลงขนาดไม่เกี่ยวข้องและเนื่องจากการบันทึกจากตัวจัดการรูป Matlab ): ใครสามารถอธิบายทฤษฎี (คณิตศาสตร์) ที่อยู่เบื้องหลังฉันได้ไหม ขอบคุณ

4
bin ความถี่คืออะไร
ฉันกำลังทำการวิจัยเกี่ยวกับวิธี FFT และคำที่มักจะเกิดขึ้นคือ "ถังขยะความถี่" จากสิ่งที่ฉันเข้าใจนี่มีบางอย่างเกี่ยวข้องกับวงดนตรีที่สร้างขึ้นรอบความถี่ของไซน์อยด์ที่ให้มา แต่ฉันก็ไม่สามารถหาวิธีได้ ฉันยังหาวิธีที่จะไปจากถังขยะที่กำหนดไปยังความถี่ที่เกี่ยวข้อง แต่ก็ยังไม่มีสัญชาตญาณว่าถังขยะความถี่คืออะไร
16 fft 

5
ปัญหาในการออกแบบตัวกรอง FIR โดยใช้ FFT คืออะไร
ฉันพยายามทำความเข้าใจเกี่ยวกับความสัมพันธ์ระหว่างตัวกรอง FIR ที่ออกแบบมาจาก "หลักการแรก" โดยใช้เคอร์เนลตัวกรองที่มีการโน้มน้าวและตัวกรองที่ออกแบบในหนึ่งในสองวิธีที่ใช้ FFT (ดูด้านล่าง) เท่าที่ฉันเข้าใจการตอบสนองแรงกระตุ้นของตัวกรอง FIR เป็นสิ่งเดียวกับเคอร์เนล convolution ของตัวกรอง (ช่วยแก้ให้ด้วยนะถ้าฉันผิด.) นอกจากนี้ในความเข้าใจของฉันความถี่องค์ประกอบ (เช่นการแปลงฟูริเยร์) ของการตอบสนองแรงกระตุ้นของตัวกรอง FIR นั้นเป็นสิ่งเดียวกับการตอบสนองความถี่ของตัวกรอง และดังนั้นการแปลงฟูริเยร์แบบผกผันจะให้การตอบสนองแบบอิมพัลส์แก่ฉันอีกครั้ง (แก้ไขอีกครั้งถ้าฉันผิด) สิ่งนี้ทำให้ฉันได้ข้อสรุปสองข้อ (ไม่สนใจการตอบสนองของเฟสหรือสมมติว่าตอบสนองเฟสเชิงเส้น): ฉันควรจะสามารถออกแบบตัวกรอง FIR ของการตอบสนองความถี่ตามอำเภอใจโดย "วาด" การตอบสนองความถี่ที่ฉันต้องการใช้ IFFT เพื่อรับการตอบสนองต่อแรงกระตุ้นและใช้สิ่งนั้นเป็นเคอร์เนล convolution ของฉัน อีกทางหนึ่งฉันควรจะสามารถสร้างตัวกรองโดยการใช้ FFT ของสัญญาณอินพุทคูณด้วยการตอบสนองความถี่โดยพลการที่ฉันต้องการในโดเมนความถี่และรับ IFFT ของผลลัพธ์เพื่อสร้างสัญญาณเอาต์พุต โดยสังหรณ์ใจมันให้ความรู้สึกเหมือน 1 & 2 เทียบเท่า แต่ฉันไม่แน่ใจว่าฉันจะพิสูจน์ได้ไหม ดูเหมือนว่าผู้คน (และวรรณกรรม DSP) มีความยาวมากในการออกแบบเมล็ด FIR พร้อมคำตอบที่กำหนดไว้ล่วงหน้าโดยใช้อัลกอริทึม (สำหรับฉัน) ที่ซับซ้อนเช่น …

3
การแปลงฟูริเยร์อย่างรวดเร็ว - จำนวนรอบที่ไม่ใช่จำนวนเต็มในรูรับแสง FFT
มีหัวข้อสนทนาและคำตอบที่ยอดเยี่ยมอยู่สองสามข้อในเว็บไซต์นี้ (eletronics.se) เกี่ยวกับทฤษฎีการแปลงฟูริเยร์ ฉันพยายามใช้เครื่องมือการจำลอง (MS Excel :) เดียวกัน ฉันมีปัญหาการตีความและการใช้งานบางอย่างเกี่ยวกับเรื่องเดียวกัน ฉันพยายามวิเคราะห์รูปคลื่นแรงดันไฟฟ้าที่ 50 เฮิร์ตซ์ อย่างไรก็ตามข้อมูลด้านล่างนี้สร้างเพียงข้อมูลจำลองที่พยายามสร้างกรอบแนวคิดสำหรับการนำไปใช้กับหน่วยความจำและกำลังการประมวลผลที่ จำกัด ตัวประมวลผลต้นทุนต่ำแบบฝังตัว 16 บิต ETA (30 พฤษภาคม 2555) TL; DR เวอร์ชัน: มันไปได้โดยไม่ต้องพูดถึง electronics.se แต่ฉันใช้หน่วยความจำและกำลังประมวลผลฝังตัวโปรเซสเซอร์ จำกัด มีคำถามสองสามข้อที่ยังไม่ได้ตอบ: การเรียงหน้าต่างเป็นอย่างไรบนตัวอย่างที่ฉันมีโดยไม่มีการเพิ่ม footprint หน่วยความจำของอัลกอริทึมอย่างมีนัยสำคัญ? ฉันอยากให้สิ่งเหล่านี้เป็นคำอธิบายทีละขั้นตอนเนื่องจากฉันค่อนข้างใหม่กับ DSP ทำไมขนาดลดลงครึ่งหนึ่งเมื่อฉันสอดแทรก 41 ตัวอย่างเพื่อให้ได้ 32 แต่ยังคงเหมือนเดิม (ยกเว้นเสียงรบกวน) เมื่อฉันสอดแทรกพวกเขาให้ได้ 64 ฉันประกาศความโปรดปรานกับคำถามด้วยความหวังว่าฉันจะได้รับคำตอบที่ยอดเยี่ยมซึ่งสามารถนำไปใช้กับสามเณรใน DSP ได้ การทดลองที่ 1: อินพุตโดเมนเวลา ฉันสร้างคลื่นไซน์โดยใช้เพื่อสร้าง 64 …
15 fourier  fft 

4
ความถี่ที่ต่ำกว่าแข็งแกร่งใน FFT หรือไม่
ฉันกำลังคำนวณ FFT จากอินพุตไมโครโฟน ฉันสังเกตเห็นว่าความถี่ที่ต่ำกว่ามักจะมีพลังมากขึ้น (เดซิเบลที่สูงขึ้น) มากกว่าความถี่ที่สูงกว่า ฉันตัดข้อมูลออกเป็นเฟรมของ 24576 ไบต์ (4096 * 6) ใช้หน้าต่าง Hamming: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs)); เรียกใช้ผ่าน Process1D()FFTW แปลงจากจำนวนเชิงซ้อน: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1])); หาค่าเฉลี่ย 6 ค่าเพื่อรับ FFT …
15 audio  fft 

3
การแปลง Cosine อย่างรวดเร็วผ่าน FFT
ฉันต้องการใช้การแปลงโคไซน์อย่างรวดเร็ว ฉันอ่านวิกิพีเดียว่ามีรุ่น DCT ที่รวดเร็วซึ่งคำนวณได้คล้ายกับ FFT ฉันพยายามอ่านMakhoul * paper ที่อ้างถึงสำหรับการใช้งาน FTPACK และ FFTW ที่ใช้ในScipyแต่ฉันไม่สามารถแยกอัลกอริทึมจริงได้ นี่คือสิ่งที่ฉันมี: รหัส FFT: def fft(x): if x.size ==1: return x N = x.size x0 = my_fft(x[0:N:2]) x1 = my_fft(x[0+1:N:2]) k = numpy.arange(N/2) e = numpy.exp(-2j*numpy.pi*k/N) l = x0 + x1 * e r = x0 - x1 …
15 fft  dct 

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