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

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

4
แยกความถี่ออกจาก FFT
ฉันแสดงสัญญาณ FFT ที่ 512 จุด ฉันได้รับหมายเลข 512 ชุดอื่น ฉันเข้าใจว่าตัวเลขเหล่านั้นเป็นตัวแทนของคลื่นไซน์และโคไซน์ต่าง ๆ ที่มีความถี่ต่างกัน หากความเข้าใจของฉันถูกต้องใครบางคนสามารถบอกฉันว่าจะรู้ความถี่ของคลื่นไซน์และโคไซน์เหล่านั้นได้อย่างไรจากความรู้ของตัวเลข 512 เหล่านั้น (เช่นแอมพลิจูด)

5
FFT ของคลื่นไซน์ไม่มาตามที่คาดไว้นั่นคือจุดเดียว
พล็อตสีฟ้าเป็นสเปกตรัม 50 Hz และสีม่วงแดงหนึ่งคือคลื่นไซน์ 50.1 Hz (มีแอมพลิจูด 0.7) ทั้งสองตัวอย่างที่ 1024 ตัวอย่าง / s ฉันแสดง 1024 จุด FFT เพื่อให้ได้สเปกตรัมนี้ เหตุใดค่าความถี่ 50Hz จึงเป็นค่าเดียว ทำไมความถี่ 50.1 Hz ประกอบด้วยความถี่อื่นนอกเหนือจาก 50.1 Hz ความถี่ใหม่เหล่านี้มาจากไหน ฉันไม่ได้ทำการประมวลผลใด ๆ ที่ไม่ใช่เชิงเส้นบนสัญญาณ 50.1 Hz! นอกจากนี้ 50.1 Hz ก็ดูเหมือนจะมีแอมพลิจูดสูงสุดที่เล็กกว่านั่นคือไม่ใช่ 0.7 เมื่ออันที่จริงแล้วคลื่นไซน์ที่ฉันสร้างขึ้นนั้นมีแอมพลิจูดที่ 0.7 ทำไมนี้ รับโดยคำสั่ง MATALB fft ();
14 fft 

4
วิธีที่มีประสิทธิภาพมากที่สุดในการแยกส่วนประกอบความถี่ของสัญญาณเสียงด้วยความแม่นยำของมนุษย์ใกล้เคียงแบบเรียลไทม์
ฉันกำลังพยายามหาวิธีที่จะแยกส่วนประกอบความถี่ของตัวอย่างเสียงตามอำเภอใจ (โดยทั่วไปคือเพลง) ในลักษณะที่คล้ายกับ FFT แต่ในการวิจัยของฉันเกี่ยวกับอัลกอริทึม FFT ฉันได้เรียนรู้ว่ามันมีบางอย่าง ข้อ จำกัด รุนแรงสำหรับวัตถุประสงค์นี้ มี 3 ปัญหาที่ FFT กำลังนำเสนอ: เนื่องจากความละเอียดถังขยะ FFT เทียบเท่ากับขนาดหน้าต่างของคุณเพื่อให้ได้ความแม่นยำที่สมเหตุสมผล (พูด 1 Hz) คุณต้องมีหน้าต่างที่ยาวเกินสมควร (พูด 1 วินาที) ซึ่งหมายความว่าคุณไม่สามารถตรวจพบทรานแซคชันหรือความถี่ที่เพิ่งเปิดใหม่ได้อย่างรวดเร็ว นอกจากนี้ยังหมายความว่าปัญหาจะไม่สามารถแก้ไขได้ด้วย CPU ที่เร็วขึ้นและอัตราการสุ่มตัวอย่างที่สูงขึ้น - ข้อ จำกัด ถูกผูกติดอยู่กับเวลา มนุษย์รับรู้ความถี่ลอการิทึม แต่ถังขยะ FFT อยู่ห่างกันเป็นเส้นตรง เช่นความแตกต่างของ 20hz ที่จุดต่ำสุดของการได้ยินของเรามีขนาดใหญ่มากในขณะที่ความแตกต่างของ 20hz ที่ระดับสูงสุดนั้นไม่สามารถมองเห็นได้ ดังนั้นเพื่อให้ได้ความแม่นยำที่เราต้องการที่ความถี่ต่ำเราต้องคำนวณมากกว่าที่เราต้องการในความถี่สูง ปัญหาเหล่านี้บางอย่างสามารถแก้ไขได้โดยการสอดแทรกระหว่างถังขยะ FFT สิ่งนี้อาจใช้งานได้กับเสียงดนตรีมากเพราะความถี่มักจะอยู่ห่างกันมากและดังนั้นไม่เกิน 1 ความถี่จะรั่วไหลลงในถังขยะคู่ แต่นี่จะไม่เป็นเช่นนั้นเสมอไปโดยเฉพาะอย่างยิ่งสำหรับเสียงที่น่าสนใจเช่นเครื่องดนตรีประเภทเคาะ ดังนั้นการแก้ไขจึงเป็นการคาดเดาจริงๆ …

2
ฉันควรใช้ข้อมูลใดเพื่อทดสอบการใช้งาน FFT และฉันควรคาดหวังความแม่นยำใด
ฉันมีส่วนร่วมกับความพยายามในการใช้อัลกอริทึม FFT และอยากรู้ว่าคำแนะนำที่แนะนำสำหรับข้อมูลการทดสอบการใช้งานคืออะไรและเพราะเหตุใด! - และความแม่นยำที่คาดหวัง ในอินพุตทดสอบฉันพบคำแนะนำเล็กน้อยในโพสต์ Usenet เก่าที่ฉันโพสต์เป็นคำตอบ แต่เป็นเพียงคำแนะนำของบุคคลหนึ่งโดยไม่มีเหตุผลมากมาย - ฉันไม่พบสิ่งใดที่ดูเหมือนคำตอบที่ชัดเจน ในความแม่นยำ Wikipedia บอกว่าข้อผิดพลาดควรเป็น O (e log N) แต่ความคาดหวังที่สมเหตุสมผลในแง่ที่สมบูรณ์คืออะไร? แก้ไขเพื่อเพิ่ม: การทดสอบจริงอยู่ในรูปแบบที่ฉันได้จัดเก็บอาร์เรย์ของข้อมูลอินพุตและข้อมูลเอาต์พุต "อ้างอิง" ที่คำนวณล่วงหน้าเพื่อเปรียบเทียบกับดังนั้นฉันจึงไม่จำเป็นต้องใช้โซลูชันที่มีรูปแบบปิด
14 fft 

3
วิธีการคำนวณอย่างมีประสิทธิภาพเฉพาะค่าสัมประสิทธิ์ต่ำของ FFT ที่ไม่มีเบาะรอง
ฉันมีอัลกอริทึมที่ zero pad เรียงลำดับไปที่ 4N ทำ FFT และใช้ความถี่ต่ำสุด N ที่ชี้จาก 4N ที่สร้างขึ้นเท่านั้น ดูเหมือนว่าจะมีงานที่ต้องสูญเปล่ามากมายความคิดใด ๆ ที่สามารถทำได้เร็วกว่านี้
14 fft  dft 

3
เมื่อใดที่จะใช้ DTFT กับ DFT (และผู้บุกรุก) ในการวิเคราะห์
ในการอ่านหลายครั้งของฉันเมื่อใดก็ตามที่ผู้เขียนบางคนพูดถึงการทำงานในโดเมนความถี่ (แปลง) (ของสัญญาณดิจิตอล) พวกเขามักจะใช้ DFT หรือ DTFT (และแน่นอนว่าผู้รุกรานที่สอดคล้องกัน) ผู้เขียนที่แตกต่างกันมักจะทำงานกับคนอื่น ฉันไม่สามารถยืนยันรูปแบบเฉพาะเกี่ยวกับเรื่องนี้ได้ ทำไมคุณถึงเลือก DTFT เหนือ DFT หรือในทางกลับกันในการอธิบายอัลกอริทึม? ที่หนึ่งจะช่วยให้คุณมากกว่าที่อื่น

2
มูลค่าจริงเมื่อเสียงเรียกเข้าเป็นศูนย์เมื่อระยะห่างในช่องว่าง FFT คี่
ดังนั้นฉันจึงพยายามเขียน interpolator โดเมนความถี่ที่ zero-pads ตอบสนองความถี่ของสัญญาณและการแปลงผกผัน มีสองกรณีที่ฉันต้องจัดการกับ: การตอบสนองแบบยาว - ต้องแยกถังขยะเพราะมันไม่ชัดเจน ดังนั้นฉันจึงคัดลอกส่วนลบของสเปกตรัมและเพิ่มศูนย์ในระหว่างFs/2Fs/2F_s/2n*(interp-1)-1 การตอบกลับที่มีความยาวแปลก ๆ - ไม่มีดังนั้นเพียงแยกความถี่บวก / ลบและแทรกศูนย์ระหว่างพวกเขาFs/2Fs/2F_s/2n*(interp-1) รหัสที่ทำให้เกิดช่องว่างภายในสามารถดูได้ที่นี่ // Copy negative frequency components to end of buffer and zero out middle // inp - input buffer of complex floats // n - transform size // interp - interpolation amount void zero_pad_freq(cfloat_t …
13 fft  interpolation  c 

2
คำอธิบายที่เข้าใจง่ายของความสัมพันธ์ข้ามในโดเมนความถี่
ตามทฤษฎีบทความสัมพันธ์ข้าม: ความสัมพันธ์ข้ามระหว่างสองสัญญาณเท่ากับผลคูณของการแปลงฟูริเยร์ของสัญญาณหนึ่งคูณด้วยคอมเพล็กซ์ที่ซับซ้อนของการแปลงฟูริเยร์ของสัญญาณอื่น หลังจากทำสิ่งนี้แล้วเมื่อเรารับสัญญาณของผลิตภัณฑ์เราจะได้จุดสูงสุดซึ่งบ่งชี้การเปลี่ยนแปลงระหว่างสัญญาณทั้งสอง ฉันไม่สามารถเข้าใจวิธีการทำงานนี้ได้อย่างไร ทำไมฉันถึงได้จุดสูงสุดซึ่งบ่งบอกถึงการเปลี่ยนแปลงระหว่างสัญญาณทั้งสอง ฉันได้คณิตศาสตร์มาจาก: http://mathworld.wolfram.com/Cross-CorrelationTheorem.html แต่ฉันไม่สามารถเข้าใจได้ว่าสิ่งนี้มีความหมายอย่างไรโดยสัญชาตญาณ ใครช่วยกรุณาอธิบายหรือชี้แนะฉันไปที่เอกสารที่ถูกต้องได้ไหม? ขอบคุณ!

3
การแปลงฟูริเยร์แบบไม่ต่อเนื่อง: เทอมดีซีคืออะไร?
ขณะนี้ฉันกำลังเล่นกับ Discrete Fourier Transform (DFT) ใน Matlab เพื่อดึงคุณสมบัติต่าง ๆ จากภาพ ฉันชอบที่จะเข้าใจแนวคิดที่ฉันใช้อย่างเต็มที่ ฉันได้อ่านคำอธิบายหลายอย่างเช่นนี้แต่จนถึงขณะนี้ยังไม่มีใครอธิบายความหมายของคำศัพท์ DC ได้ ทั้งหมดที่ฉันรู้ก็คือเทอม k'the ของDFTนั้นสามารถเขียนเป็น: ที่ เป็นปัจจัย twiddle นั่นหมายความว่าเทอมแรก (เทอม DC) คือแอมพลิจูดที่ไม่มีความถี่ มีคนอธิบายได้ไหมว่าเพราะเหตุใดจึงเรียกว่าคำศัพท์ DC? อะไรคือความสัมพันธ์กับ "กระแสตรง" และความเกี่ยวข้องของเทอม DC คืออะไร? มันจะมีประโยชน์เมื่อใดและเพื่ออะไร
13 image  matlab  fft  dft 

4
คำแนะนำสำหรับหนังสือ - การเขียนรหัส DSP ใน C
ฉันกำลังมองหาหนังสือดีๆสักเล่มที่แสดงให้เห็นว่าคุณเขียนโค้ดใน C เพื่อทำวิธีหลัก DSP ทั้งหมดได้อย่างไร FFT ฟิลเตอร์กรองความถี่ต่ำและสูง Auto-สัมพันธ์ การประมวลผลเสียงรบกวน และพื้นฐานทั้งหมดของ DSP จากทฤษฏีไปเป็นรหัสจริงใน C ตัวอย่างเช่นฉันมี 1,000 ตัวอย่างตอนนี้ฉันต้องการคำนวณ FFT ของมันลบเสียงแล้วนำกลับมาที่แกนเวลา มีบางสิ่งที่ดีที่ครอบคลุมสิ่งเหล่านี้ทั้งหมดหรือไม่?

3
STFT และ DWT (เวฟเล็ต)
STFT สามารถใช้กับข้อมูลเสียงได้สำเร็จ (พร้อมด้วยไฟล์. wav soundfile) เพื่อทำการปรับเปลี่ยนโดเมนความถี่บางอย่าง (ตัวอย่าง: กำจัดเสียงรบกวน) ด้วยN=441000(เช่น 10 วินาทีในอัตราการสุ่มตัวอย่างfs=44100) windowsize=4096, overlap=4, STFT ผลิต approximatively 430x4096อาร์เรย์ (ตอนแรกประสานงาน: กรอบเวลาสองประสานงานความถี่ bin) การแก้ไขสามารถทำได้ในอาเรย์นี้และการสร้างใหม่สามารถทำได้ด้วยoverlap-add (*) มันเป็นวิธีการที่เป็นไปได้ที่จะทำสิ่งที่คล้ายกันกับแสง ? (DWT) คือรับรูปร่างที่คล้ายกันa x bโดยมีaกรอบเวลาและbถังขยะความถี่ทำการปรับเปลี่ยนบางอย่างในอาเรย์นี้และในตอนท้ายการกู้คืนสัญญาณหรือไม่ ได้อย่างไร เวฟเล็ตเทียบเท่ากับการทับซ้อนกันคืออะไร ฟังก์ชั่น Python เกี่ยวข้องกับอะไร (ฉันไม่พบตัวอย่างง่ายๆของการดัดแปลงเสียงด้วยpyWavelets... )? (*): นี่คือกรอบ STFT ที่สามารถใช้ได้: signal = stft.Stft(x, 4096, 4) # x is the input modified_signal …
12 fft  wavelet  dft  python  stft 

2
เมื่อใดฉันจึงควรคำนวณ PSD แทนสเปกตรัมขนาด FFT ธรรมดา
ฉันมีสัญญาณเสียงพูดสามสิบวินาทีที่เก็บตัวอย่างที่ 44.1 kHz ตอนนี้ฉันต้องการที่จะแสดงให้เห็นว่าคำพูดที่มีความถี่ อย่างไรก็ตามฉันไม่แน่ใจว่าสิ่งใดจะเป็นวิธีที่ดีที่สุดในการทำเช่นนั้น ดูเหมือนว่าบางครั้งเราคำนวณค่าสัมบูรณ์ของการแปลงฟูริเยร์และบางครั้งความหนาแน่นของสเปกตรัมกำลัง หากฉันเข้าใจอย่างถูกต้องหลังจะทำงานเพื่อที่ฉันจะแบ่งสัญญาณของฉันออกเป็นส่วน ๆ ทำ FFT ทีละส่วนแล้วหาผลรวมเหล่านี้ ฟังก์ชั่นหน้าต่างมีส่วนเกี่ยวข้องอย่างใด คุณช่วยอธิบายให้ฉันฟังหน่อยได้ไหม? ฉันใหม่กับ DSP

7
รับค่าสูงสุดของสัญญาณหากความถี่อยู่ระหว่างสอง bin center
โปรดสมมติว่าต่อไปนี้: ความถี่พื้นฐานของสัญญาณได้รับการประมาณโดยใช้ FFT และวิธีการประมาณความถี่บางอย่างและอยู่ระหว่างศูนย์ bin สองแห่ง ความถี่ในการสุ่มตัวอย่างได้รับการแก้ไข ความพยายามในการคำนวณไม่ใช่ปัญหา เมื่อทราบความถี่แล้ววิธีใดที่แม่นยำที่สุดในการประเมินค่าสูงสุดของสัญญาณขั้นพื้นฐาน วิธีหนึ่งอาจเป็นสัญญาณแผ่นเวลาเป็นศูนย์เพื่อเพิ่มความละเอียด FFT เช่นที่ศูนย์ช่องเก็บจะอยู่ใกล้กับความถี่โดยประมาณ ในสถานการณ์นี้จุดหนึ่งที่ฉันไม่แน่ใจเกี่ยวกับคือถ้าฉันสามารถเป็นศูนย์ได้มากเท่าที่ฉันต้องการหรือหากมีข้อบกพร่องบางอย่างในการทำเช่นนั้น อีกอันหนึ่งคือศูนย์ bin ที่ฉันควรเลือกหลังจากการเติมศูนย์เป็นศูนย์ที่ฉันได้รับค่าสูงสุดจาก (เพราะอาจไม่มีความถี่ของดอกเบี้ยที่น่าสนใจแม้แต่หลังจากการเติมเต็มศูนย์) อย่างไรก็ตามฉันยังสงสัยว่ามีวิธีอื่นที่อาจให้ผลลัพธ์ที่ดีกว่าได้หรือไม่ผู้ประเมินที่ใช้ค่าสูงสุดของศูนย์ bin สองแห่งรอบข้างเพื่อประเมินมูลค่าสูงสุดตามความถี่ที่น่าสนใจ

3
ค่าเฉลี่ยโดเมนเวลา FFT เทียบกับค่าเฉลี่ยของ Bin bin
ฉันมีข้อมูลทางสรีรวิทยาหลายครั้ง ฉันกำลังทำการวิเคราะห์โดยใช้ความถี่เพื่อวิเคราะห์พลังงาน (แอมพลิจูด) ในความถี่ที่น่าสนใจ เฉลี่ยการทดลองหลายครั้งที่มีความยาวเท่ากันหรือไม่แล้วใช้ FFT เดียวของสัญญาณเฉลี่ยเทียบกับการคำนวณ FFT สำหรับการทดลองแต่ละครั้งและจากนั้นเฉลี่ยค่าเฉลี่ย bins ที่เท่ากัน? ในทางปฏิบัติฉันค้นหาสิ่งนี้ไม่ได้เป็นอย่างนั้น โดยเฉพาะอย่างยิ่งสัญญาณมีองค์ประกอบที่แข็งแกร่ง 1 / f ตามธรรมชาติและสิ่งนี้จะได้รับการเน้นถ้าฉันคำนวณ FFT ของการทดลองแต่ละครั้งและเฉลี่ยแอมพลิจูด (ส่วนที่แท้จริง) ของแต่ละช่องความถี่ ทั้งสองเทียบเท่ากันหรือไม่ มีวิธีที่ถูกต้องในการทำสิ่งต่าง ๆ หรือไม่? หรือภายใต้เงื่อนไขใดบ้างที่ควรเลือกระหว่างการหาค่าเฉลี่ยของโดเมนเวลาเทียบกับการเฉลี่ยค่าเฉลี่ยถังขยะ
12 fft 

4
คุณสามารถเพิ่มความละเอียดความถี่ของ FFT โดยไม่เพิ่มขนาดหน้าต่างได้หรือไม่
ฉันต้องการใช้ STFT สำหรับการวิเคราะห์แบบหลายจุด ฉันรู้ว่าการตรวจจับชิ้นงานที่มีอยู่ในสัญญาณนั้นเป็นเพียงการเริ่มต้น ยังฉันมีปัญหากับมัน 44100Hzสมมติว่าผมมีสัญญาณที่มีความถี่ตัวอย่าง 'CD' พร้อมหน้าต่างของ1024ตัวอย่างที่ฉันได้รับมติ bin 22500Hz/512=43Hzความถี่ของ นี้ก็พอเพียงที่จะมองเห็นโน้ตเปียโนสูงเช่น: และC5 = 523.251HzC#5 = 554.365 ฉันเคยคิดว่า1024ค่อนข้างเป็นหน้าต่างบานใหญ่ แต่มันอาจจะไม่ใช่และโดยปกติจะใช้หน้าต่างขนาดใหญ่กว่าเพื่อตรวจจับชิ้นงาน? สามารถเพิ่มความละเอียดความถี่ด้วยวิธีอื่นนอกเหนือจากการเพิ่มขนาดหน้าต่างซึ่งการแก้ไขเวลาแย่ลงหรือไม่ ฉันคิดถึงสองวิธี: method1: แบ่งสัญญาณออกเป็นคลื่นความถี่ด้วย bandpassfilters (เช่น0-11.25Hzและ11.25-22.5Hz) Downsample แบนด์ที่สูงขึ้นเพื่อให้ความถี่สูงดั้งเดิมตอนนี้เป็นความถี่ต่ำ (เช่นสำหรับแบนด์ที่สอง11.25-22.5Hz -> 0Hz-22.5Hz) - ไม่แน่ใจว่าเป็นไปได้ ถังขยะที่เกิดขึ้นพร้อมกันตั้งค่าด้วยฉลากที่ปรับ Method2: ใช้ชุดตัวกรอง lowpass พร้อมเพิ่มขีด จำกัด ดำเนินการ FFT เมื่อเพิ่มช่วงความถี่ สำหรับแต่ละความถี่ให้ใช้ความละเอียดที่ดีที่สุด (ถังขยะจาก FFT แรกซึ่งรวมถึงความถี่นี้) สิ่งนี้จะทำให้ความถี่ต่ำมีความละเอียดที่ดีขึ้น แต่ฉันคิดว่ามันโอเคเพราะสำหรับโน้ตที่สูงขึ้นความแตกต่างของความถี่ก็น่ากลัวกว่า ฉันจะขอบคุณข้อสังเกตใด ๆ เกี่ยวกับปัญหานี้ ฉันยังอ่านที่นี่: …
12 filters  fft  pitch  stft 

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