ขั้นตอนแรกคือการยืนยันว่าทั้งอัตราตัวอย่างเริ่มต้นของคุณและอัตราตัวอย่างเป้าหมายของคุณสรุปตัวเลข เนื่องจากเป็นจำนวนเต็มจึงเป็นจำนวนตรรกยะโดยอัตโนมัติ หากหนึ่งในนั้นไม่ได้เป็นจำนวนตรรกยะก็ยังคงเป็นไปได้ที่จะทำการเปลี่ยนแปลงอัตราตัวอย่าง แต่มันเป็นกระบวนการที่แตกต่างกันมากและยากขึ้น
ขั้นตอนต่อไปคือการคำนึงถึงอัตราตัวอย่างสองอัตรา อัตราตัวอย่างเริ่มต้นในกรณีนี้คือ 44100 ซึ่งปัจจัยที่ 2 อัตราตัวอย่างเป้าหมาย 16000, ปัจจัยที่ 3 ดังนั้นการแปลงจากอัตราตัวอย่างเริ่มต้นกับอัตราเป้าหมายที่เราจะต้องฆ่าทิ้งโดยและตีความโดย 52 7 * 5 3 3 2 * 7 2 2 5 * 522∗ 32∗ 52∗ 7227∗ 5332∗ 7225∗ 5
ขั้นตอนก่อนหน้านี้จะต้องทำไม่ว่าคุณต้องการที่จะสุ่มข้อมูล ตอนนี้เรามาพูดถึงวิธีการทำกับ FFT เคล็ดลับในการ resampling กับ FFT อีกครั้งคือการเลือกความยาว FFT ที่ทำให้ทุกอย่างออกมาดี นั่นหมายถึงการเลือกความยาว FFT ที่เป็นอัตราการทำลายล้างจำนวนมาก (441 ในกรณีนี้) เพื่อประโยชน์ของตัวอย่างลองเลือกความยาว FFT ที่ 441 แม้ว่าเราจะได้เลือก 882 หรือ 1323 หรือผลคูณบวกอื่น ๆ ของ 441
เพื่อให้เข้าใจว่ามันทำงานอย่างไรมันช่วยในการมองเห็นมัน คุณเริ่มต้นด้วยสัญญาณเสียงที่มีลักษณะเหมือนในโดเมนความถี่บางอย่างเช่นรูปด้านล่าง
เมื่อคุณทำการประมวลผลเสร็จแล้วคุณต้องการลดอัตราตัวอย่างเป็น 16 kHz แต่คุณต้องการความเพี้ยนน้อยที่สุด คุณต้องการเก็บทุกอย่างจากภาพด้านบนจาก -8 kHz ถึง +8 kHz และปล่อยทุกอย่างอื่น ผลลัพธ์ในภาพด้านล่าง
โปรดทราบว่าอัตราตัวอย่างไม่ได้ปรับขนาดพวกเขาอยู่ที่นั่นเพียงเพื่อแสดงแนวคิด
ความงามของการเลือกความยาว FFT ที่เป็นปัจจัยการทำลายล้างหลายประการคือคุณสามารถสุ่มตัวอย่างใหม่ได้ง่ายๆโดยการวางส่วนของผลลัพธ์ FFT จากนั้นจึงย้อนกลับ FFT ที่เหลืออยู่ ในกรณีของตัวอย่างของเราคุณตัวอย่างข้อมูล FFT 441 ซึ่งทำให้คุณได้รับตัวอย่างที่ซับซ้อน 441 โดเมนในโดเมนความถี่ เราต้องการที่จะสังหาร 441 และสอดแทรก 160 ( ) ดังนั้นเราจึงเก็บตัวอย่าง 160 ตัวอย่างที่เป็นตัวแทนของความถี่จาก -8 kHz ถึง +8 kHz จากนั้นเราจะผกผัน FFT ตัวอย่างและ presto! คุณมีตัวอย่างโดเมนเวลา 160 ตัวอย่างที่สุ่มตัวอย่างที่ 16 kHz25∗ 5
ในขณะที่คุณอาจสงสัยว่ามีปัญหาที่อาจเกิดขึ้นสองสามอย่าง ฉันจะผ่านแต่ละคนและอธิบายว่าคุณจะเอาชนะพวกเขาได้อย่างไร
คุณจะทำอย่างไรถ้าข้อมูลของคุณไม่ได้เป็นตัวคูณที่ดีของปัจจัยการทำลายล้าง คุณสามารถเอาชนะสิ่งนี้ได้อย่างง่ายดายโดยการเติมจุดสิ้นสุดของข้อมูลของคุณด้วยค่าศูนย์ที่เพียงพอเพื่อให้มันเป็นปัจจัยการทำลายล้างที่หลากหลาย ข้อมูลจะถูกเสริมก่อนที่จะเป็น FFT
แม้ว่าวิธีการที่ฉันอธิบายนั้นง่ายมาก แต่ก็ไม่เหมาะอย่างยิ่งที่จะสามารถแนะนำเสียงเรียกเข้าและสิ่งประดิษฐ์ที่น่ารังเกียจอื่น ๆ ในโดเมนเวลา คุณสามารถหลีกเลี่ยงได้โดยการกรองข้อมูลโดเมนความถี่ก่อนที่จะลดลงข้อมูลความถี่สูง คุณทำเช่นนี้โดย FFT กำลังกรองตัวกรองความยาวเติมข้อมูล (ก่อน FFT'ing) อย่างน้อยl - 1ล.l−1ศูนย์ (โปรดทราบว่าจำนวนตัวอย่างข้อมูลและจำนวนของชิ้นส่วนแพ็ดดิ้งจะต้องเป็นตัวคูณบวกจำนวนหนึ่งของปัจจัยด้านการทำลาย - คุณสามารถเพิ่มความยาวของช่องว่างภายในเพื่อให้เป็นไปตามข้อ จำกัด นี้), FFT ข้อมูลและตัวกรองจากนั้นการสร้างสมนามความถี่สูง (> 8 kHz) จะส่งผลให้ผลลัพธ์ความถี่ต่ำ (<8 kHz) ลดลงก่อนที่จะลดผลลัพธ์ความถี่สูง น่าเสียดายที่เนื่องจากการกรองในโดเมนความถี่เป็นหัวข้อใหญ่ในสิทธิ์ของตนเองฉันจึงไม่สามารถระบุรายละเอียดเพิ่มเติมในคำตอบนี้ได้ ฉันจะบอกว่าถ้าคุณกรองและประมวลผลข้อมูลมากกว่าหนึ่งอันคุณจะต้องใช้Overlap-and-AddหรือOverlap-and-Saveเพื่อทำการกรองอย่างต่อเนื่อง
ฉันหวังว่านี่จะช่วยได้.
แก้ไข: ความแตกต่างระหว่างจำนวนเริ่มต้นของตัวอย่างโดเมนความถี่และจำนวนเป้าหมายของตัวอย่างโดเมนความถี่จำเป็นต้องเป็นเช่นนั้นเพื่อให้คุณสามารถลบตัวอย่างจำนวนเดียวกันจากด้านบวกของผลลัพธ์เป็นด้านลบของผลลัพธ์ ในตัวอย่างของเราจำนวนตัวอย่างเริ่มต้นคืออัตราการทำลายล้างหรือ 441 และจำนวนเป้าหมายของตัวอย่างคืออัตราการแก้ไขหรือ 160 ความแตกต่างคือ 279 ซึ่งไม่เท่ากัน วิธีแก้ไขคือเพิ่มความยาว FFT เป็นสองเท่าเป็น 882 ซึ่งทำให้จำนวนเป้าหมายของกลุ่มตัวอย่างเพิ่มเป็นสองเท่าถึง 320 ตอนนี้ความแตกต่างคือเท่ากันและคุณสามารถวางตัวอย่างโดเมนความถี่ที่เหมาะสมโดยไม่มีปัญหา