全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2733
推到 Plurk!
推到 Facebook!

如何繪製 spectrogram ?

尚未結案
Banco
一般會員


發表:5
回覆:7
積分:2
註冊:2003-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-23 22:09:05 IP:140.114.xxx.xxx 未訂閱
小弟目前正在撰寫一個處理聲音的程式, 其中有一個功能是要能秀出 spectrogram, 我不曉得BCB中有沒有現成的元件可以幫我完成這件事 , 之前有嚐試用 TChart 和 TSeries 來拼湊, 但做不出來. 希望各位 大大能幫我一下, 指點我該如何做.    自己是想說用 Tchart 來完成是最方便的, 如果 TChart 無法逹成, 那 是不是非得使用 TImage, 然後自己在Canvas上畫圖?     spectrogram 的圖形如下, 橫軸是時間, 縱軸是頻率 (下圖為matlab所繪)
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-23 23:05:14 IP:140.135.xxx.xxx 未訂閱
Banco您好:
引言:之前有嚐試用 TChart 和 TSeries 來拼湊, 但做不出來.
方便把code貼上來嗎?好讓有經驗的人可以幫您看看< > 順心< >
Banco
一般會員


發表:5
回覆:7
積分:2
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-24 01:05:29 IP:218.168.xxx.xxx 未訂閱
其實我沒寫完整的Code, 我只稍微try一下BCB提供的元件是否合用 " > 順便問另一個問題, 在
Banco
一般會員


發表:5
回覆:7
積分:2
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-24 21:22:41 IP:140.114.xxx.xxx 未訂閱
土法練鋼, 我放棄用TChart了, 直接開一個TImage在上頭作畫, 效果還不錯 不過質感跟 matlab 跑出來的圖還是有差  < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=12839899&CC=287161">
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  
  v_count=(double)(Image1->Height)/128;
  h_count=(double)(Image1->Width)/FRAMEINDEX;
  
  for(i=0;i<FRAMEINDEX;i++)
  {
    for(j=0;j<FRAMESIZE;j++)
    {
      A[j].real=Buffer16[i*FRAMESHIFT+j]*Hamming[j];
      A[j].imag=0;
    }
    B=Bit_Reverse(A);
    A=FFT(B);        for(j=0;j<FRAMESIZE/2;j++)
    {
      color_value=sqrt(A[j].real*A[j].real+A[j].imag*A[j].imag);
      color=Form1->ColorMapping(color_value);
      Image1->Canvas->Pen->Color=color;
      Image1->Canvas->Brush->Color=color;
      Image1->Canvas->Rectangle(i*h_count,Image1->Height-j*v_count,(i+1)*h_count,Image1->Height-(j+1)*v_count);
    }    }    TColor TForm1::ColorMapping(double value)
{
  int temp;
  temp=Floor(value);      if(temp<4)
        return clBlack;
  else if(temp<16)
        return clBlue;
  else if(temp<64)
        return clAqua;
  else if(temp<256)
        return clGreen;
  else if(temp<1024)
        return clLime;
  else if(temp<4096)
        return clYellow;
  else if(temp<16384)
        return clFuchsia;
  else 
        return clRed;
}
 
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-24 23:18:53 IP:140.135.xxx.xxx 未訂閱
Banco您好: 謝謝您的分享,不知您是否願意將您的大作分享到下面連結中呢 < href="http://delphi.ktop.com.tw/forum.asp?FORUM_ID=79">http://delphi.ktop.com.tw/forum.asp?FORUM_ID=79 會員作品發表區(限本人創作發表) 順心
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-25 00:29:33 IP:218.164.xxx.xxx 未訂閱
冒昧請問Banco大大!! 請問若用matlab去製作有關聲音的程式,應參考哪些matlab的書籍??
Banco
一般會員


發表:5
回覆:7
積分:2
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-25 10:45:11 IP:140.114.xxx.xxx 未訂閱
To taishyang :   後來有把一些小地方修正, 我過兩三天把程式碼整理後再分享出來, 因為   最近程式要demo給老師看, 正忙著趕程式  >) 不過我想稍微深入了解一下, 您是要處理
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-25 12:38:16 IP:203.64.xxx.xxx 未訂閱
引言: To residue : 一般的matlab書籍不太會提到聲音處理的問題, 如果不介意讀原文書的話, 我印象中有幾本原文書是用 matlab 來處理聲音的(不過我手邊沒有) 不過我想稍微深入了解一下, 您是要處理 >< face="Verdana, Arial, Helvetica"> 感謝Banco大大的回應!! 納請問一下喔?若小弟我已事先錄製好一段音效在電腦中,納要用matlab撥出應怎樣寫呢?? 謝謝!!
Banco
一般會員


發表:5
回覆:7
積分:2
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-25 13:39:06 IP:140.114.xxx.xxx 未訂閱
引言: 感謝Banco大大的回應!! 納請問一下喔?若小弟我已事先錄製好一段音效在電腦中,納要用matlab撥出應怎樣寫呢?? 謝謝!!
假如錄好的檔案叫 wavfile.wav, 在 matlab 中用 wavread 函式把檔案讀進來 [y,Fs,bits]=wavread('wavfile.wav'); y是存波形的陣列, plot(y)可以看波形圖是否正確 Fs是取樣頻率 bits是取樣點的解析度 要播放聲音就用 wavplay(y,Fs) 即可
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-11-27 01:04:15 IP:61.64.xxx.xxx 未訂閱
參考此篇 看看是否有用 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41139
huei_brother
一般會員


發表:36
回覆:15
積分:10
註冊:2004-08-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-01-08 09:00:15 IP:211.76.xxx.xxx 未訂閱
Banco 可否分享一下你用Timage所畫spectrogram的程式碼 因為小弟想說做個參考謝謝
系統時間:2024-05-20 23:38:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!