FFT Spectrum Analyzer ตามเสียงเพลง

.

FFT Spectrum Analyzer ตามเสียงเพลง

อารัมภัย์ จันทร์ใย

งบประมาณ 5,000 บาท

 

หลายท่านเพิ่มอรรถรสในการฟังเพลงด้วยการสร้างไฟกระพริบตามจังหวะเสียงเพลง เช่นกระพริบตามเสียงกลองหรือเสียงเบส เช่นเดียวกันกับโครงงานนี้ เราจะสร้างไฟกระพริบตามเสียงเพลง แต่จะไม่ธรรมดาตรงที่จังหวะที่เปลี่ยนตามเสียงเพลงนั้นจะแยกตามย่านความถี่เสียงหรือที่เรียกกันว่า FFT Spectrum Analysis จะมีขั้นตอนอย่างไร เชิญอ่านต่อได้เลยครับ

 

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

โดยทฤษฎีแล้วหูมนุษย์จะตอบสนองความถี่เสียงตั้งแต่ 20 Hz ถึง 20 KHz และถ้าหากเราต้องการแยกแยะเพื่อให้ได้ช่วงความถี่ของแต่ละเสียง ซึ่งปกติจะใช้วงจรความถี่ผ่าน (band pass filter) แต่สำหรับโครงงานนี้จะนำเอาสัญญาณเสียงมาทำการประมวลผลด้วยกระบวนการทางคณิตศาสตร์ ที่มีชื่อเรียกว่า FFT = Fast Fourier Transform เพื่อแยกองค์ประกอบของสัญญาณว่ามีความถี่อะไรบ้างและมีจำนวนมากน้อยเพียงใด

ก่อนจะทำการวิเคราะห์ในเชิงคณิตศาสตร์ จะต้องทำการแปลงสัญญาณอะนาลอกให้อยู่ในรูปแบบข้อมูลดิจิตอลเสียก่อน ด้วยกระบวนการ Digital Signal Processing (DSP) การทำงานงาน คือ การสุ่มสัญญาณ (Sampling) อะนาลอกมาจัดเก็บในรูปแบบดิจิตอล ผลลัพธ์ที่ได้จะได้ข้อมูลแบบไม่ต่อเนื่องทางเวลา หรือในทางทฤษฎีเรียกว่า “Discrete Time Signal” จากรูปเราจะพบว่า ความละเอียดของข้อมูลที่ได้จะขึ้นอยู่กับอัตราความเร็วของการสุ่ม “Sampling Rate” ที่ใช้ และขนาดของการแซมปลิ้ง “Number of Sampling” จะมีค่าเท่ากับ 2 ยกกำลังด้วย N ปกติแล้วจะเท่ากับ 2, 4, 8, 16, 32, 64 และ 128 เป็นต้น

รูปที่ 1 การสุ่มสัญญาณอะนาลอก (ก ข และ ค  ตามลำดับ)

เมื่อได้ข้อมูลที่อยู่ในรูปของข้อมูลดิจิตอลแล้ว การหาค่าสเปคตรัมของสัญญาณจะต้องทำการแปลงฟูเรี่ย (“Fourier Transform”) ซึ่งเป็นการคำนวณในเชิงคณิตศาสตร์ ผลลัพธ์ที่ผ่านกระบวนการทางคณิตศาสตร์จะได้เป็นค่าขององค์ประกอบของเสียงนั้นว่ามีความถี่ย่านใด

ขอยกตัวอย่างเพื่อให้มองเห็นภาพและทำความเข้าใจมากยิ่งขึ้น จากรูปที่ 2 เป็นค่าความถี่ Sine Wave ขนาด 4 Hz (ในคาบเวลา 1 วินาทีมีสัญญาณ Sine Wave จำนวน 4 ลูกคลื่น) หนึ่งลูกคลื่นจะมีเวลา 0.25 ดังนั้น F = 1/T; F = 1/0.25 จะได้ค่าความถี่เท่ากับ 4 Hz และเมื่อผ่านฟังก์ชัน FFT จะได้ ผลลัพธ์ดังรูปที่ 3 แต่ถ้าหากจะคิดในซีกบวกเพียงอย่างเดียวผลลัพธ์ดังรูปที่ 4 จากเส้นในแนวแกนนอน จะแสดงให้เห็นว่า ในย่านความถี่ 0 Hz จนถึง 20 Hz มีคลื่นความถี่ขนาด 4 Hz ปรากฏบนเส้นแนวแกนนอน

รูปที่ 2 ตัวอย่างความถี่

รูปที่ 3 ผลลัพธ์ที่ได้จากการผ่าน FFT

รูปที่ 4 ผลลัพธ์ที่ได้จากการผ่าน FFT คิดย่านบวก

โครงงานนี้จะทำการวิเคราะห์เพื่อแยกสัญญาณความถี่ดังทฤษฎีที่กล่าวมาและทำการแสดงผลช่วงความถี่ โดยจะไล่เรียงระดับของความถี่เสียงต่ำไปจนถึงความถี่สูงออกเป็น 32 ช่วง กำหนดคอลัมน์แรกๆ (ด้านซ้ายมือของบอร์ดแอลอีดี) เป็นค่าความถี่ต่ำจะเริ่มจากย่านความถี่ 500Hz โดยประมาณ และคอลัมน์ท้ายๆ จะเป็นค่าความถี่สูง 5 KHz โดยประมาณ และในแต่ละบรรทัดจะแสดงระดับความสูงของความถี่นั้นๆ 20 ระดับ เหตุผลที่ไม่ใช้เต็ม (สามารถได้สูงสุด 32 ระดับ) เพราะ แอลอีดีตั้งแต่แถวที่ 21-32 จะใช้แสดงข้อความ ซึ่งในโครงงานนี้เป็นการแสดงข้อความเลื่อนจากตำแหน่งขวามาตำแหน่งซ้าย

ข้อมูลจำเพาะของโมดูล

ปัจจัยหลักในการคำนวณสัญญาณที่รับเข้ามาและนำไปแสดงผลที่มีความสมบูรณ์มากที่สุด คือ ความเร็วของหน่วยประมวณผลและขนาดของหน่วยความจำ RAM ของไมโครคอนโทรลเลอร์ เพราะหากใช้โมดูลแบบ Full Color จะต้องใช้จำนวนบิตจำนวน 3 บิต โดย 1 บิตจะใช้ประจำตำแหน่งสี 1 สี คือ สีแดง, สีเขียว และสีน้ำเงิน (แม่สี RGB) แต่ถึงอย่างไรก็ตามการสั่งงานจะต้องใช้พื้นที่ 1 ไบต์ เพราะฉะนั้นหากคำนวณโมดูลหนึ่งโมลดูลที่มีขนาด 32×16 พิกเซลจะเท่ากับ 512 พิกเซล นั่นหมายความว่าจะต้องใช้หน่วยความจำ RAM เท่ากับ 512 ไบต์ ดังนั้นหากต่อจำนวนโมดูลมากขึ้นจะเท่ากับ 512 คูณกับจำนวนโมดูลที่ต้องการต่อ และต้องหันกลับมามองว่าขนาดพื้นที่ RAM ของตัวประมวลผลมีพอเพียงหรือไม่ และสิ่งสำคัญที่มองข้ามไม่ได้ คือ ความเร็วในการอัพเดทข้อมูลสำหรับการแสดงผลของไมโครคอนโทรลเลอร์จะต้องเพียงพอด้วย

รูปที่ 5 โมดูลแอลอีดี P5 ขนาด 64×32 พิกเซล

รูปที่ 6 ตำแหน่งขอสายเคเบิลสำหรับเชื่อมต่อกับคอนเน็คเตอร์ 16 ขา

รูปที่ 7 การเชื่อมต่อกันระหว่างตัวโมดูล

จากรูที่ 6 จะเห็นว่าบนโมดูลแอลอีดีจะมีคอนเน็คเตอร์ขนาด 16 ขาต่อเป็นอินพุตและเอาต์พุตเพื่อเชื่อมต่อกับชุดควบคุมและใช้เชื่อมต่อกับโมดูลตัวต่อๆ ไปตามแนวนอน ซึ่งในโครงงานนี้ใช้โมดูลที่ชื่อว่า P5 และความหมายของ P5 นั้นหมายความว่าระยะห่างระหว่างแต่ละหลอดของแอลอีดีเท่ากับ 5 มิลลิเมตร (ซึ่งในท้องตลาดมีรุ่น P10, P6, P5 และ P4 นั่นก็หมายความว่าระยะห่างของแอลอีดีแต่ละโมดูล คือ 10, 6, 5 และ 4 มิลลิเมตรตามลำดับ)

สำหรับโมดูล P5 ที่ใช้ในโครงงานนี้จะมีขนาด 64×32 พิกเซล ที่ตำแหน่งขาจะมี R1, G1, B1 และ R2, G2, B2 นั่นหมายความว่า R1, G1, B1 จะเป็นตำแหน่งของหลอด แถวที่ 1 ถึงแถวที่ 16 และ R2, G2, B2 จะเป็นตำแหน่งหลอดแถวที่ 17 ถึงแถวที่ 32 และตำแหน่งขา A, B, C, D เป็นจำนวน 4 บิตเพื่อเลือกแถวในการแสดงผลไล่เรียงลำดับตามเลขฐานดิจิตอล คือ เริ่มที่ 0000-1111 จะได้ทั้งหมด 16 แถวพอดี

ยกตัวอย่างในการแสดงผล คือ หากเลือก ABCD เป็น 0000 นั่นหมายถึงตำแหน่งแถวที่ 1 ของ R1, G1, B1 และ แถวที่ 17 ของ R2, G2, B2 จะถูกเลือกให้แสดงผล ในการแสดงผลนั้นจะต้องมีการส่งข้อมูลที่ละ 1 บิต เท่ากับจำนวนหลอดของแถวนั้นๆ จนครบโดยใช้ขา CLK ใช้ในการควบคุมในแต่ละบิต หลังจากส่งข้อมูลเรียบร้อยแล้วจะต้องให้สัญญาณ Toggle Bit ที่ขา STB จำนวน 1 ครั้งเพื่อให้ Chip Register ของบอร์ดรับข้อมูลเพื่อไปแสดงผล ซึ่งการแสดงผลนั้นจะต้องให้สัญญาณลอจิกต่ำที่ขา OE แล้วหน่วงเวลา ในส่วนนี้หากมีการหน่วงเวลามาก ความส่วางของหลอดยิ่งมากขึ้นตามไปด้วย หากต้องการลดความสว่างก็ลดเวลาของส่วนนี้ลงตาม เมื่อหน่วงเวลาเรียบร้อยแล้วจะต้องกลับสถานะของตำแหน่งขา OE เพื่อเปลี่ยนตำแหน่งของ ABCD เพื่อแสดงผลในแถวถัดไปจนครบ ABCD = 1111 แล้ววนกลับมาเริ่มต้นที่ตำแหน่ง ABCD = 0000 ใหม่

รูปที่ 8 ตำแหน่งขาของโมดูลแอลอีดี

รูปที่ 9 วงจรการต่อพอร์ทของ STM32 สำหรับโครงงานนี้

การทำงานของวงจร

เนื่องจากโครงงานนี้ใช้บอร์ด STM32F4 Discovery ที่มีลักษณะเป็นบอร์ดสำเร็จรูปเป็นหัวใจหลัก อันที่จริงแล้วสามารถใช้บอร์ด STM32 เชื่อมต่อกับบอร์ดแอลอีดี P5 ได้เลยโดยตรง แต่ทว่าการเรียงขาของบอร์ด STM32 นั้นไม่สะดวกต่อการใช้งาน ดังนั้นจึงต้องใช้แผ่นวงจรพิมพ์เพื่อต่อขาออกมาเรียงใหม่เพื่อให้สะดวกต่อการใช้งานดังแสดงในรูปที่ 9 การทำงานแรงดันจะเข้าตำแหน่งคอนเน็คเตอร์ (J2) เป็นแรงดันไฟตรงจาก Switching Power Supply ขนาด 5 VDC ผ่านไดโอด D1 (1N4001) เพื่อป้องกันแรงดันย้อนกับมาที่ตัวแหล่งจ่ายสวิตชิ่ง ในกรณีที่มีการต่อ USB จากภายนอกเพราะจะมีแรงดัน 5 โวลต์เข้ามา ดังนั้นจึงจำเป็นต้องมีไดโอดเพื่อป้องกันความเสียหายที่อาจจะเกิขึ้นกับบอร์ด

ภาคการรับสัญญาณเสียงจะอยู่ที่ตำแหน่งคอนเน็คเตอร์ (J3) จะเห็นว่าวงจรมีไม่กี่ตัว คือ R1, R2, C1 และ C2 เท่านั้น ซึ่งจะต่อเป็นวงจร Cupping ของสัญญาณเสียงไปยังตำแหน่งช่องอินพุทแปลงอะสัญญาณนาลอกเป็นดิจิตอลช่อง 0 (ADC0)  และตำแหน่งคอนเน็คเตอร์ J1 จะต่อกับตัวต้านทานปรับค่าได้ค่า 100 กิโลโอห์ม เพื่อใช้ปรับลดระดับความแรงของสัญญาณเสียงที่เข้ามา ในกรณีที่เสียงเข้ามาดังเกินไป

วงจรนี้ผู้เขียนได้การออกแบบเพื่อให้สามารถใช้กับแอลอีดีโมดูลได้ทั้งแบบสีเดียว (Single Color) และแบบหลายสี (Full Color) หากเลือกใช้งานแบบ Single color ใช้ IDC1, IDC2 และหากใช้งานแบบ Full Color เหมือนในโครงงานนี้จะใช้ IDC3 เชื่อมต่อ

ดังที่กล่าวว่าโครงงานใช้โมดูลเป็นแบบ Full Color ข้อดีก็คือ สามารถแสดงจำนวนสีได้ทั้งหมด 7 สีต่อแอลอีดี 1 ดวง ตามหลักของการผสมแม่สี (สีแดง, สีเขียว และสีน้ำเงิน) ซึ่งบอร์ด P5 ที่ใช้นี่มีขนาด 64×32 หลอด (แนวนอน x ความสูง) ต่อกัน 2  โมดูลตามแนวนอน จะได้ความยาว 128 หลอด การต่อใช้งานจะเชื่อมต่อสีของแต่ละหลอดด้วยพอร์ต B โดยจะเชื่อมต่อเข้ากับขา R1, G1, B1, R2, G2 และ B2 และสำหรับขาควบคุมการแสดงผลจะใช้พอร์ต C เพื่อเชื่อมต่อกับขา A, B, C, D, CLOCK, STOBE และ OE (ดังแสดงในรูปที่ 9)

การสั่งให้แอลอีดีแบบ Full Color ติดดับและชนิดของสีจะใช้กำลังงานที่แตกต่างกัน อาทิเช่น ให้หากต้องการให้แอลอีดีติดหมดทุกดวงทุกสีแสงที่ได้จะเป็นสีขาว ซึ่งกรณีนี้จะใช้กระแสไฟประมาณ 7-8 แอมแปร์โดยประมาณ ทั้งนี้ขึ้นอยู่กับอัตราความสว่างของหลแดแอลอีดีด้วย โดยปกติแล้วโมดูลแอลอีดีจะสามารถปรับระดับความสว่างได้ขึ้นอยู่กับค่า Duty Cycle ของการควบคุมการติดของหลอดแอลอีดี และหลายครั้งปัญหาที่เจอเกิดจากสายแพรรที่ใช้ในการเชื่อมต่อระหว่างตัวบอร์ด STM32F4 Discovery กับตัวโมดูล เนื่องจากบอร์ด STM32 นั้นมีความเร็วค่อนข้างสูงจึงค่อนข้างไวต่อสัญญาณรบกวน จึงต้องมีการใช้ตัวป้องกันสัญญาณรบกวนโดยใช้เฟอรไรท์บีสครอบสายแพรดังรูปที่ 10

รูปที่ 10 การครอบสายแพรด้วยเฟอร์ไรท์บีท

รูปที่ 11 ลายวงจรพิมพ์ด้านล่าง (Bottom Layer) ขนาดเท่าแบบ

รูปที่ 12 ตำแหน่งการลงอุปกรณ์ด้านบน (TOP Overlay) 

การประกอบ

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

ถึงแม้ว่าอุปกรณ์จะมีไม่มากแต่การลงอุปกรณ์ก็ควรเริ่มจากตัวที่มีความสูงน้อยที่สุดก่อน โดยเริ่มจากลวดจั๊มก่อนและตามด้วยอุปกรณ์ที่เหลือทั้งหมดจนครบ และให้สังเกตว่าตำแหน่งของบอร์ด STM32F4 Discovery นั้นจะเป็นคอนเน็คเตอร์ด้านละ 64 ขา (2×32)  แต่ในบ้านคอนเน็คเตอร์ขนาด 2×32 อาจจะหายากสักหน่อย ในเครื่องต้นแบบผู้เขียนได้ดัดแปลงโดยการนำคอนเน็คเตอร์ขนาด 2×16 จำนวน 2 ตัวมาต่อกัน เพื่อให้ได้ขนาด 2×32 หลังจากลงอุปกรณ์เรียบร้อยแล้วให้ทำการตรวจสอบความถูกต้องของตำแหน่งอุปกรณ์อีกครั้ง โดยให้ตรวจสอบอุปกรณ์ที่มีขั้วและตำแหน่งขาอีกครั้งหนึ่ง

รูปที่ 13 โปรแกรม STM32 ST Link เพื่อเชื่อมต่อกับบอร์ด

รูปที่ 14 หน้าต่างแสดงการเชื่อมต่อสมบูรณ์

ทดสอบการทำงาน

หลังจากที่ลงอุปกรณ์เรียบร้อยแล้ว ขั้นตอนต่อไปคือ การโปรแกรม Firmware ลงบนบอร์ด STM32F4 Discovery ให้ใช้โปรแกรม STM32 ST Link สำหรับโหลด Firmware (hex) ลงบนบอร์ด ขั้นตอนแรกนำสายคอนเน็คเตอร์เชื่อมต่อระหว่างคอมพิวเตอร์กับบอร์ด เปิดโปรแกรม ST32STLink กดปุ่ม Connect (รูปที่ 13) เพื่อเชื่อมต่อกับบอร์ด หากทำการเชื่อมต่อสมบูรณ์จะแสดงผลดังรูปที่ 14

รูปที่ 15 เรียกไฟล์ .hex สำหรับการโปรแกรม Firmware

รูปที่ 16 Programed and Verify

รูปที่ 17 หน้าจอแสดงผลของ STM32F4 Discovery

ต่อจากนั้นให้ทำการเปิดไฟล์ (hex) ดังรูปที่ 15 ที่จะทำการ Up Load ลงบอร์ด แล้วให้กดปุ่ม Programed and Verify ที่หน้าจอของบอร์ด STM32F4 Discovery จะปรากฏข้อความดังรูป 16 หลังจากโปรแกรมเสร็จแล้ว สามารถถอดคอนเน็คเตอร์ USB  ออกได้เลย

จากนั้นให้นำสัญญาณเสียงต่อเข้ากับตำแหน่งคอนเน็คเตอร์ J3 ขอแนะนำว่าสัญญาณเสียงควรนำสัญญาณจากจุด RCA out หรือ Audio Out ไม่ควรต่อกับตำแหน่งจุดออกของลำโพงของเครื่องขยายเสียงที่มีกำลังวัตถ์สูงๆ เพราะสัญญาณเสียงจะดังมากเกินไป เพราะระดับสัญญาณเสียงทางอินพุตที่เหมาะสมนั้นไม่ควรเกิน 3.3 โวลต์ เพราะหากแรงดันเกินจะให้บอร์ด STM32F4 เกิดความเสียหายได้ ซึ่งบนบอร์ดจะมีโวลลุ่มใช้ปรับลดระดับอินพุตหากสัญญาณเข้ามาแรงเกินไป

รูปที่ 18 การเชื่อมต่อสายทุกส่วนเข้าด้วยกัน

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

สำหรับบอร์ด STM32F4 Discovery สามารถซื้อได้จากตัวแทนจำหน่ายหรือที่บริษัท ETT (http://www.ett.co.th)  และแอลอีดีโมดูลมีหลายบริษัทที่นำเข้ามาจำหน่าย สามารถค้นหาข้อมูลจากอินเตอร์เน็ตได้โดยใช้ “LED Full Color P5” สำหรับค้นหา ซึ่งโครงงานนี้ใช้บอร์ดแอลอีดีรุ่น P5 ขนาด 64×32 พิกเซลจำนวน 2 ชุดต่อกัน

สำหรับแนวทางในการพัฒนา ท่านผู้อ่านอาจจะเพิ่มรูปแบบ เช่น เปลี่ยนสีของการแสดงผลของแถบบาร์หรือเปลี่ยนสีของตัวอักษร เป็นต้น สำหรับตัวโครงงานหากผู้อ่านท่านใดมีข้อสงสัยหรือข้อเสนอเพื่อเป็นแนวความคิดเพื่อพัฒนาต่อ สามารถติดต่อผู้เขียนได้ที่ arampee@jnutthailand.com หรือเข้าไปที่เว็บไซต์ http://www.jnutthailand.com หรือ  Facebook: https://www.facebook.com/arampee.junyai

 

รายการอุปกรณ์

ตัวต้านทานขนาด ¼ วัตถ์ 1 %

R1, R2       10k                                                            2             ตัว

VR1             ตัวต้านทานปรับค่าได้แบบโวลลุ่ม 100k                  1             ตัว

ตัวเก็บประจุ

C1                                     0.68uF 50V โพลีเอสเตอร์                     1             ตัว

C2                                     4.7uF 16V อิเล็กทรอไลต์                      1             ตัว

อุปกรณ์สารกึ่งตัวนำ

D1               1N4001                                             1             ตัว

อื่นๆ

STM1                STM32Discovery Board               1          ตัว

CON1                คอนเน็กเตอร์ 3 ขา                      1          ตัว

CON2, CON3             คอนเน็กเตอร์ 2 ขา                      2          ตัว

CON4 –CON6              คอนเน็กเตอร์ 16 ขา                    3          ตัว

Display1, Display2             LED Full Color P5                   2          ตัว

หมายเหตุ  ซอร์สโค้ดไฟล์ .hex สามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com

 

 

Leave a Comment