Noise Generator
Lab 2: Noise Generator
Part 3 - Oscilloscope & Signal Processing
1. โครงสร้างภาพรวมของ Lab
Why? - ทำไมต้องเรียนรู้เรื่องนี้
Real-World Signals: สัญญาณจริงในทุกระบบมี Noise ปนเสมอ ไม่ว่าจะเป็นสาย Power, Sensor Reading หรือ Communication Channel
Signal-to-Noise Ratio (SNR): SNR เป็น metric สำคัญที่สุดในวิศวกรรมไฟฟ้า ใช้วัดคุณภาพสัญญาณในระบบ Power, Audio และ Communications
Filter Design Foundation: การเข้าใจ Noise เป็นพื้นฐานสำหรับการออกแบบ Filter ทั้ง Hardware (RC, LC) และ Software (Moving Average, FIR, IIR)
EE Application: ในระบบ Power Quality ต้องแยก Fundamental (50Hz) ออกจาก Noise, ใน Sensor System ต้องกรอง EMI Noise ออกจากข้อมูล
What? - จะได้เรียนรู้อะไร
White Noise Generation: สร้าง random noise ด้วย
rand()และเข้าใจคุณสมบัติGaussian-like Noise: สร้าง noise แบบ Gaussian ด้วยเทคนิค Central Limit Theorem
SNR Concept: ทำความเข้าใจ Signal-to-Noise Ratio ทั้งแบบ Linear และ dB
Signal + Noise Visualization: แสดงสัญญาณ Clean กับ Noisy แยกหรือซ้อนกัน
RMS Calculation: วัดค่า RMS ของ Noise สำหรับคำนวณ SNR
How? - จะทำอย่างไร
สร้าง Sine wave เป็นสัญญาณ Clean
สร้าง White noise ด้วย
rand()รวม Clean + Noise แล้วแสดงผลบน Chart
เพิ่ม Slider ปรับระดับ Noise (ควบคุม SNR)
แสดงค่า SNR แบบ real-time

2. หลักการทำงานและ Flowchart
2.1 White Noise Characteristics
2.2 RMS Calculation
3. ฟังก์ชันสำคัญ
3.1 Noise Generation
generate_white_noise()
Uniform random noise
rand() % (2*amp+1) - amp
generate_gaussian_noise()
Gaussian-like noise
เฉลี่ย 12 ค่า rand() (CLT)
calc_rms()
คำนวณ RMS
sqrt(mean(x^2))
calc_snr_db()
คำนวณ SNR (dB)
20*log10(rms_signal/rms_noise)
3.2 LVGL Timer API
lv_timer_create(cb, period_ms, data)
สร้าง timer สำหรับ real-time update
lv_timer_pause(timer)
หยุด timer ชั่วคราว
lv_timer_resume(timer)
กลับมาทำงานต่อ
4. Code เต็ม
4.1 Constants and Global Variables
4.2 Noise Generation Functions
4.3 RMS and SNR Calculation
4.4 Chart Update Function
4.5 Timer and Event Callbacks
4.6 Main Function
5. องค์ความรู้และเทคนิค
5.1 Pseudo-Random Number Generator (PRNG)
5.2 Central Limit Theorem สำหรับ Gaussian Noise
5.3 SNR in Decibels
5.4 Start/Stop Pattern สำหรับ Real-time Display
6. แบบฝึกหัด
Exercise 1: Adjustable SNR Display (ปรับ SNR ด้วย Slider)
โจทย์: แก้ไขให้ Slider แสดงเป็น SNR (dB) โดยตรงแทนที่จะเป็น Noise Level
Slider ช่วง 0-60 dB
คำนวณ noise_amplitude จาก SNR ที่ต้องการ:
noise_amp = signal_amp / 10^(SNR_dB/20)เมื่อ SNR = 0 dB, noise amplitude = signal amplitude
เมื่อ SNR = 60 dB, noise amplitude ต่ำมาก (เกือบ clean)
แสดง color indicator: Green (>30dB), Yellow (10-30dB), Red (<10dB)
คำใบ้:
Exercise 2: Moving Average Filter (ตัว Filter พื้นฐาน)
โจทย์: เพิ่ม Moving Average Filter เพื่อลด noise และแสดงผลลัพธ์
เพิ่ม series ที่ 3 (สีฟ้า) สำหรับสัญญาณที่ผ่าน filter
ใช้ Moving Average ขนาด N (เลือกจาก dropdown: 3, 5, 7, 11, 15)
แสดง SNR ก่อนและหลัง filter เปรียบเทียบ
สังเกตว่า filter ทำให้สัญญาณ delay และสูญเสีย high-frequency
คำใบ้:
7. References
Last updated