FFT สำหรับช่วงความถี่เฉพาะ


11

ฉันต้องการแปลงสัญญาณเป็นโดเมนความถี่ ช่วงความถี่ที่ต้องการเป็น0.1 Hzไปและความละเอียดความถี่1 Hz0.01 Hz

ด้วยอัตราการสุ่มตัวอย่าง30 HzFFT ให้ส่วนประกอบความถี่สูงถึง 15 Hz การเพิ่มอัตราการสุ่มตัวอย่างให้ความละเอียดความถี่ที่ดีขึ้น อย่างไรก็ตาม FFT ให้ช่วงความถี่ที่กว้างขึ้น ในกรณีของฉันฉันเพียงต้องการ0.1 Hzที่จะ1 Hz, FFT ให้ถึง15 Hz(คำนวณพิเศษ)

คำถามของฉันคือมีวิธีมาตรฐานในการคำนวณโดเมนความถี่ของสัญญาณที่มีช่วงความถี่เฉพาะและความละเอียดสูงหรือไม่


2
ดูเหมือนว่าคุณต้องการ Zoom FFT arc.id.au/ZoomFFT.html
endolith

หากคุณเพิ่งทำ DFT มาตรฐานด้วยอัตราการสุ่มตัวอย่าง 2 Hz และระยะเวลา 100 วินาทีคุณจะได้รับย่านความถี่จาก 0 ถึง 1 Hz ที่มีความละเอียด 0.01 Hz มีเพียง 10% ของกลุ่มตัวอย่างเท่านั้นที่จะอยู่นอกกลุ่มที่คุณสนใจจริง ๆ แล้วมันคุ้มค่ากับความพยายามในการหารายละเอียดของอัลกอริทึมที่ไม่ได้มาตรฐานหรือไม่
โฟตอน

ข้อ จำกัด คือระยะเวลาจะต้องสั้นที่สุด 100s ยาวเกินไป เราต้องการประมาณ 10+ s
NcJie

คำตอบ:


5

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


2

นอกจากนี้ยังมีความเป็นไปได้ในการใช้การแปรปรวนความถี่ (ยังใช้เป็นแว่นขยายในการที่คุณได้รับการปรับปรุงความละเอียดในช่วงความถี่ที่คุณสนใจสำหรับ FFT ขนาดเดียวกันที่ค่าใช้จ่ายของความละเอียดต่ำที่ความถี่สูงกว่า) อย่างไรก็ตามคุณไม่ได้บันทึก MIPS ใด ๆ เนื่องจากขนาด FFT จะไม่ลดลงและการแปรปรวนความถี่นั้นอยู่ไกลจากราคาถูก

หากคุณต้องการคำนวณเฉพาะถังขยะบางอย่างใน FFT (และดังนั้นจึงประหยัด MIPS) มีสองวิธีที่จะทำเช่นนั้น เช่นเลื่อน DFT อ้างอิงในบทความนี้ให้คำอธิบายที่ดีมากhttp://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf ฉันยังคิดว่า goertzel algo ทำสิ่งที่คล้ายกัน แต่ฉันไม่รู้

จากนั้นมีตัวเลือกของการสุ่มตัวอย่างก่อน FFT'ing นั่นอาจจะช่วยประหยัด MIPS ได้อีกด้วย

แก้ไข: เพียงชี้แจงความคิดเห็นเกี่ยวกับอัลกอริทึม Goertzel ที่ไม่มีประโยชน์ โดยการเสียบค่าโดยตรงลงในนิพจน์ที่พบที่ด้านล่างของหน้าวิกินี้http://en.wikipedia.org/wiki/Goertzel_algorithmวิธี Goertzel จะซับซ้อนกว่า FFT เมื่อขนาดของ FFT ที่ต้องการมีขนาดใหญ่กว่า 128 (สมมติว่าขนาด FFT เป็นปัจจัยของ 2 และการนำ Radix-2 มาใช้)

อย่างไรก็ตามมีปัจจัยอื่น ๆ ที่ควรนำมาพิจารณาซึ่งเป็นประโยชน์ต่อ Goertzel เพื่ออ้างถึงหน้า wiki: "การใช้งาน FFT และแพลตฟอร์มการประมวลผลมีผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพสัมพัทธ์การใช้งาน FFT บางอย่าง [9] ทำการคำนวณจำนวนเชิงซ้อนภายในเพื่อสร้างสัมประสิทธิ์แบบ on-the-fly หน่วยการทำงาน "อัลกอริธึม FFT และ DFT สามารถใช้ตารางค่าสัมประสิทธิ์ที่คำนวณล่วงหน้าเพื่อประสิทธิภาพเชิงตัวเลขที่ดีขึ้น แต่สิ่งนี้ต้องการการเข้าถึงค่าสัมประสิทธิ์บัฟเฟอร์ที่เพิ่มขึ้นในหน่วยความจำภายนอกซึ่งสามารถนำไปสู่การโต้แย้งแคชที่เพิ่มขึ้น ."

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


1
DFT แบบเลื่อนนั้นมีประโยชน์จริง ๆ ในบริบทของการวิเคราะห์สเปกตรัมแบบเรียลไทม์ซึ่งลำดับการป้อนข้อมูลมีความยาวมากและสเปกตรัมจะต้องคำนวณใหม่ในช่วงเวลาปกติ อัลกอริทึม Goertzel นั้นมีประสิทธิภาพมากหากจำเป็นต้องคำนวณค่า DFT เพียงเล็กน้อยเท่านั้น มันจะไม่เป็นประโยชน์สำหรับการแก้ปัญหาที่กำหนดเพราะจำนวนความถี่ที่ต้องการนั้นใหญ่เกินไป
Matt L.

ขอบคุณ @MattL สำหรับการชี้จุดอ่อนอัลกอริธึมของ Goertzel
NcJie

1

Δ=sยังไม่มีข้อความ
sยังไม่มีข้อความยังไม่มีข้อความ

ยังไม่มีข้อความs(เสื้อ)x(n)s(เสื้อ)x(n)=s(n/s)

x~(n)=x(n)อี-J2πk0/ยังไม่มีข้อความ
k0=/s+~sx~(n)M=s/ยังไม่มีข้อความ

s(เสื้อ)M

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