找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 5917|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

從樂(lè)譜中提取基音頻率matlab代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:260876 發(fā)表于 2017-12-12 21:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
大家好,這是我們之前做的音樂(lè)識(shí)別dsp項(xiàng)目用到的樂(lè)譜F0提取matlab代碼,先在matlab上面仿真后再遷移到CPU上面�?吹接械娜俗鰀sp用到,發(fā)在這里共享。

源程序如下:

  1. % [x,Fs] = audioread('DJF0.wav');
  2. % % y=abs(hilbert(x));
  3. % % plot(y);title('解調(diào)信號(hào)');
  4. %
  5. % % fs=30;
  6. % t=0:1/Fs:13.306;
  7. % x6=x;
  8. % x66 = hilbert(x6);
  9. % xx = abs(x66+j*x6);
  10. % figure(1)
  11. % hold on
  12. % plot(t,x6);
  13. % plot(t,xx,'r')
  14. % xlim([0 5])
  15. % hold off
  16. % % 包絡(luò)算法,未考慮邊界條件
  17. % d = diff(x6);
  18. % n = length(d);
  19. % d1 = d(1:n-1);
  20. % d2 = d(2:n);
  21. % indmin = find(d1.*d2<0 & d1<0)+1;
  22. % indmax = find(d1.*d2<0 & d1>0)+1;
  23. % envmin = spline(t(indmin),x6(indmin),t);
  24. % envmax = spline(t(indmax),x6(indmax),t);
  25. % figure
  26. % hold on
  27. % plot(t,x6);
  28. % plot(t,envmin,'r');
  29. % plot(t,envmax,'m');
  30. % hold off
  31. % xlim([0 5])
  32. clc,clear;
  33. % c=readmidi('瀟灑走一回MIDI.mid');
  34. c=readmidi('res.mid');
  35. b=melcontour(c,0.25,'abs'); %% 0.25拍每個(gè)點(diǎn),即每0.25beat取一個(gè)點(diǎn)
  36. plot(b);%%畫(huà)出旋律輪廓(melodic contour),畫(huà)出F0;
  37. d=midi2hz(b);%把從midi格式代表的音高轉(zhuǎn)換為頻率,基頻;
  38. gettempo(c);%得到文件中音樂(lè)的bpm 即每分鐘多少拍;從而可以計(jì)算出每秒多少拍,即音樂(lè)頻率
  39. %在“瀟灑走一回”音樂(lè)中,得到1beat對(duì)應(yīng)2Hz,
  40. %則在midi文件中,因?yàn)槊?.25beat取1個(gè)點(diǎn),則計(jì)算得到對(duì)應(yīng)8Hz(合成時(shí)需要的fs)

  41. save mydata b;


復(fù)制代碼

所有資料51hei提供下載:
tiqu.rar (778 Bytes, 下載次數(shù): 27)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩1
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表