生醫工程實驗期末專題 -...

27
1 ⽣醫⼯程實驗期末專題 第四組 B06901038 王⼈出 B06901083 熊政凱 B06901180 鄭謹譯 ㄧ、簡介與動機 漫步於藝⽂中⼼附近常可以發現許多街頭藝⼈,然⽽他們卻需要攜帶 許多樂器才能演奏,倘若遇到⼤型樂器如爵⼠⿎、電⼦琴即會遇到攜帶不 便的問題。另外,試想每個表演者演奏同⼀⾸樂曲,⾵格整體上差異不 ⼤,要如何產⽣更具個⼈特⾊的⾳樂呢?同時,經由上課介紹也可發現⽣ 醫⼯程這個領域對社會⼤眾仍然⼗分陌⽣。於是我們決定將腦波 (EEG)、⼼電訊號(ECG)、肌⾁訊號(EMG)等較為艱澀的⽣理訊號 導⼊平易近⼈的⾳樂,並產⽣與眾不同的⾳樂系統。 ⼆、實驗架構與設計 (ㄧ)整體架構 主要架構圖如下 四個輸⼊為⼿指訊號、腿部肌⾁、⼼跳頻率、腦波訊號。 其中左⼿操控觸控模組,彈奏對應和弦;右⼿指同時使⽤彎曲 模組決定彈奏聲量與彈奏模擬鍵盤決定⾳⾼(似鋼琴);左腿肌⾁ ⼼跳頻率 ⼿指訊號 腦波訊號 腿部肌⾁ EMG 電路 彎曲模組 模擬鍵盤 觸控模組

Transcript of 生醫工程實驗期末專題 -...

Page 1: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

1

⽣醫⼯程實驗期末專題

第四組

B06901038 王⼈出 B06901083 熊政凱 B06901180 鄭謹譯

ㄧ、簡介與動機

漫步於藝⽂中⼼附近常可以發現許多街頭藝⼈,然⽽他們卻需要攜帶

許多樂器才能演奏,倘若遇到⼤型樂器如爵⼠⿎、電⼦琴即會遇到攜帶不

便的問題。另外,試想每個表演者演奏同⼀⾸樂曲,⾵格整體上差異不

⼤,要如何產⽣更具個⼈特⾊的⾳樂呢?同時,經由上課介紹也可發現⽣

醫⼯程這個領域對社會⼤眾仍然⼗分陌⽣。於是我們決定將腦波

(EEG)、⼼電訊號(ECG)、肌⾁訊號(EMG)等較為艱澀的⽣理訊號

導⼊平易近⼈的⾳樂,並產⽣與眾不同的⾳樂系統。

⼆、實驗架構與設計

(ㄧ)整體架構

主要架構圖如下

四個輸⼊為⼿指訊號、腿部肌⾁、⼼跳頻率、腦波訊號。

其中左⼿操控觸控模組,彈奏對應和弦;右⼿指同時使⽤彎曲

模組決定彈奏聲量與彈奏模擬鍵盤決定⾳⾼(似鋼琴);左腿肌⾁

⼼跳頻率

⼿指訊號

腦波訊號

腿部肌⾁

EMG 電路

彎曲模組

模擬鍵盤

觸控模組

Page 2: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

2

訊號控制⿎組;右腿訊號控制踏板(制⾳踏板,踩下即停⽌延⾳效

果)。以上四種機構透過 Arduino 分析處理後透過 Serial 傳⼊

python。

腦波訊號經程式處理後輸⼊ python 作為⾳⾊,⼼跳頻率透過

Z2 Health Watch 分析後輸⼊ python。最後 python 彙整所有訊號後

輸出⾄喇叭即可聽到彈奏聲⾳。

(⼆)使⽤器材

硬體部份

Arduino Uno 觸控模組 彎曲模組 按鍵 Z2 Watch

個數 3 1 5 21 1

圖⽚

另使⽤凝膠貼⽚*2、電阻電容 IC ua741 數個、IC INA128*2、洞洞板等

軟體部分使⽤ pygame.mixer、pySerial、scipy.io.wavfile、numpy.fft。

(三)硬體設計

1. 彎曲模組

彎曲模組 Arduino 5V Arduino GND

Arduino A1-5

將上圖電路之彎曲模組固定在⼿套上如右

圖所⽰,分別在模組兩端焊上兩條⾧線延

伸⾄ Arduino 板,共拉出 10 條線。將五

個電阻電路固定於麵包上即可完成右⼿彎

曲模組電路設計

Page 3: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

3

彎曲模組會隨彎曲程度不同⽽改變⾃⾝電阻⼤⼩,通常為 25kΩ

左右,串連⼀ 27 kΩ 電阻並測量彎曲模組分壓。

2. 模擬鍵盤

將按鈕電路與 LED 焊接上洞洞板,每個琴鍵的電路如下

將電路重複焊接 21 組後即可得三個 8 度⾳之⽩鍵(為簡化省略⿊鍵,

彌補⽅式於程式部分說明)。另設計鍵盤機構側視圖如下⽰意圖:

3. EMG 濾波電路

按鈕 Arduino 5V Arduino GND

Arduino 2-13

LED

當於箭頭位置按下琴鍵

後,會讓琴鍵壓下按鈕形

成通路,使上電路圖 LED

發亮,數位腳位=1。

EMG Signal Differential Amp

Voltage Shifter

60 Hz Notch DC Reject

60 Hz Notch

Voltage Buffer

Amplifier

500Hz LP 40Hz HP

500Hz LP 40Hz HP

EMG Output Voltage Buffer

Page 4: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

4

EMG 信號頻域上分佈⼤約在 100~200Hz 間,交流電電源⼤約 60Hz。

電路實作上,為了得到 EMG 訊號,需經過放⼤並加以濾波,濾除 60Hz

電源供電,⾼頻雜訊以及電⼦元件造成的 DC offset,以下是電路架構。

(1) Differential Amplifier

第⼀級元件對雜訊的引響⾄關重要,因此第⼀級放⼤器,我們使⽤低雜訊

的差動放⼤器將訊號放⼤,使⽤ INA128 來完成。以下為詳細元件內容。

選取 𝑅! = 510𝛺 ± 5%

𝐺 = 1 + "#$"%#

≅ 101

𝑉& = 12𝑉𝑉' = −12𝑉

(2) 60Hz Notch 1

濾交流波,採⽤ Active Twin - T - Notch Filter & 2*UA741

Center Frequency : 60 Hz Feedback : 80

R1 270kΩ

R2 270kΩ

R3 270/2k = 135kΩ

R4 80kΩ

R5 80kΩ

C1 10nF

C2 10nF C3 22.3nF

Page 5: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

5

(3) Amplifier 1

信號經過放⼤

(4) DC Reject Highpass Filter

濾掉 DC offset,使進⼊下級放⼤器不因 offset 過⼤造成放⼤扭曲

UA741

R1 54kΩ

R2 600kΩ

𝐺 = 1 +600𝑘54𝑘

= 12.1

C 100nF

R 1.5MΩ

fcutoff 1.06Hz

Page 6: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

6

(5) 60Hz Notch 2

濾交流波,採⽤ Active Twin - T - Notch Filter & 2*UA741

Center Frequency : 60 Hz Feedback : 80

(6) Voltage Buffer

讓電壓穩定

R1 270kΩ

R2 270kΩ

R3 270/2k = 135kΩ

R4 80kΩ

R5 80kΩ

C1 10nF

C2 10nF C3 22.3nF

UA741

2: input

3: output

6: output

Page 7: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

7

(7) 500 Hz Lowpass Filter 1

⽤以過濾不要的⾼頻雜訊,與接下來的 HP 組成⼀個帶通濾波

(8) 40 Hz Highpass Filter 1

⽤以過濾不要的低頻雜訊,與上⼀級的 LP 組成⼀個帶通濾波

R1 22kΩ

R2 22kΩ

C1 10nF

C2 22.3nF

R1 560kΩ

R2 280kΩ

C1 10nF

C2 10nF

Page 8: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

8

(9) 500 Hz Lowpass Filter 2

過濾不要的⾼頻雜訊,為了將雜訊除乾淨,再做⼀次,同樣與下⼀級 HP

組成帶通濾波器

(10) 40 Hz Highpass Filter 2

濾除低頻雜訊,與上⼀級的 LP 組成⼀個帶通濾波

R1 22kΩ

R2 22kΩ

C1 10nF

C2 22.3nF

R1 560kΩ

R2 280kΩ

C1 10nF

C2 10nF

Page 9: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

9

(11) Voltage Shifter

放⼤電壓並使輸出電壓維持在 1-4 V 供 Arduino 讀值

𝑉& =%((2 + 𝑉)*+) 𝑉,-. = 61 + /.%1

/.%17𝑉& = 2𝑉& = 2 + 𝑉)*+

(12) Voltage Buffer

UA741

R1 9.1MΩ

R2 9.1MΩ

R3 9.1MΩ R4 9.1MΩ

UA741

2: input

3: output

6: output

Page 10: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

10

讓電壓穩定,輸出給 Arduino

(13) Whole Circuit

將上述電路重複ㄧ組即可完成左腳與右腳濾波。

(四)軟體設計

1. Arduino 總共使⽤三塊板⼦,逐⼀說明

(1) Final1,包含彎曲模組與觸控模組

Input:A1-A5 彎曲模組

Input:7 觸控板 scl、2 觸控板 sdo

使⽤網路上觸控模組程式改寫成為

class CTtP229TouchButton,⾒後圖

取得⼀開始的彎曲模組變化量

5 彎曲模組參數

觸控模組 16 鍵數值

Page 11: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

11

class CTtP229TouchButton:

(2) Final2,包含 12 個⾳與左右腳 EMG

Input 2-13 分別代表低⾳ C 到中⾳ G

Input A1-A4 分別代表左右腳 EMG 訊號

先取得迴圈開始時的彎曲模組參數

取得 16 鍵觸控情況

爲減少感應錯誤,將 16 鍵分為 4 個象

限,同象限內任意⼀鍵有值則判斷為

該象限代表和弦被彈奏。

最後透過 Serial.print 傳送資料到 python,即完成左⼿和弦判斷

修改⾃

https://tinyurl.com/umbmj33

Page 12: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

12

每經過 25ms 計算⼀次

彎曲模組數值差距,將

差距值回傳⾄ python,

播放出聲⾳強弱,即完

成右⼿彎曲模組判斷。

透過 Serial.print 傳輸,琴鍵部

分由 0à1 則傳送 p i,i 為編

號,反之 1à0 傳送 r i

Page 13: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

13

(3) Final3,包含 9 個⾳

Input 2-10 分別代表中⾳ A 到⾼⾳ B

程式碼與 Final2 琴鍵部分的程式碼運作原理⼀樣,故省略

透過以上三組 Arduino 即可操控所有彎曲、觸控模組與琴鍵。

2. 主機端軟體架構

(1)主架構

Arduino Serial 中利⽤ pyserial 建⽴與 Arduino 端 COM

port 的連結,接收 Arduino 的訊號並將訊號交給 Event

Control 區塊。

Event Control 區塊分析收到的訊號並做出對應相關動

作,將設定好的聲⾳資訊(指定聲⾳序號、撥放時間、⾳量

等)放⼊ Pay List 中。

Play List 區塊判定聲⾳的撥放時間是否到了,拿聲⾳資

訊查詢 Sound List 得到對應的⾳源,將要撥放的聲⾳撥出。

Sound Library 是指定的聲⾳⾳源庫,在這裡放的是處理

好的腦波⽣成聲⾳,在初始化時利⽤ pygame.mixer 讀⼊,儲

存進 Sound List 預備被撥放。

Sound List 利⽤存放著聲⾳源清單,在 Play List 查詢時

回傳對應的聲⾳檔來撥放。

Main Loop

Arduino Serial Sound library

Input signals Import sounds

Push sound info Lookup sound and play

Sound List Play List Event Control

Page 14: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

14

(2)Event Control 架構

將來源於 Arduino 輸⼊訊號做區分,並⼀⼀進⾏分析。

左右腳踏板對應到 EMG 訊號,分析 EMG 訊號的取樣

標準差,如⼤於上限閾值則可判定腳抬起來,⼩於下限閾值

則判定放下,左腳放下對應⿎組的切換,右腳的踏下則將當

前撥放的聲⾳停⽌,以此做為制⾳踏板,若右腳的抬起則將

當前撥放的聲⾳停⽌,以此做為延⾳踏板。

⼿指彎曲模組搭配了琴鍵,當琴鍵開關被按下時,對彎

曲程度作⼒道分析,以此獲得特定被觸發的⾳⾼和對應⾳

量,將結果匯⼊撥放清單。

觸控模組共有四個按鍵區域,對應四個設定好的和弦,

也可設定⼀⼩節的分解和弦,收到觸控訊號時,查找設定好

的和弦組,將其放⼊ Play List。

(3)操作流程

⾸先,設定⾳源檔,腦波經過處理⽣成特定⾳⾼的聲

⾳,在實例上我們設定從低⾳ Do 到⾼⾳ Ti 共 21 個⾳⾼,

以此搭配琴鍵的 21 個⾳,同時,可以設定每個按鍵分別對應

的⾳⾼,可以去掉未使⽤的⾳來擴增⾳域,除了腦波以外,

也包括⿎的⾳源。

再來,量測⼼率的 BPM 並輸⼊,以此設定每⼩節的節

拍數和快慢。

接著設定和弦組,有同步和弦以及分解和弦兩種模式,

同步和弦可以⽤於簡單的⼀個觸控訊號對應⼀個和弦,分解

和弦則可設定⼀個觸控訊號對應⼀連串的聲⾳在特定的時間

點上撥放。

最後,設定節奏⿎組,在此輸⼊⼀⼩節內會不斷重複的

背景節奏,同時可以輸⼊好幾種節奏,並在之後透過腳的踩

踏來切換。

Page 15: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

15

完成以上的設定流程,就可以透過觸控模組、琴鍵、腳

部踩踏來演奏樂曲。

(4) 軟體實施細則

使⽤ python 來實作(為⽅便閱讀,程式碼截圖不縮排)

⾸先 import 相關的函式庫

建⽴ Arduino 連線

設定節拍,及量測到的⼼率

初始化的按鍵、⼒道、踏板閾值等參數

設定⿎組的⾳源和節奏

設定琴鍵的⾳源

Page 16: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

16

設定和弦

初始化 pygame 以及 pygame.mixer

讀取聲⾳檔

定義將聲⾳資訊放⼊ Play List 的函數

定義 drumGroup 類別⽤來控制節奏和⿎組的撥放

Page 17: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

17

定義 chordGroup ⽤來控制和弦的撥放

初始化類別

進⼊主迴圈的前置動作,設定時間和清空的 Serial 訊號

接著進⼊主迴圈後 進⾏ Event Control 分析處理 Arduino serial 輸⼊訊號

Page 18: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

18

Play List 中的聲⾳查找與撥放

Page 19: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

19

最後是 Event Control 的與時間相關的控制訊號處理

3. 腦波分析(為⽅便閱讀,程式碼截圖不縮排)

聲⾳主要產⽣⽅式:

我們希望可以想辦法把腦波轉成聲⾳信號。我們決定把強度與⾓

度分開處理。

我們把聲⾳分段後,每⼀段都做 fft,並且取他的強度與⾓度,分別存起來。

取兩者的平均之後,將最低頻率的部分過濾,再把他們綜合起來。我們這麼處

理是因為,如果直接將腦波的紊亂的波形播放出來,將會雜亂不堪,⽽且因為

雜訊的⼲擾,這⼀段聲⾳並不能代表⼀個⼈獨特的⾃我。然⽽加起來再平均以

後,我們達成了以下效果:聲⾳因為變得簡單,⽽更具有協調性。⽽且因為

zero mean random variable 平均起來影響會⽐沒有平均前⼩了√n 倍,⼤幅的減

⼩了受到的影響,每個⼈的腦波聽起來也逐漸有了不同。

Page 20: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

20

這個部分在於,把⼀個⼈的腦波在頻率軸上做重複。這麼做的理由很簡單,因

為⼀班的樂器的聲⾳,也會在頻率軸上做重複。我們在這裡是從⼀個叫 coeff 的

mapping,來決定各個頻段的放⼤倍率。

超過的,就補 0

這是這個 object 的 magic method, __call__

我們選擇使⽤這個 method 作為整合⽤的 function。

⾸先,做了 fft 得到⼀個腦波⽐較精練的表⽰式。

然後從外部讀取經過⼿動調整的參數。以表達各個頻段放⼤倍率。在頻率軸上

重複。

然後做完處理後,轉回 time domain,normalize 之後給予 exponential decay,因

為這樣聽起來⽐較像是聲⾳。

把我們事先準備好的腦波數據從外部圖取,並把資料夾準備好,檔名則是與原

本的相互對應。

使⽤剛剛整合⽤的__call__產⽣ data,並儲存成 wav 檔案

Page 21: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

21

有了 wav 檔之後,我們就可以做以下處理:

將⼀段已經選好的聲⾳,調⾼或是降低頻率。

圖形不變,將 t 軸收縮或是伸展,如此⼀來就可以達到調整頻率的效果(想像

sine 波形左右拉開來,頻率就變低了)

這邊僅僅只是做 array initialization,以及 window 的選定。選擇 hanning

window 是因為如果是 hamming window 的話,受到左右兩個端點的影響較⼤,

fft 也會受到⽐較⼤的影響,⽽我們今天⽐較有興趣得是中⼼附近的頻率,因此

採⽤ hanning window。

對每⼀個區段都做:

取左右兩端的頻率,讓他們中間相互重疊也無所謂,因為我們只是希望可以做

⼀個 linear combination 來逼近中間的部分。我們保留左右兩端點的相位差,然

後整個重新調整,以期望可以跟相鄰的區域調和。最後我們直接把調整完的

Page 22: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

22

time domain sequence 加回新的 array 上,⽽這個 array 也可以跟旁邊重疊無所

謂,因為 phase 已經調成⼀樣了,頂多就是相加性⼲涉⽽已。

因為考慮到前⾯有些部分有相加性⼲涉,因此做了 normalization 才 return

前⾯兩個 functions 加起來⼀起⽤,既改變頻率,⼜不改變⾧度。

將 file system 的檔名抓出來後,做以下處理:

1.使⽤ tqdm 監測進度,這部分會進⾏超過 1 個⼩時。

Page 23: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

23

2.⽅便起⾒,新的檔名前部分與原本的檔名⼀樣,只是檔案類型不同。

3.讀取資料

4.將資料的最⼤頻率部分取出,因為這些聲⾳是直接從腦波產⽣的,因此

並沒有⼀個真正的頻率。這⼀步做的就是將它歸類,⽅便我們之後對應

到琴鍵的關係。

5.normalize 頻率以⽅便分類。

6.產⽣並存檔。

三、實驗結果

(⼀)硬體部份

1. 彎曲模組

2. EMG 電路

Page 24: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

24

3. 琴鍵

(⼆)軟體部分

1. 主機操控

先以電腦鍵盤測試每個功能是否正確,分別為踏板、⿎組、

琴鍵、左⼿和弦伴奏、右⼿主旋律彈奏。以下連結為⼩星星

的測試: https://youtu.be/Jd9VUzZKgmk

2. 腦波分析

左圖為分析前,右圖為分析後。由上⽽下為全、𝛼、𝛽、𝛿、𝜃

Page 25: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

25

(三)整合

將腦波分析後輸⼊軟體,結合硬體測試以下基本功能

以下為⽂字圖⽚敘述,圖⽚皆取⾃⽂末連結,可點開聆聽

1. 聲⾳強弱

2. ⿎組

3. 制⾳踏板

可發現波形的波峰有先上升後下降

的趨勢,符合當初彈奏希望的漸強

漸弱。

三根突起為腳踩踏,可⾒

踩完第⼀次後節拍啟動,

第⼆次後⿎組加⼊,第三

次踩下後等待節拍完成後

停⽌,符合期望。

紅線左邊為不斷彈奏同⼀個⾳,可看

⾒振幅衰減較平緩,紅線右邊為踩踏

踏板,衰減較快,此部分較為模糊,

建議聆聽 Demo

Page 26: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

26

4. 右⼿旋律:確實可以彈奏聖誕歌,外婆的澎湖灣等歌曲,由圖

難以呈現,建議聆聽 Demo。

5. 左⼿伴奏

可⾒許多組重複出現的波形,為伴奏和弦,不同組為按不同象

限⽽呈現,最後雜亂的波形為測試同時按很多種所造成。

四、實際表演

Demo 照⽚如下

以下連結為 Demo 影⽚(含上述所有波形圖)

https://www.youtube.com/watch?v=5NHTXkETbDQ

五、未來展望

(⼀)素材⽅⾯的改進

1. 鋼琴鍵盤的製作可藉由雷射切割等技術

2. ⼿套應改為布⼿套並將彎曲模組縫上

3. 模組化及可重複利⽤性

4. 更加⼩巧輕薄,減少製作成本(時間成本&材料成本)

5. 凝膠是否能有替代品

Page 27: 生醫工程實驗期末專題 - 國立臺灣大學cc.ee.ntu.edu.tw/~ultrasound/belab/term_project/108-1/... · 2020. 5. 9. · 另使⽤凝膠貼⽚*2、電阻電容IC ua741數個、IC

27

(⼆)技術上改善

1. Real time 的⼼跳頻率,可由演奏者⾃⾏決定是否變速

2. 腦波分析⽅法模組化

3. 聲⾳品質的提升,⽬前聲⾳有點特別

六、內容分配

(ㄧ)實驗

王⼈出:腦波所有分析、腦波主機整合

熊政凱:主機端軟體、Arduino 主機整合

鄭謹譯:硬體所有焊接設計、Arduino code

(⼆)報告與 Demo 影⽚

王⼈出:腦波所有分析、腦波主機整合、展望

熊政凱:主機端軟體、Arduino 主機整合、動機

鄭謹譯:硬體所有焊接設計、Arduino code、影⽚剪輯、報告統整

七、參考資料

彎曲模組:http://yehnan.blogspot.com/2013/09/arduinoflexbend-sensor.html

觸控模組:http://itimewaste.blogspot.com/2014/12/arduino-code-for-ttp229-touch-

16-button.html

Pygame:https://www.pygame.org/news

PySerial:

https://swf.com.tw/?p=1188&fbclid=IwAR3SNF1GHxuNqiRGS5tVEUP

8Y3r2maF5xNZQ28q6VnUsCSEW6FsABvdgpek

Standard Deviation:

https://stackoverflow.com/questions/15389768/standard-deviation-of-a-

list?fbclid=IwAR15BDWC2BJjJRVat-810-

sSJc8Af1g4tkQNOOIAzGW0G0rblA3aVhXqrgA

LibROSA:https://librosa.github.io/librosa/

SciPy.org:https://scipy.org/