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

2
การปรับปรุงความละเอียด spectrogram ใน Python?
ฉันใช้specgram()ฟังก์ชั่นในmatplotlibการสร้างไฟล์คลื่นเสียงพูดใน Python แต่ผลลัพธ์นั้นมีคุณภาพด้อยกว่าอย่างมากสำหรับซอฟท์แวร์ถอดรหัสปกติของฉัน Praat สามารถสร้างได้ ตัวอย่างเช่นสายต่อไปนี้: specgram( fromstring(spf.readframes(-1), 'Int16'), Fs=framerate, cmap=cm.gray_r, ) สร้างสิ่งนี้: ขณะที่ Praat ทำงานกับตัวอย่างเสียงเดียวกันด้วยการตั้งค่าต่อไปนี้: ระยะการมอง: 0-8000Hz ความยาวหน้าต่าง: 0.005 วินาที ช่วงแบบไดนามิก: 70dB ขั้นตอนเวลา: 1,000 ขั้นตอนความถี่: 250 รูปร่างหน้าต่าง: Gaussian สร้างสิ่งนี้: ผมทำอะไรผิดหรือเปล่า? ฉันได้ลองเล่นซอกับspecgram()พารามิเตอร์ทั้งหมดแต่ดูเหมือนว่าไม่มีอะไรที่จะปรับปรุงความละเอียด ฉันแทบไม่มีประสบการณ์กับ FFT

4
การสร้างสัญญาณเสียงจาก Spectrogram
ฉันมีชุดของเพลงที่สกัดสเปคโตรแกรมขนาดโดยใช้ Hamming Window ที่มีการทับซ้อน 50% หลังจากที่แยกสเปคโทรแกรมฉันได้ลดขนาดไปบ้างโดยใช้การวิเคราะห์ส่วนประกอบ (PCA) หลังจากลดมันลงไปสู่มิติที่ต่ำกว่าฉันสร้างสเปคตรัมใหม่จากมิติที่ต่ำกว่า ดังนั้นตอนนี้จะมีข้อผิดพลาดบางอย่างระหว่าง spectrogram ดั้งเดิมและ spectrogram ที่สร้างขึ้นใหม่ ฉันต้องการแปลง spectrogram นี้กลับไปเป็นสัญญาณเสียงและเล่นเพื่อที่ฉันจะได้รู้เมื่อสร้างขึ้นใหม่จากมิติที่ต่ำกว่าเสียงเสียงอย่างไร Matlab มีฟังก์ชั่นใด ๆ หรือไม่ การแปลงขนาด Spectrogram เป็นสัญญาณเสียง

1
สร้าง spectrogram
ฉันได้พยายามหาเหตุผลสำหรับงานนี้และวางแผนที่จะใช้แพ็คเกจซอร์สของ KissFFT เพื่อทำการแปลงฟูริเยร์อย่างรวดเร็ว โปรดแจ้งให้เราทราบหากนี่เป็นสิ่งที่ถูกต้อง: จัดสรรโครงสร้าง FFT เช่น kiss_fft_alloc(N,0,NULL,NULL) ในกรณีที่Nเป็นขนาดของหน้าต่างฉันใช้ บัฟเฟอร์อินพุตจะอาร์เรย์ขององค์ประกอบของประเภทN kiss_fft_scalarบัฟเฟอร์ส่งออกจะอาร์เรย์ขององค์ประกอบของประเภทN/2 + 1kiss_fft_cpx หมายเลขถอดรหัสN(ขนาดหน้าต่าง) ของตัวอย่าง PCM สำหรับตัวอย่าง PCM แต่ละค่าเฉลี่ยแอมพลิจูดของแต่ละแชนเนล (ตัวอย่างที่ไม่ได้ลงชื่อ) และสเกลตั้งแต่ 0 ถึง 2 (หารด้วย 65536.0) เก็บผลลัพธ์ไว้ในบัฟเฟอร์อินพุต ดำเนินการกับหน้าต่าง (เช่น Hanning) บนบัฟเฟอร์อินพุต ทำการแปลงฟูริเยร์อย่างรวดเร็วบนอินพุตบัฟเฟอร์เก็บไว้ในบัฟเฟอร์เอาต์พุต ตั้งแต่ฉันใช้ค่าจริงเป็น input kiss_fftr()ฉันสามารถใช้ สำหรับN/2ค่าเอาต์พุตให้รับขนาดกำลังสองของข้อมูลที่แปลงแล้วแปลงค่าเป็นสเกล dB ด้วยสูตรต่อไปนี้: 10 * log10 (re * re + im * im) เขียนN/2ค่าจากขั้นตอนที่ 6 …

1
อะไรคือความละเอียดความถี่สูงสุดสำหรับการใช้งาน STFT Spectrogram () ของ Matlab?
spectrogram()ฟังก์ชั่นของ Matlab จะคำนวณ STFT ของสัญญาณ มันอธิบายNFFTข้อโต้แย้งของมันดังนี้ S = SPECTROGRAM(X,WINDOW,NOVERLAP,NFFT)ระบุจำนวนจุดความถี่ที่ใช้ในการคำนวณการแปลงฟูริเยร์แบบแยก หากNFFTไม่ได้ระบุNFFTจะใช้ค่าเริ่มต้น ฉันจะแก้ไขให้ถูกต้องหรือไม่ที่NFFTเป็นการแลกเปลี่ยนระหว่างความละเอียดความถี่และจำนวนการคำนวณเท่านั้น สำหรับการทำงานออฟไลน์ของฉันไม่จำเป็นต้องบันทึกรอบ มีข้อ จำกัด สูงสุดสำหรับการNFFTกำหนดเช่นจากการรั่วไหลของสเปกตรัมหรือปัญหาอื่น ๆ ที่ฉันควรรู้หรือฉันสามารถตั้งค่าอาร์กิวเมนต์ให้สูงที่สุดเท่าที่จะเป็นไปได้?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.