µRock
⾃自我介紹
• 本名:楊宗凡
• 綽號:浪打、sonicyang
• 來⾃自:成⼤大電機⼆二年級
• 成⼤大C4Labs成員
• sonicyang.me
• github.com/sonicyang
Microcontroller
ARM Cortex M4F
ARMv7 180 Mhz FPU SIMD
IEEE

754
1010001010101
1010001010
10100010101011001
01010101
1010001010101
10100010101100101
FirmwaresThe fundamental of Everything
ARM
DSP Library
FatFs
Library
STM32F429
CMSIS
STM32 Cube
FreeRTOS
DSP Library FATFS uGFX
f(x) d(x) g(x)X = ADCf(x) g(x)
Analog Digital Converter
DAC F(x)g(x)
Digital Analog Converter
Let’s say it’s 3 bits
Data Pipe
ADC
DAC
Buffer
(12bits unsigned)
Q12.20
(Fix-Point Signed)
Effect 1
(Configurable)
Effect 2
(Configurable)
Effect 3
(Configurable)
Effect 4
(Configurable)
Wave Audio
(SD Card)
Q12.20
(Fix-Point Signed)
Buffer
(12bits unsigned)
Q NumbersIEEE 754
加法
6.25
3.125+———————
9.375
0110.010
0011.001+————————
1001.011
乘法
6.25
3.125✕—————————————————
19.53125
00110.010
00011.001✕————————————————————————————
10011.100010
同理⼀一共6位⼤大家都知道是五位⼩小數
010
過多的要捨去
保留MSB
SIMD
BA
✕ ✕HIGH LOW
-
Result
BranchesFunctions
The Aid of Python
• 內建⼤大數
• 無浮點誤差
• Matplotlib
Distortion & Overdrive
• Distortion是⽤用 If 或是飽和來 Clip
• Overdrive是再把結果
乘上Sine函數來圓滑
Saturation Arithmetic
• Distortion除了⽤用判斷的Clip還可以⽤用飽和運算達成
• ⼀一般 Signed 16bits 運算
• 16384 * 2 > 32767 所以會是 - 32768
• 飽和 Signed 16bits 運算
• 16384 * 2 > 32767 會鎖在 32767
Compressor
Input
Output
Level Relationship
Time
Level
聽不到
Audio Signal
聽的到惹!
Compressor
• 使⽤用Envolope來偵測聲⾳音
⼤大⼩小,也就是計算RMS
• 超過額定⼤大⼩小就壓縮⼀一定
⽐比例
• 漸進壓縮
Delay & Reverb
• 500 ms進⼊入實⽤用範圍
• 由於內部的記憶體不夠⼤大,所以使⽤用外部的記憶體
• 外部 I/O 成為速度瓶頸
Data (t) In Data (t) Out+
Data (t - 1) Data (t - 2) Data (t - 3)
EQ
• IIR 濾波器
• MATLAB設計、DSP Library實作
Data (t) In Data (t) Out
High
Mid
Low
Gain
Gain
Gain
IIR濾波器
• 離散系統下⾯面,
等校於類⽐比濾波器設計
• 將不同Delay後的資料,
衰減後疊加達到濾波的效果
IN OUT+
Delay
Delay
Wave
錄⾳音、回放、伴奏功能
uGfx based UI
Live Demo
Further Information
Github : github.com/sonicyang/urock
Hackpad : uRock.hackpad.com
Thank You for Listening
任何問題歡迎提出

uRock @ SITCON 2015