女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于OpenHarmony音符檢測實現(xiàn)原理

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-03-04 14:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、音符檢測的基本原理

本文基于 OpenHarmony 開源系統(tǒng)提供了一種音符檢測的原理方法,結(jié)合多首音樂,運用了 pythonC++ 兩種編程環(huán)境實現(xiàn)了預(yù)期的檢出效果。旨在為振動馬達(vibrator)提供音樂節(jié)奏感的觸覺效果,代碼所在目錄 .basesensorssensorvibration_convert。
先從 python 實現(xiàn)說起,Librosa 關(guān)于音符檢測主要用到了兩個函數(shù),一個是 onset_strength(),負責(zé)生成包含音符產(chǎn)生的頻率突變的包絡(luò)線,如藍色線條所示。另一個是 onset_detect(),主要運用峰點檢測找到每個音符的位置,如黃色線條所示。

wKgaomXlZYGAFXnaAABb5yREx1M173.png

圖 1 音符檢測包絡(luò)圖
包含有用的頻率突變的包絡(luò)線是音符檢測的核心所在。傅里葉變換能夠得到全部信號采樣的頻譜圖,即每個頻率的能量貢獻,如圖 2 所示。但是每個時刻頻譜圖卻得不到,于是將全部采樣分割成若干固定長度的窗口,每個窗口應(yīng)用傅里葉變化,從而得到這一窗口的頻率分布,水平軸為時間,縱軸為頻率,顏色代表能量大小如圖 3 所示。

wKgaomXlZYyAM2TyAAEB9yNvDhE741.png

圖 2 整體頻率分布圖

wKgZomXlZZSAe0yJAAD7p26QOxU376.png

圖 3 時頻圖

每種樂器在音符產(chǎn)生時,前后時間片段的頻率將會發(fā)生明顯變化,如圖 4 所示。于是將時頻圖相鄰列做差分,將明顯看到變化的頻率。為了便于分析,只取正值,具有相同的效果,所以負值填零。一個時刻變化的頻率有多個,如何取舍,有三種方法,平均數(shù)、中位數(shù)和聯(lián)合,目前常用到的是中位數(shù)和平均數(shù)。至此,將得到任意時刻發(fā)生明顯頻率變化的單一能量,如圖 1 藍色線條所示。

wKgZomXlZZ-AEtbhAAHWnp2I_N4398.png

wKgaomXlZaaAKBeVAAGm96w0PNM342.png

圖 4 時頻圖相鄰列差分前后變化

二、音符檢測的準(zhǔn)確性

目前采用頻譜光通量(相鄰列差分)方法檢測是業(yè)界公認且較為準(zhǔn)確的方法,音符檢出率僅為 70% 多。不準(zhǔn)確的原因可能有樂器多且差異較大,信號衰減對性能的影響,顫音影響,峰點檢測時不同參數(shù)的影響,這些主要是針對音樂的研究。

三、音符檢測的程序流程

3.1 程序?qū)崿F(xiàn)

音符檢測功能核心就是頻譜圖和梅爾濾波器,頻譜圖的核心就是短時傅里葉變換,C++ 代碼片段如下,參考鏈接 https://github.com/kooBH/STFT/blob/main/cpp/STFT.h

void STFT::stft(short*in,int length,double**out){ int i,j; /*** Shfit & Copy***/ for (j = 0; j < channels; j++) { for (i = 0; i < ol; i++) { buf[j][i] = buf[j][i + shift_size]; } } // EOF if(length!=shift_size*channels){ length = length/channels; for (i = 0; i < length; i++) { for (j = 0; j < channels; j++) buf[j][i + ol] = (double)(in[i * channels+ j]); } for (i = length; i < shift_size; i++) { for (j = 0; j < channels; j++) buf[j][i + ol] = 0; } //continue }else{ for (i = 0; i < shift_size; i++) { for (j = 0; j < channels; j++){ buf[j][i + ol] = (double)(in[i * channels+ j]); } } } /*** Copy input -?> hann_input buffer ***/ for (i = 0; i < channels; i++) memcpy(out[i], buf[i], sizeof(double) * frame_size); // scaling for precision if(opt_scale) for (i = 0; i < channels; i++) for (j = 0; j < frame_size; j++) out[i][j] /= MATLAB_scale; /*** Window ***/ hw-?>Process(out, channels); /*** FFT ***/ fft->FFT(out); } void STFT::stft(short*in,int length,double**out){ int i,j; /*** Shfit & Copy***/ for (j = 0; j < channels; j++) { for (i = 0; i < ol; i++) { buf[j][i] = buf[j][i + shift_size]; } } // EOF if(length!=shift_size*channels){ length = length/channels; for (i = 0; i < length; i++) { for (j = 0; j < channels; j++) buf[j][i + ol] = (double)(in[i * channels+ j]); } for (i = length; i < shift_size; i++) { for (j = 0; j < channels; j++) buf[j][i + ol] = 0; } //continue }else{ for (i = 0; i < shift_size; i++) { for (j = 0; j < channels; j++){ buf[j][i + ol] = (double)(in[i * channels+ j]); } } } /*** Copy input -?> hann_input buffer ***/ for (i = 0; i < channels; i++) memcpy(out[i], buf[i], sizeof(double) * frame_size); // scaling for precision if(opt_scale) for (i = 0; i < channels; i++) for (j = 0; j < frame_size; j++) out[i][j] /= MATLAB_scale; /*** Window ***/ hw-?>Process(out, channels); /*** FFT ***/ fft->FFT(out); }

Mel 濾波器構(gòu)造代碼如下:

if fmax is None: fmax = float(sr) / 2 # Initialize the weights n_mels = int(n_mels) weights = np.zeros((n_mels, int(1 + n_fft // 2)), dtype=dtype) # Center freqs of each FFT bin fftfreqs = fft_frequencies(sr=sr, n_fft=n_fft) # 'Center freqs' of mel bands - uniformly spaced between limits mel_f = mel_frequencies(n_mels + 2, fmin=fmin, fmax=fmax, htk=htk) fdiff = np.diff(mel_f) ramps = np.subtract.outer(mel_f, fftfreqs) for i in range(n_mels): # lower and upper slopes for all bins lower = -ramps[i] / fdiff[i] upper = ramps[i + 2] / fdiff[i + 1] # .. then intersect them with each other and zero weights[i] = np.maximum(0, np.minimum(lower, upper)) if norm == "slaney": # Slaney-style mel is scaled to be approx constant energy per channel enorm = 2.0 / (mel_f[2 : n_mels + 2] - mel_f[:n_mels]) weights *= enorm[:, np.newaxis] else: weights = util.normalize(weights, norm=norm, axis=-1) # Only check weights if f_mel[0] is positive if not np.all((mel_f[:-2] == 0) | (weights.max(axis=1) > 0)): # This means we have an empty channel somewhere warnings.warn( "Empty filters detected in mel frequency basis. " "Some channels will produce empty responses. " "Try increasing your sampling rate (and fmax) or " "reducing n_mels.", stacklevel=2, ) return weights

3.2 功能流程圖

wKgaomXlZbmAJyEVAAGDpuE3K4Q224.png


為了能讓大家更好的學(xué)習(xí)鴻蒙 (OpenHarmony) 開發(fā)技術(shù),這邊特意整理了《鴻蒙 (OpenHarmony)開發(fā)學(xué)習(xí)手冊》,希望對大家有所幫助:

《鴻蒙(Harmony OS)開發(fā)學(xué)習(xí)手冊》

入門必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用開發(fā)導(dǎo)讀(ArKTS)
2.……

wKgaomXW6N2AJp9uAAQXRxEAprs547.png

HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統(tǒng)定義
2.技術(shù)框架
3.技術(shù)特性
4.系統(tǒng)安全

wKgaomXW6OSAFcCRAAV2zd2X_1s891.png

快速入門:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構(gòu)建第一個ArkTS應(yīng)用
3.……

wKgZomXW6PuAA7wEAAKx6By_2Z8377.png

開發(fā)基礎(chǔ)知識:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用基礎(chǔ)知識
2.配置文件
3.應(yīng)用數(shù)據(jù)管理
4.應(yīng)用安全管理
5.應(yīng)用隱私保護
6.三方應(yīng)用調(diào)用管控機制
7.資源分類與訪問
8.學(xué)習(xí)ArkTS
9…

wKgZomXW6QaAM4niAAQzrXUUPik914.png

基于ArkTS 開發(fā):https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發(fā)
2.UI開發(fā)
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網(wǎng)絡(luò)與鏈接
8.電話服務(wù)
9.數(shù)據(jù)管理
10.后臺任務(wù)(Background Task)管理
11.設(shè)備管理
12.設(shè)備使用信息統(tǒng)計
13.DFX
14.國際化開發(fā)
15.折疊屏系列
16………

wKgZomXW6RKATahiAAKz-zSMnR4040.png



審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

    44063
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33104
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3854

    瀏覽量

    18635
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    請問下,openharmony支持哪一款龍芯的開發(fā)板?有沒有開源的龍芯的openharmony源碼?

    想買個2k0300的開發(fā)板學(xué)習(xí)龍芯和openharmony,愣是沒有看到提供openharmony源碼的,也沒與看到開源的代碼。gitee上,openharmony的龍芯sig倉庫也是關(guān)閉的,有沒有人知道現(xiàn)在是什么情況?
    發(fā)表于 04-26 13:06

    RV1126 實現(xiàn)人臉檢測方案

    基于RV1126開發(fā)板實現(xiàn)人臉檢測方案,充分體現(xiàn)了電子方面的實踐經(jīng)驗和目標(biāo)檢測技術(shù)。
    的頭像 發(fā)表于 04-14 09:25 ?268次閱讀
    RV1126 <b class='flag-5'>實現(xiàn)</b>人臉<b class='flag-5'>檢測</b>方案

    OpenHarmony程序分析框架論文入選ICSE 2025

      近日,ICSE 2025軟件工程實踐Track放榜,面向OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)的ArkTS程序分析基礎(chǔ)框架--方舟程序分析器(論文題目為
    的頭像 發(fā)表于 01-02 13:41 ?1164次閱讀
    <b class='flag-5'>OpenHarmony</b>程序分析框架論文入選ICSE 2025

    通過WebSocket操作OpenHarmony機器

    OpenHarmony機器人中運行 ArkTS APP,在APP中通過WebScoket客戶端接收指令,然后調(diào)用機器人接口實現(xiàn)相關(guān)動作。
    發(fā)表于 11-27 16:41

    冠軍說|第二屆OpenHarmony競賽訓(xùn)練營冠軍團隊專訪

    實現(xiàn)技術(shù)創(chuàng)新,解決現(xiàn)實問題的呢? 高校創(chuàng)新技術(shù)人才又將如何助力OpenHarmony技術(shù)生態(tài)的繁榮與活力? 點擊下方視頻一起聽冠軍說 探秘冠軍團隊與老師的獨家幕后分享 OpenHarmony 競賽
    發(fā)表于 10-28 17:11

    OpenHarmony首次亮相歐洲開源會議

    OpenHarmony項目群技術(shù)指導(dǎo)委員會(TSC)主席陳海波受邀參加大會主論壇分享,由OpenHarmony 與Eclipse Oniro聯(lián)合籌劃的“Think Global, Code Local”分論壇
    的頭像 發(fā)表于 10-26 11:48 ?997次閱讀
    <b class='flag-5'>OpenHarmony</b>首次亮相歐洲開源會議

    第三屆OpenHarmony技術(shù)大會星光璀璨、致謝OpenHarmony社區(qū)貢獻者

    10月12日,在上海舉辦的第三屆OpenHarmony技術(shù)大會上,32家高校OpenHarmony技術(shù)俱樂部璀璨亮相,30家高校OpenHarmony開發(fā)者協(xié)會盛大啟幕。還分別致謝了年度星光TSG
    的頭像 發(fā)表于 10-21 14:10 ?557次閱讀

    第三屆OpenHarmony技術(shù)大會 “OpenHarmony開發(fā)者激勵計劃”授牌儀式圓滿舉行

    10月12日,以“技術(shù)引領(lǐng)筑生態(tài),萬物智聯(lián)創(chuàng)未來”為主題的第三屆OpenHarmony技術(shù)大會隆重舉行,“OpenHarmony開發(fā)者激勵計劃”授牌儀式在大會期間同步進行。該計劃旨在增加
    的頭像 發(fā)表于 10-21 11:48 ?671次閱讀
    第三屆<b class='flag-5'>OpenHarmony</b>技術(shù)大會 “<b class='flag-5'>OpenHarmony</b>開發(fā)者激勵計劃”授牌儀式圓滿舉行

    OpenHarmony年度技術(shù)俱樂部、個人及活動評選結(jié)果公示

    2024年度技術(shù)俱樂部評選活動已經(jīng)圓滿結(jié)束。在此,OpenHarmony項目群技術(shù)指導(dǎo)委員會(TSC)對所有參與者的積極參與和辛勤付出表示感謝。經(jīng)過嚴(yán)格的評選和審核,現(xiàn)將名單予以公示: 評選
    的頭像 發(fā)表于 10-05 08:07 ?625次閱讀

    【龍芯2K0300蜂鳥板試用】OpenHarmony代碼

    收到龍芯2K0300蜂鳥開發(fā)板后,對開發(fā)板做了一些了解和研究,現(xiàn)將OpenHarmony代碼提供給大家測試,也希望大家能更多的認識龍芯2K0300蜂鳥開發(fā)板,下面先簡單介紹一下這塊開發(fā)板。 廣東
    發(fā)表于 09-18 11:42

    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)編寫的UI應(yīng)用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在OpenHarmony凌蒙派-RK3568開發(fā)
    的頭像 發(fā)表于 09-15 08:09 ?881次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應(yīng)用開發(fā):Hello<b class='flag-5'>Openharmony</b>

    OpenHarmony 明星開發(fā)板和應(yīng)用招募啟動,等你來!

    】【應(yīng)用】【企業(yè)名稱】-【應(yīng)用名稱】”到app@mail.openharmony.io郵箱進行報名。 在初選階段,通過報名確認并完成自檢測的企業(yè)需按時提交初選材料,社區(qū)將重點對功能完成情況等進行初步篩選
    發(fā)表于 09-14 15:21

    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):HelloOpenharmony

    : IPerson = { // 創(chuàng)建一個接口的實例 name: \"OpenHarmony\",// 設(shè)置屬性值 say: () => { // 實現(xiàn)接口方法
    發(fā)表于 09-14 12:47

    河南大學(xué)OpenHarmony技術(shù)俱樂部正式揭牌成立

    8月30日,由OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)項目群技術(shù)指導(dǎo)委員會與河南大學(xué)共同舉辦的“河南大學(xué)OpenHarmony技術(shù)俱樂部成立大會”在鄭州校區(qū)友蘭
    的頭像 發(fā)表于 09-03 16:12 ?749次閱讀
    河南大學(xué)<b class='flag-5'>OpenHarmony</b>技術(shù)俱樂部正式揭牌成立

    openharmony移植AT32F407編譯時錯誤

    openharmony上移植AT32F407,hb build后出現(xiàn)鏈接錯誤 [OHOS ERROR] /home/sven/openharmony/env_setup
    發(fā)表于 08-18 17:04