Skip to content
This repository has been archived by the owner on Aug 24, 2024. It is now read-only.

Latest commit

 

History

History
39 lines (27 loc) · 3 KB

README.md

File metadata and controls

39 lines (27 loc) · 3 KB

2024毫米波AI競賽

主題: Otamatone實作

成員:

  • 陳奕羱
  • 張簡雲翔
  • 劉德權
  • 王駿彥

摘要

Otamatone是一種外型類似八分音符的電子樂器,其結構分為尾巴和嘴巴兩部分。尾巴控制音高,操作方式類似弦樂器,手指的位置決定音高;嘴巴則負責發聲。與傳統弦樂器相比,Otamatone操作更簡單,只需注意一根“弦”即可,不需承受按壓弦的疼痛。其設計輕便,不需共鳴箱或拾音器,因此攜帶方便。然而,Otamatone售價較高,且音色單一。為了解決這些問題,我們計劃設計一個僅具指壓功能的Otamatone,供初學者練習手指按位。

實作方法

先將毫米波雷達套件固定在任一長度約十五公分左右的桿子上上,並垂直於桿子,在毫米波雷達套件前方繪製一個軌道,模擬Otamatone的尾巴結構,將其均分成九段,其中前面七段分別代表Do、Re、Mi、Fa、So、La、Si這七個基本音符,最後兩段則是音量變大及音量變小(圖一)。

透過前項已經設定好的裝置以及相關軟體,用手分別在Otamatone軌道區域的按下不同位置並讓毫米波雷達套件來偵測距離後,收集毫米波雷達套件所讀取到的資料並且標註對應的label,待收集一定程度的資料量後,透過這些資料作為資料集,訓練一個機器學習的模型,用來判斷目前手所放的的高度是甚麼樣的音高。

最後藉由pygame這個模組來呼叫windows的合成器來發出聲音,並使用GUI介面來調整我們所想要發出的音色。 alt text

資料集

資料收集

透過官方提供的Collect_RDI軟體裡面的pre define的mode,設定固定frame是動作標記,並設定10個frames為固定間隔,由於硬體效能的限制導致資料前處理過久,所以總共收集的frame數量僅為190個,且為經過Fourier Transform後的資料。

資料前處理

原始資料共有190個frames並有多個label分別如下:0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0,label 0 表示沒有動作;label 1~7 由低到高分別為Do Re Mi Fa So La Si;label 8代表聲音上調;label 9代表聲音下調。

為了後續訓練分辨,所以需要把各個label的資料從單一資料分割出來,我們使用移動window的方式一個一個去掃描切割,window size 設為12,只有window目前開頭為有標記label的開頭,才標記為該label,其他的則視為label 0,為避免資料產生極大的偏態,所以訓練時只有隨機選取與其他label一樣量的label 0。

資料分割

我們合計收集307筆的資料,作為我們資料集,每筆資料裡面都有10種label,並將其切成三份作為training set、validation set、test set,其中192筆為training set,占全部的64%;49筆為validation set,占全部的16%;62筆為test set,占全部的20%。

簡介

所需的模組

請參考KKT_Module/requirements.txt。

程式執行

執行MP.py 即可出現GUI介面。