鍵奏樂系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn))
簡介這份PDF是2023年全國大學(xué)生電子設(shè)計(jì)競(jìng)賽高職高專組K題「辨音識(shí)鍵奏樂系統(tǒng)」的完整賽題文檔面向備賽的??婆c本科參賽隊(duì)及指導(dǎo)教師幫助讀者快速掌握題目任務(wù)、技術(shù)指標(biāo)與評(píng)分細(xì)則。資源包僅含1個(gè)PDF文件大小約233KB內(nèi)容涵蓋任務(wù)描述、基本要求與發(fā)揮部分、說明規(guī)則及評(píng)分標(biāo)準(zhǔn)并附有系統(tǒng)構(gòu)成示意圖與敲擊聲特征分析、水量對(duì)敲擊聲影響等理論考點(diǎn)提示。已有813人學(xué)習(xí)下載適合用于賽前研讀與方案論證。讀者可據(jù)此明確拾音識(shí)別、杯號(hào)顯示與音高發(fā)聲的實(shí)現(xiàn)路徑理清注水量控制、打亂排序識(shí)別等關(guān)鍵測(cè)試環(huán)節(jié)并對(duì)照120分評(píng)分表分配硬件選型、信號(hào)處理電路與測(cè)控程序的設(shè)計(jì)重點(diǎn)是組隊(duì)備賽階段梳理思路、查漏補(bǔ)缺的實(shí)用參考資料。1. 從一只水杯的敲擊聲說起這套辨音識(shí)鍵系統(tǒng)到底要解決什么敲一下杯子系統(tǒng)要知道你敲的是哪一只還要立刻發(fā)出對(duì)應(yīng)的音高——聽起來像個(gè)小把戲真做起來卻是一整套信號(hào)鏈路的硬仗。2023 年全國大學(xué)生電子設(shè)計(jì)競(jìng)賽高職高專組 K 題「辨音識(shí)鍵奏樂系統(tǒng)」考的就是這件事5 只外觀完全相同的無柄玻璃杯當(dāng)琴鍵一根實(shí)心敲擊棒一臺(tái)識(shí)別控制器負(fù)責(zé)拾音、分析識(shí)別、顯示和發(fā)聲。杯子不能做任何標(biāo)記測(cè)試時(shí)隨機(jī)擺放還要往杯里注不同容量的水改變音高再打亂 8 只杯子的順序讓你認(rèn)回原來的編號(hào)。這套方案適合兩類人正在準(zhǔn)備電子設(shè)計(jì)競(jìng)賽、需要一份能直接照著搭的系統(tǒng)方案的學(xué)生以及要做聲音識(shí)別類課程設(shè)計(jì)、想搞清楚「從拾音到判決」完整鏈路的從業(yè)者。它真正難的不是寫代碼而是把「敲擊聲這種瞬態(tài)、短促、帶強(qiáng)噪聲的信號(hào)」變成穩(wěn)定可復(fù)現(xiàn)的特征再在 90 秒內(nèi)完成學(xué)習(xí)加識(shí)別。下面按需求、總體設(shè)計(jì)、算法實(shí)現(xiàn)、硬件與交互、避坑、驗(yàn)收六塊拆開講每一塊都落到能抄的參數(shù)和代碼。2. 需求拆解與技術(shù)選型為什么不能只靠一個(gè)頻率值2.1 把題目要求翻譯成可量化的指標(biāo)題目文字很長但真正約束設(shè)計(jì)的只有幾條硬指標(biāo)先把它們抽出來后面所有設(shè)計(jì)都圍著這張表轉(zhuǎn)。指標(biāo)項(xiàng)題目要求工程化解讀識(shí)別對(duì)象5 只空杯 3 只注水杯共 8 只類別數(shù) 8其中 5 類為有效琴鍵3 類判為 0學(xué)習(xí)時(shí)間基本部分 ≤90s發(fā)揮部分 ≤120s每只杯子學(xué)習(xí)窗口約 10~15s夠敲 3 次取平均單杯敲擊次數(shù)3s 內(nèi)不超過 3 次單次敲擊必須獨(dú)立成幀不能依賴多次累積水量差發(fā)揮部分各杯水量差 ≥20ml20ml 在 180~220ml 杯體上引起的頻率偏移必須可分辨演奏時(shí)長自動(dòng)演奏 ≤15s曲譜預(yù)存發(fā)聲與識(shí)別解耦顯示敲擊同時(shí)顯示杯號(hào)識(shí)別延遲要壓到人感覺「同步」的量級(jí)20ml 這個(gè)數(shù)字是整個(gè)方案的分水嶺。杯體容量 180~220ml20ml 大約是十分之一對(duì)應(yīng)基頻偏移通常在幾十赫茲量級(jí)而敲擊聲的頻譜又寬又臟單看一個(gè) FFT 峰值根本壓不住。這就是為什么很多隊(duì)伍第一版方案「實(shí)驗(yàn)室能跑、測(cè)試就翻車」——他們只做了一個(gè)峰值檢測(cè)。2.2 傳感器與主控的選型邏輯拾音環(huán)節(jié)有兩個(gè)現(xiàn)實(shí)選擇駐極體麥克風(fēng)加運(yùn)放或者數(shù)字 MEMS 麥克風(fēng)。前者便宜、增益可調(diào)但需要自己設(shè)計(jì)偏置和濾波后者直接出 I2S 或 PDM 數(shù)字流省掉模擬前端抗干擾更好。我一般會(huì)選數(shù)字 MEMS 麥克風(fēng)理由是敲擊聲是寬帶瞬態(tài)模擬鏈路一旦被電源噪聲污染后面算法再強(qiáng)也救不回來這是血淚經(jīng)驗(yàn)。主控方面需要同時(shí)做 ADC 采樣、FFT、顯示驅(qū)動(dòng)和音頻播放普通 8 位單片機(jī)吃不消。常見做法是選帶 FPU 和 DSP 指令的 32 位 MCU主頻 100MHz 以上片上 RAM 不小于 128KB能放下 2048 點(diǎn)浮點(diǎn) FFT 的中間結(jié)果。發(fā)聲可以走片上 DAC 或 PWM 加低通音色不要求夠用就行。顯示用 OLED 或數(shù)碼管均可杯號(hào)只有 0~5一位數(shù)碼管都?jí)虻珵榱苏{(diào)試方便建議上 OLED能把特征值一起打出來。提示選型階段就把「采樣率」定死。敲擊聲的有效能量集中在 200Hz~4kHz按奈奎斯特定理采樣率取 16kHz 足夠留余量到 20kHz 也行但別盲目上 48kHz——數(shù)據(jù)量翻倍FFT 點(diǎn)數(shù)跟著漲實(shí)時(shí)性立刻吃緊。2.3 識(shí)別策略的取舍模板匹配還是分類器三條路線擺在這純頻率峰值、頻譜模板匹配、輕量分類器。純峰值最省事但注水后杯子的諧振峰會(huì)發(fā)生偏移且可能出現(xiàn)多個(gè)峰魯棒性最差。分類器比如簡單的 KNN 或小型神經(jīng)網(wǎng)絡(luò)精度高但需要大量樣本賽場(chǎng)上只有 3 次敲擊的學(xué)習(xí)機(jī)會(huì)樣本量根本不夠訓(xùn)練。折中方案是頻譜模板匹配學(xué)習(xí)階段對(duì)每只杯子敲 3 次取平均得到一條參考頻譜模板識(shí)別階段把新敲擊的頻譜和 8 條模板逐一算距離取最小者。這個(gè)方案樣本需求低、可解釋、現(xiàn)場(chǎng)可調(diào)是這類限時(shí)賽題里最穩(wěn)的選擇。下面所有實(shí)現(xiàn)都基于這條路線。3. 總體架構(gòu)設(shè)計(jì)一條從拾音到發(fā)聲的完整信號(hào)鏈3.1 四層結(jié)構(gòu)與模塊職責(zé)劃分整個(gè)系統(tǒng)按信號(hào)流向分成四層每層職責(zé)單一接口清晰方便分人并行開發(fā)。第一層是采集層MEMS 麥克風(fēng) I2S 接口固定 16kHz 采樣、16 位量化用 DMA 雙緩沖把數(shù)據(jù)搬進(jìn)內(nèi)存保證不丟幀。第二層是特征層對(duì)每幀做加窗、FFT、幅度譜計(jì)算再歸一化輸出一條定長特征向量。第三層是判決層維護(hù) 8 條模板算距離出杯號(hào)。第四層是交互層按鍵觸發(fā)學(xué)習(xí)/識(shí)別模式OLED 顯示杯號(hào)DAC 播放對(duì)應(yīng)音高。層與層之間只傳數(shù)據(jù)不傳狀態(tài)這樣調(diào)試時(shí)可以把任意一層單獨(dú)拿出來用串口打印驗(yàn)證。我見過太多隊(duì)伍把 FFT 和判決寫在一個(gè)大循環(huán)里出了問題根本不知道是采樣丟了還是距離算錯(cuò)了黑匣子一樣。3.2 數(shù)據(jù)流與時(shí)序預(yù)算一次完整識(shí)別的時(shí)間預(yù)算必須提前算清楚否則 90 秒的時(shí)限會(huì)在最后關(guān)頭卡死你。// 單次識(shí)別時(shí)序預(yù)算單位ms #define T_FRAME 64 // 一幀 1024 點(diǎn) 16kHz #define T_FFT 8 // 1024 點(diǎn)浮點(diǎn) FFT #define T_FEATURE 2 // 幅度譜歸一化 #define T_MATCH 1 // 8 條模板距離計(jì)算 #define T_DISPLAY 5 // OLED 刷新 #define T_SOUND 20 // 發(fā)聲啟動(dòng) // 合計(jì)約 100ms遠(yuǎn)小于 3s 內(nèi) 3 次敲擊的間隔要求這段預(yù)算的意義在于只要單次識(shí)別控制在 100ms 量級(jí)隊(duì)員在 3 秒內(nèi)敲 3 次系統(tǒng)每次都能獨(dú)立完成一幀判決不會(huì)出現(xiàn)「上一次還沒算完、下一次已經(jīng)敲了」的丟幀。學(xué)習(xí)階段每只杯子敲 3 次、每次間隔 1 秒5 只杯子加切換時(shí)間穩(wěn)穩(wěn)落在 90 秒內(nèi)。參數(shù)上唯一要盯的是幀長1024 點(diǎn)在 16kHz 下是 64ms對(duì)敲擊這種瞬態(tài)信號(hào)偏長實(shí)際實(shí)現(xiàn)建議用 512 點(diǎn)32ms加 50% 重疊兼顧頻率分辨率和時(shí)間定位。3.3 學(xué)習(xí)與識(shí)別兩種模式的切換設(shè)計(jì)系統(tǒng)只有兩個(gè)狀態(tài)學(xué)習(xí)態(tài)和識(shí)別態(tài)用一個(gè)按鍵循環(huán)切換OLED 上明確顯示當(dāng)前狀態(tài)和已學(xué)杯數(shù)。學(xué)習(xí)態(tài)下每檢測(cè)到一次有效敲擊就把特征存入對(duì)應(yīng)杯號(hào)的緩沖區(qū)攢夠 3 次求平均生成模板識(shí)別態(tài)下每次敲擊都走匹配流程并顯示結(jié)果。這里有個(gè)容易被忽略的細(xì)節(jié)學(xué)習(xí)態(tài)必須知道「這次敲的是幾號(hào)杯」。基本部分杯號(hào)就是位置號(hào)隊(duì)員按 1、3、5 順序敲系統(tǒng)按順序綁定即可發(fā)揮部分杯號(hào)是杯底編號(hào)需要隊(duì)員先告訴系統(tǒng)當(dāng)前敲的是哪只。通常的做法是學(xué)習(xí)態(tài)下用兩個(gè)按鍵一個(gè)選杯號(hào)一個(gè)確認(rèn)錄入避免順序錯(cuò)亂導(dǎo)致模板和杯號(hào)對(duì)不上——這種錯(cuò)一旦發(fā)生后面所有識(shí)別結(jié)果全反排查起來極其痛苦。4. 核心算法實(shí)現(xiàn)從瞬態(tài)敲擊聲到穩(wěn)定特征向量4.1 敲擊檢測(cè)先解決「什么時(shí)候開始算」敲擊聲是突發(fā)信號(hào)不能對(duì)整段錄音無腦做 FFT必須先做事件檢測(cè)。最直接的辦法是短時(shí)能量加閾值計(jì)算每幀能量超過自適應(yīng)閾值且比前一幀有明顯躍升判定為敲擊起點(diǎn)。import numpy as np def detect_hit(frame, noise_floor, ratio6.0): 短時(shí)能量檢測(cè)返回 True 表示檢測(cè)到敲擊起點(diǎn) energy np.sum(frame.astype(np.float64) ** 2) / len(frame) # 自適應(yīng)閾值底噪的 ratio 倍防止環(huán)境噪聲誤觸發(fā) threshold max(noise_floor * ratio, 1e6) return energy threshold def update_noise_floor(noise_floor, frame, alpha0.95): 靜默期更新底噪估計(jì)alpha 越大越平滑 energy np.sum(frame.astype(np.float64) ** 2) / len(frame) return alpha * noise_floor (1 - alpha) * energy這段邏輯的關(guān)鍵在自適應(yīng)閾值。固定閾值在安靜實(shí)驗(yàn)室能用一到賽場(chǎng)有人走動(dòng)、有人說話就瘋狂誤觸發(fā)。用靜默期持續(xù)更新的底噪乘以一個(gè)比例系數(shù)能把誤觸發(fā)壓下去。ratio取 6 是經(jīng)驗(yàn)值太小容易把環(huán)境噪聲當(dāng)敲擊太大則輕敲漏檢alpha取 0.95 讓底噪緩慢跟隨避免把敲擊本身算進(jìn)底噪。檢測(cè)到起點(diǎn)后向后取 512 點(diǎn)作為一幀送入特征提取這個(gè)窗口要覆蓋敲擊的主衰減段。4.2 頻譜特征提取歸一化比峰值更重要拿到一幀后做加窗和 FFT取幅度譜。直接拿原始幅度譜做匹配會(huì)翻車因?yàn)榍脫袅Χ让看尾煌w幅度差異可能有好幾倍。必須做歸一化讓特征只反映「頻譜形狀」而不是「敲得多響」。def extract_feature(frame, fs16000, n_fft512): 輸入一幀時(shí)域信號(hào)輸出歸一化幅度譜特征 window np.hanning(len(frame)) spectrum np.abs(np.fft.rfft(frame * window, nn_fft)) # 只保留 200Hz~4kHz 有效頻段砍掉直流和超高頻噪聲 freqs np.fft.rfftfreq(n_fft, 1.0 / fs) band (freqs 200) (freqs 4000) feat spectrum[band] # L2 歸一化消除敲擊力度差異 norm np.linalg.norm(feat) return feat / norm if norm 1e-9 else feat頻段裁剪是這一步的核心。200Hz 以下基本是桌面振動(dòng)和環(huán)境低頻噪聲4kHz 以上對(duì)區(qū)分杯號(hào)貢獻(xiàn)很小卻引入大量隨機(jī)性砍掉這兩段能顯著提升模板的穩(wěn)定性。L2 歸一化之后兩條特征的歐氏距離就等價(jià)于頻譜形狀的差異力度大小被徹底消掉。n_fft取 512 對(duì)應(yīng) 31.25Hz 的頻率分辨率對(duì) 20ml 水量差引起的偏移是夠用的如果實(shí)測(cè)發(fā)現(xiàn)相鄰杯子的峰擠在一起再升到 1024 點(diǎn)。4.3 模板匹配判決距離度量與拒識(shí)機(jī)制識(shí)別階段把新特征和 8 條模板逐一算距離最小距離對(duì)應(yīng)的杯號(hào)就是結(jié)果。但發(fā)揮部分要求「敲到新增杯子顯示 0」這意味著系統(tǒng)必須能拒識(shí)——新增的 3 只杯子沒有模板如果強(qiáng)行匹配到最近的模板就會(huì)報(bào)錯(cuò)。def classify(feat, templates, reject_thresh0.35): templates: dict{杯號(hào): 模板特征}返回 (杯號(hào), 最小距離) best_id, best_dist 0, float(inf) for cup_id, tpl in templates.items(): dist np.linalg.norm(feat - tpl) if dist best_dist: best_id, best_dist cup_id, dist # 距離超過閾值判為未知杯顯示 0 if best_dist reject_thresh: return 0, best_dist return best_id, best_distreject_thresh是這套方案里最需要現(xiàn)場(chǎng)標(biāo)定的參數(shù)。定得太松新增杯子會(huì)被誤認(rèn)成已有杯號(hào)定得太緊正常敲擊稍微偏一點(diǎn)就被拒識(shí)。我的做法是學(xué)習(xí)階段順便記錄每只杯子 3 次敲擊兩兩之間的距離取最大值的 1.5 倍作為初始閾值再在聯(lián)調(diào)時(shí)用新增杯子實(shí)測(cè)微調(diào)。這個(gè)參數(shù)沒有理論最優(yōu)值只能靠數(shù)據(jù)說話所以學(xué)習(xí)階段一定要把距離值打印出來看。4.4 音高映射與發(fā)聲5 只杯子對(duì)應(yīng) 5 個(gè)音高映射關(guān)系選手自定通常按五聲音階或簡單曲譜需要來配。發(fā)聲用查表法預(yù)先算好每個(gè)音高對(duì)應(yīng)的頻率用 DAC 輸出正弦波或 PWM 加 RC 濾波。// 音高頻率表C 大調(diào)前五音可按曲譜調(diào)整 const uint16_t tone_freq[5] {262, 294, 330, 349, 392}; // C4 D4 E4 F4 G4 void play_tone(uint8_t cup_id) { if (cup_id 1 || cup_id 5) return; // 0 號(hào)杯不發(fā)聲 uint16_t f tone_freq[cup_id - 1]; dac_start_sine(f, 300); // 300ms 單音夠聽清即可 }自動(dòng)演奏就是把曲譜寫成「杯號(hào) 時(shí)長」的序列循環(huán)調(diào)用play_tone總時(shí)長控制在 15 秒內(nèi)。這里不用糾結(jié)音色題目明確不要求把頻率打準(zhǔn)、節(jié)奏別亂就行。真正要小心的是發(fā)聲和拾音的相互干擾喇叭聲音會(huì)被麥克風(fēng)拾到如果演奏時(shí)正好在識(shí)別可能誤觸發(fā)。通常的做法是識(shí)別態(tài)和演奏態(tài)互斥演奏時(shí)關(guān)閉敲擊檢測(cè)。5. 硬件與交互落地拾音電路、顯示與現(xiàn)場(chǎng)操作流程5.1 拾音前端與抗干擾布置數(shù)字 MEMS 麥克風(fēng)雖然省事但布置位置很講究。麥克風(fēng)要朝向杯子一側(cè)、離杯沿 10~15cm太近會(huì)拾到敲擊棒的機(jī)械振動(dòng)太遠(yuǎn)信噪比不夠??刂破骱捅又g最好有物理隔斷避免揚(yáng)聲器聲音直接灌進(jìn)麥克風(fēng)。供電用電池比用適配器穩(wěn)市電帶來的工頻干擾在頻譜上就是一根 50Hz 的柱子雖然被 200Hz 高通砍掉了但它的諧波會(huì)污染低頻段。如果只能用模擬麥克風(fēng)前端加一級(jí)同相放大增益 20~40dB 可調(diào)后面跟一個(gè) 4kHz 低通濾掉高頻噪聲再進(jìn) ADC。增益別一次調(diào)死留個(gè)電位器現(xiàn)場(chǎng)調(diào)這是踩過坑之后的習(xí)慣——不同賽場(chǎng)環(huán)境噪聲差別很大固定增益總有一邊不合適。5.2 顯示與操作面板設(shè)計(jì)OLED 上至少顯示四樣?xùn)|西當(dāng)前模式學(xué)習(xí)/識(shí)別、當(dāng)前待學(xué)杯號(hào)、識(shí)別結(jié)果杯號(hào)、最近一次匹配距離。前三樣是給評(píng)委看的最后一樣是給自己調(diào)試用的。操作按鍵三個(gè)足夠模式切換、杯號(hào)加減、確認(rèn)。學(xué)習(xí)態(tài)下每敲一次屏幕上的計(jì)數(shù)加一攢夠 3 次自動(dòng)生成模板并提示「已學(xué)」?,F(xiàn)場(chǎng)操作流程要提前排練成肌肉記憶上電 → 一鍵啟動(dòng)自動(dòng)演奏基本要求第 1 項(xiàng)→ 切學(xué)習(xí)態(tài) → 按順序敲 1、3、5 號(hào)杯各 3 次 → 切識(shí)別態(tài) → 逐個(gè)敲擊驗(yàn)證顯示。發(fā)揮部分多了注水和打亂排序?qū)W習(xí)前先確認(rèn)水量學(xué)習(xí)時(shí)按杯底編號(hào)綁定識(shí)別時(shí)打亂后逐個(gè)敲。整個(gè)流程寫在一張卡片上貼在控制盒背面比賽時(shí)照著做比臨場(chǎng)回憶靠譜得多。5.3 水量控制與杯子一致性題目允許用注射器或量杯計(jì)量這其實(shí)是送分點(diǎn)。20ml 的水量差聽起來小但用 50ml 注射器精確到 5ml 完全做得到。真正麻煩的是杯子本身的一致性8 只杯子外觀相同但壁厚、杯口直徑可能有微小差異空杯狀態(tài)下敲擊頻率就不完全一樣。這恰恰是模板匹配方案的優(yōu)勢(shì)——每只杯子單獨(dú)學(xué)習(xí)個(gè)體差異被模板吸收掉了不需要假設(shè)杯子完全一致。注水后要等水面靜止再敲晃動(dòng)的水面會(huì)讓頻譜抖得厲害。發(fā)揮部分打亂排序后系統(tǒng)靠的是學(xué)習(xí)階段建立的模板和杯子當(dāng)前位置無關(guān)所以打亂不影響識(shí)別只影響隊(duì)員找杯子的速度。這一點(diǎn)在答辯時(shí)要講清楚評(píng)委常問「打亂后你怎么知道敲的是哪只」。6. 避坑與常見問題排查五條最容易翻車的點(diǎn)6.1 現(xiàn)象實(shí)驗(yàn)室識(shí)別率 100%現(xiàn)場(chǎng)頻繁誤判原因通常是環(huán)境噪聲改變了底噪水平自適應(yīng)閾值沒跟上或者模板是在安靜環(huán)境下學(xué)的現(xiàn)場(chǎng)噪聲混進(jìn)了特征。解決辦法是把學(xué)習(xí)環(huán)節(jié)放到測(cè)試現(xiàn)場(chǎng)做不要提前在實(shí)驗(yàn)室學(xué)好帶過去同時(shí)把ratio從 6 降到 4~5讓檢測(cè)更敏感配合拒識(shí)閾值一起調(diào)。另外檢查麥克風(fēng)是否被空調(diào)氣流或人員走動(dòng)直吹。6.2 現(xiàn)象相鄰兩只杯子總是互相認(rèn)錯(cuò)這是頻率分辨率不夠或頻段選擇不當(dāng)?shù)牡湫捅憩F(xiàn)。先確認(rèn) FFT 點(diǎn)數(shù)512 點(diǎn)不夠就上 1024 點(diǎn)再檢查特征頻段是否把區(qū)分度最高的共振峰砍掉了可以把 200~4000Hz 改成 300~3500Hz 試試。如果兩只杯子水量差本來就接近 20ml 下限考慮在特征里加入頻譜質(zhì)心或帶寬這類二階特征單靠幅度譜形狀確實(shí)容易混。6.3 現(xiàn)象敲一次識(shí)別出好幾次或者干脆不識(shí)別前者是敲擊檢測(cè)的幀重疊沒處理好一次敲擊的能量跨越了多幀每幀都觸發(fā)。解決方法是加一個(gè)最小間隔鎖檢測(cè)到一次敲擊后 200ms 內(nèi)不再觸發(fā)。后者多半是閾值太高或窗口沒對(duì)準(zhǔn)敲擊起點(diǎn)檢測(cè)到了但取的 512 點(diǎn)窗口錯(cuò)過了主衰減段把窗口起點(diǎn)往后挪 50~100 點(diǎn)再試。用串口把每幀能量打出來看一眼就能定位。6.4 現(xiàn)象發(fā)聲時(shí)識(shí)別亂跳揚(yáng)聲器聲音被麥克風(fēng)拾到形成聲學(xué)反饋。最直接的辦法是識(shí)別和發(fā)聲分時(shí)復(fù)用發(fā)聲時(shí)關(guān)檢測(cè)如果必須同時(shí)就把揚(yáng)聲器朝向背離麥克風(fēng)并在結(jié)構(gòu)上加隔板。軟件上也可以在發(fā)聲期間把檢測(cè)閾值臨時(shí)抬高相當(dāng)于給系統(tǒng)一個(gè)「聾」的窗口。6.5 現(xiàn)象學(xué)習(xí)階段模板和杯號(hào)對(duì)不上順序綁定在緊張環(huán)境下極易出錯(cuò)尤其是發(fā)揮部分杯底編號(hào)和位置號(hào)不一致時(shí)。根治辦法是學(xué)習(xí)態(tài)強(qiáng)制手動(dòng)選杯號(hào)再錄入每錄入一只屏幕明確回顯「杯 X 已學(xué) 3 次」隊(duì)員看一眼再繼續(xù)。別圖快用自動(dòng)順序綁定一旦錯(cuò)位后面所有結(jié)果全反排查時(shí)間遠(yuǎn)超省下的那幾秒。7. 驗(yàn)收與答辯怎么用一張測(cè)試表證明系統(tǒng)真的穩(wěn)驗(yàn)收這件事評(píng)委看的不是你演示那一次有多順而是你有沒有一套能復(fù)現(xiàn)的測(cè)試方法。我一般會(huì)準(zhǔn)備一張測(cè)試記錄表把每個(gè)得分點(diǎn)拆成可重復(fù)的測(cè)試項(xiàng)現(xiàn)場(chǎng)邊測(cè)邊填答辯時(shí)直接拿表說話。測(cè)試項(xiàng)測(cè)試方法合格判據(jù)記錄字段自動(dòng)演奏一鍵啟動(dòng)計(jì)時(shí)≤15s曲調(diào)可辨實(shí)際時(shí)長空杯學(xué)習(xí)識(shí)別1/3/5 號(hào)各敲 3 次學(xué)習(xí)再逐個(gè)識(shí)別顯示正確總時(shí)長 ≤90s識(shí)別正確數(shù)/總次數(shù)注水杯識(shí)別2/4/5 號(hào)注 50/100/150ml 后學(xué)習(xí)識(shí)別顯示正確且發(fā)聲同上五杯演奏注水差 ≥20ml學(xué)習(xí)后演奏音高對(duì)應(yīng)正確錯(cuò)音數(shù)八杯打亂加 3 杯打亂識(shí)別原 1~5 號(hào)新杯顯示 0總時(shí)長 ≤90s誤判數(shù)測(cè)試時(shí)每項(xiàng)至少重復(fù) 3 輪記錄每輪的正確率和耗時(shí)取最差一輪作為答辯數(shù)據(jù)。評(píng)委問「穩(wěn)不穩(wěn)」你拿出「三輪平均正確率 96%最差一輪 92%耗時(shí) 78 秒」比任何形容詞都有說服力。答辯環(huán)節(jié)有兩個(gè)高頻問題要提前準(zhǔn)備。一是「為什么用模板匹配不用神經(jīng)網(wǎng)絡(luò)」回答要點(diǎn)是樣本量約束現(xiàn)場(chǎng)每類只有 3 次學(xué)習(xí)機(jī)會(huì)分類器訓(xùn)不起來模板匹配在少樣本下更可控。二是「20ml 水量差怎么保證分辨」回答時(shí)把頻率分辨率和實(shí)測(cè)距離值一起擺出來說明閾值是怎么標(biāo)定的。別背稿把測(cè)試表往桌上一放指著數(shù)據(jù)講氣場(chǎng)完全不一樣。從那以后我每次帶這類限時(shí)賽題都會(huì)在方案定稿前先逼著隊(duì)伍把測(cè)試表填一遍——填不滿的地方就是設(shè)計(jì)漏洞早發(fā)現(xiàn)比現(xiàn)場(chǎng)翻車強(qiáng)。希望這套拆解能幫到你照著搭、照著測(cè)把該拿的分穩(wěn)穩(wěn)拿住。本文還有配套的精品資源點(diǎn)擊獲取