ฉันจะสร้างพล็อตความถี่เทียบกับเวลาได้อย่างไร


9

ฉันเป็นวิศวกรเคมีไม่ใช่ EE ดังนั้นมันจึงค่อนข้างยาก

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

นี่คือการแปลงรูปแบบที่ฉันกำลังมองหาซึ่งแสดงด้วยคลื่นเสียง (โน้ตเปียโน G) อย่างที่คุณเห็นกราฟนี้เป็นแกนสามแกนโดยที่สีที่สามแสดงด้วยสี

ขอบคุณ!

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


5

ความละเอียดของเวลาและความถี่เป็นปัญหาที่รู้จักกันดีและมีวิธีการที่จะเอาชนะมันได้ สำหรับสัญญาณเสียงเทคนิคบางอย่างที่ใช้กันทั่วไป ได้แก่ : วิธีการแบบพารามิเตอร์ ความละเอียดที่ปรับได้ (วิเคราะห์ด้วยการกำหนดค่าเวลา / ความถี่ต่างๆและแก้ไขผลลัพธ์ด้วยกัน - เหวินเอ็กซ์และเอ็มแซนด์เลอร์ "คอมโพสิตสเปกโตรแกรมโดยใช้การแปลงฟูเรียร์หลายรายการ"); เวฟเล็ต / การสลายตัวบนฐานที่สมบูรณ์ และการใช้ข้อมูลเฟสเพื่อแยกตำแหน่งที่แม่นยำของความถี่สูงสุด (IFgram)

อย่างไรก็ตามปรากฏว่ากราฟที่คุณแสดงไม่ได้ใช้เทคนิคเหล่านี้ ดังนั้นฉันสงสัยว่านี่ไม่ใช่สิ่งที่คุณอาจกำลังมองหา ดูเหมือนจะมี "รอยเปื้อน" บางอย่างบนแกนนอน (เช่นที่ t = 1.2s) และนี่เป็นสัญญาณที่แน่นอนว่าการวิเคราะห์ได้กระทำโดยมีการทับซ้อนกันสูงระหว่างชิ้น

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

frame 1: t = 0..t = 40ms; เฟรม 2: t = 40ms..t = 80ms

มันอาจจะเป็นอย่างดี:

frame 1: t = 0..t = 40ms; เฟรม 2: t = 10ms..t = 50ms

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


คุณจะไปทางอื่นได้อย่างไร (เปลี่ยนจาก spectrogram เป็นสัญญาณเสียง)
pete

4

ใช่หลายคนทำงานวิเคราะห์ความถี่เวลา

วิธีการ "แบ่งข้อมูลของฉันเป็นชิ้น ๆ ดำเนินการ FFT ในแต่ละชิ้น" เป็นความคิดที่ดี การใช้ "ฟังก์ชั่นหน้าต่าง" ในแต่ละก้อนก่อนดำเนินการ FFT ช่วยหลีกเลี่ยงสิ่งประดิษฐ์จำนวนมาก การอนุญาตให้ชิ้นส่วนเหลื่อมทับกันก็ช่วยได้เช่นกัน หลังจากปรับแต่งเหล่านั้นคุณจะจบลงด้วยการแปลง Gaborซึ่งดูเหมือนจะเป็นการแปลงฟูริเยร์ระยะสั้นที่ได้รับความนิยมมากที่สุด (STFT)

ดังที่คุณได้ชี้ให้เห็นแล้วและในบทความของวิกิพีเดียชี้ให้เห็นว่าเทคนิคการแปลงฟูริเยร์ระยะสั้นทั้งหมดมีการแลกเปลี่ยน:

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

นี่เป็นปัญหาที่โด่งดัง แต่อนิจจาไม่เพียง แต่มันไม่ได้รับการแก้ไขมันได้รับการพิสูจน์แล้วว่าความไม่แน่นอนระหว่างคนทั้งสองนั้นเป็นสิ่งที่หลีกเลี่ยงไม่ได้ - ข้อ จำกัด ของกาบอร์การ จำกัด ของไฮเซนเบิร์ก - กาบอร์หลักการความไม่แน่นอนฯลฯ

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

หากไม่ได้ผลสำหรับโปรแกรมนี้แล้วฉันจะย้ายไปยังวิธีการอื่น ๆ ที่จะเป็นตัวแทนเวลาความถี่และการวิเคราะห์เวลาความถี่ - การแปลงเวฟแปลง chirplet , เศษส่วนฟูเรียร์ (FRFT) ฯลฯ

แก้ไข: รหัสที่มาบางส่วนเพื่อสร้างspectrograms / น้ำตกแปลงจากข้อมูลเสียง:

Image to Spectrogramไปในทิศทางตรงกันข้ามจากยูทิลิตี้ด้านบน


Gabor transform อยู่กับหน้าต่าง Gaussian เท่านั้น หากคุณใช้หน้าต่างอื่นมันเป็นเพียง STFT (และหน้าต่างแบบเกาส์ที่แท้จริงนั้นไม่มีอยู่ในระบบดิจิตอลเพราะมันลดลงเหลือไม่สิ้นสุด)
endolith

@endolith: คุณพูดถูก การแปลง Gabor ใช้ "ฟังก์ชั่นหน้าต่างเกาส์เซียน" ซึ่งถูกตัดให้มีความยาว จำกัด - มันค่อนข้างใกล้เคียง แต่ไม่เหมือนกับศาสตร์แบบเกาส์อุดมคติ
David Cary

ฉันคิดว่าการแปลง Gabor เป็นการแปลงแบบต่อเนื่องโดยใช้อินทิกรัลดังนั้นมันสามารถมีแบบเกาส์แบบไม่ตัดทอนเป็นหน้าต่างได้หรือไม่
endolith

@endolith: ใช่โดยหลักการแล้วคน ๆ หนึ่งสามารถใช้ Gaussian ที่ไม่ถูกตัดทอนเป็นหน้าต่างได้ ในทางปฏิบัติเนื่องจากในทางปฏิบัติพลังงานทั้งหมดของเกาส์เซียนอยู่ภายในไม่กี่ซิกม่าของโคกกลางการใช้หน้าต่างที่ถูกตัดในทางปฏิบัติแทบจะไม่ทำให้เห็นความแตกต่างในกราฟผลลัพธ์ เนื่องจากซอฟต์แวร์ที่สร้างspectrogram Waterfall Plotsใช้หน้าต่าง Gaussian ซ้ำ ๆ และจากนั้นทำ FFT สำหรับทุกคอลัมน์ของแผนภูมิ "not truncating" จะทำให้ซอฟต์แวร์นั้นช้าเกินทน
David Cary
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.