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? - จะได้เรียนรู้อะไร

  1. White Noise Generation: สร้าง random noise ด้วย rand() และเข้าใจคุณสมบัติ

  2. Gaussian-like Noise: สร้าง noise แบบ Gaussian ด้วยเทคนิค Central Limit Theorem

  3. SNR Concept: ทำความเข้าใจ Signal-to-Noise Ratio ทั้งแบบ Linear และ dB

  4. Signal + Noise Visualization: แสดงสัญญาณ Clean กับ Noisy แยกหรือซ้อนกัน

  5. RMS Calculation: วัดค่า RMS ของ Noise สำหรับคำนวณ SNR

How? - จะทำอย่างไร

  1. สร้าง Sine wave เป็นสัญญาณ Clean

  2. สร้าง White noise ด้วย rand()

  3. รวม Clean + Noise แล้วแสดงผลบน Chart

  4. เพิ่ม Slider ปรับระดับ Noise (ควบคุม SNR)

  5. แสดงค่า SNR แบบ real-time


2. หลักการทำงานและ Flowchart

2.1 White Noise Characteristics

2.2 RMS Calculation


3. ฟังก์ชันสำคัญ

3.1 Noise Generation

Function
Description
Algorithm

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

Function
Description

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

Was this helpful?