數位通訊流程圖

 

類比訊號轉數位訊號:

[Analog Signal]

[Anti-Aliasing Filter] (低通濾波器,如 Bessel, Butterworth)

[Sampling] (44.1kHz for audio, 8kHz PCM voice, etc.)

[Quantization] (8-bit, 16-bit uniform/non-uniform)

[Encoding] (PCM, ADPCM)

[Digital Data] (bit stream)

發射端

Source Coding] (Huffman, LZW, JPEG, MP3, H.264)

[Channel Coding] (Hamming, Convolutional, Turbo, LDPC)

[Modulation] (BPSK, QPSK, 16QAM, 64QAM, FSK)

[Digital-to-Analog Conversion] (DAC, e.g. 14-bit DAC)

[Upconversion to RF/IF] (Mixer + LO, e.g. 2.4 GHz, 5 GHz)

[Wireless Channel] (AWGN, Rayleigh Fading, Rician Fading, Multipath)

接收端

[Downconversion to Baseband] (Mixer + LO, RF → IF → Baseband)

[Analog-to-Digital Conversion] (ADC, e.g. 12-bit, 100 MSPS)

[Demodulation] (BPSK, QPSK, QAM demodulator with LLR output)

[Channel Decoding] (Viterbi for convolutional, belief propagation for LDPC)

[Source Decoding] (Inverse Huffman, inverse JPEG/MP3/H.264)

[Digital Data]

接收數位轉類比

[Decoding] (PCM decoding)

[D/A Conversion] (e.g. audio DAC, video DAC)

[Reconstruction Filter] (Low-pass filter)

[Analog Output Signal] (e.g. speaker, display, sensor actuator)

OpenWrt CI/CD 做法

OpenWrt 支援 CI/CD(持續整合 / 持續部署)通常是為了自動化以下幾個流程:

  1. 自動編譯 firmware(例如針對特定開發板自動打包 .bin)

  2. 自動測試 kernel module、網路套件或客製化應用(例如 LuCI plugin)

  3. 自動部署 firmware / 套件到測試設備或模擬器(如 QEMU)

  4. 自動推送至 OTA server 或映像檔分發系統(如 sysupgrade 伺服器)


一、CI/CD 支援架構概觀

以下是典型的 OpenWrt CI/CD 流程架構:

[ Git Repo (GitHub/GitLab) ]
↓ push / merge
[ CI/CD Runner (GitHub Actions / GitLab CI / Jenkins / Drone) ]
↓ build
[ OpenWrt SDK or full buildroot ]
↓ output
[ .bin, .ipk, rootfs... ]
↓ (optional)
[ Deploy: flash to test device / push to server ]

二、實作範例:GitHub Actions 自動編譯 OpenWrt

# .github/workflows/build-openwrt.yml
name: Build OpenWrt

on:
push:
branches: [ main ]

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Clone OpenWrt
uses: actions/checkout@v2

- name: Install dependencies
run: |
sudo apt update
sudo apt install -y build-essential libncurses5-dev gawk git gettext unzip file libssl-dev wget python3

- name: Download feeds
run: |
./scripts/feeds update -a
./scripts/feeds install -a

- name: Configure
run: make defconfig

- name: Build
run: make -j$(nproc)

- name: Upload firmware
uses: actions/upload-artifact@v3
with:
name: openwrt-firmware
path: bin/targets


三、常見組合與工具建議

項目 工具選擇 說明
Git Repo GitHub / GitLab 原始碼託管
CI Engine GitHub Actions / GitLab CI / Jenkins / Drone 自動化執行
編譯工具 OpenWrt SDK / buildroot 可使用 openwrt-sdk-*.tar.xz
測試工具 QEMU / pytest + ssh / netperf 自動測試 firmware
OTA 部署 sysupgrade + scp / HTTP OTA Server 自動部署映像檔

四、自動化測試範例(SSH login test)

- name: Deploy to QEMU
run: |
qemu-system-mips -M malta -kernel openwrt.bin \
-nographic -append "console=ttyS0" \
-net nic -net user,hostfwd=tcp::2222-:22 &

- name: Wait and run test
run: |
sleep 60
ssh -p 2222 root@localhost “uci get network.lan.ipaddr”

IT++

IT++ 是一個以 C++ 撰寫的數值計算函式庫(numerical computation library),主要用途是開發與模擬 通訊系統(特別是無線通訊) 的相關演算法。

網址在:

https://itpp.sourceforge.net/4.3.1/


🔧 IT++ 是什麼?

  • 類似 MATLAB 的 C++ 函式庫

  • 專為信號處理、通訊、統計與數值運算設計

  • 主要特色包括:

    • 矩陣與向量運算

    • 隨機數生成器

    • FFT、濾波器設計

    • 信道模型(Rayleigh、AWGN、Rician 等)

    • 編碼(Convolutional、LDPC、Turbo 等)

    • 調變(BPSK, QAM, OFDM 等)


🧪 常見使用場景

  • 無線通訊系統模擬(如 4G/5G PHY 層)

  • 錯誤更正碼測試

  • 學術研究與論文模擬(很多 IEEE 論文都有使用 IT++)


💻 支援平台與開發環境

  • 作業系統

    • Linux(最推薦)

    • Windows(使用 Cygwin 或 MinGW)

    • macOS(但使用者較少)

  • 開發語言

    • C++(主程式)

    • 可以與 MATLAB 或 Octave 整合(做前處理/後處理)

  • 建置系統

    • Autotools(./configure && make && make install

    • CMake(非官方,但有人自己 port)

  • 依賴函式庫

    • LAPACK / BLAS(做矩陣運算加速)

    • FFTW(做快速傅立葉轉換)

 

 

OpwnWrt

OpenWrt是適用於嵌入式裝置的一個Linux發行版,主要是用於WiFi Router的軟體。

Open source的網址在:

https://openwrt.org/

並且支援CI/CD

大致架構如下:


大致用到的元件如下:

層級 元件名稱 功能說明
使用者應用 LuCI Web 管理介面(用 UBUS 呼叫後端)
使用者應用 Dropbear SSH 登入服務
使用者應用 UCI CLI 用指令操作設定檔(像 /etc/config/network)
系統管理層 procd OpenWrt 的 init system,替代傳統 init
系統管理層 netifd 控制 WAN/LAN/Wi-Fi 介面連線與狀態
系統管理層 ubus 提供 IPC(進程間通訊),如 ubus call network.interface.lan status
系統管理層 ubox / logd 提供系統日誌服務
設定層 UCI Unified Configuration Interface,統一讀寫 config 格式
Linux Kernel netfilter 防火牆(iptables/nftables)
Linux Kernel kernel modules 各式驅動,例如 mt76, ath9k, usb-net
硬體層 SoC / Wi-Fi 像 MT7621, QCA9531 等嵌入式平台

 


目前市面上有一些WiFi Router主機,可以支援OpenWrt自行compile並燒錄,我用的是 Banana Pi One,是 MTK系列的晶片,規格如下:

SoC: MediaTek MT7981B (Filogic 820) SoC
内存: 1GB DDR4
闪存: 16MB SPI NOR, 128MB SPI NAND
网络接口: 1 x 2.5GbE RJ45 port, 1 x Gigabit Ethernet RJ45 port
Wi-Fi: Dual-band WiFI 6 via MediaTek MT7976C (2×2 2.4 GHz + 3×3/2×2 + zero-wait DFS 5Ghz)
USB: 1x USB 2.0 Type-A host port, USB Type-C (device, console) port using Holtek HT42B534-2 UART to USB chip
操作系统: OpenWRT

樹莓派

樹莓派(英語:Raspberry Pi)英國樹莓派基金會開發的微型單板電腦,樹莓派系列電腦每一代均使用博通(Broadcom)出產的ARM架構處理器,如今生產的機型(樹莓派5)主記憶體在4GB和8GB之間,以TF卡作爲系統儲存媒體,配備USB介面和HDMI的影片輸出(支援聲音輸出),內建Ethernet/WLAN/Bluetooth網路鏈結的方式。

Raspberry Pi OS是官方推出的作業系統,適用於所有型號的樹莓派。

 

目前我所用的就是樹莓派5。

GNU Radio

GNU Radio是一個自由軟體開發工具包,提供實現軟體無線電訊號處理的訊號處理模組系統。 它可以與外部RF硬體一起使用來發送軟體無線電,或者在沒有硬體的情況下於模擬環境運行。是由Python 和 C++ 混合開發的軟體,也可以自行修改相關的程式以符合需求。

 

GNU Radio Companion是用於開發GNU Radio應用程式的圖形UI 。可以用拉方塊的方式,來實現通訊或是DSP的流程,如下: