史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   wave黨pcm以及fftw的使用求教學... (http://forum.slime.com.tw/thread287961.html)

alanniok 2017-11-26 09:19 PM

wave黨pcm以及fftw的使用求教學...
 
最近正在做專題需要做聲音的頻譜分析,但是和夥伴弄了兩個星期才初步搞懂wave檔和pcm格式的讀取方式,FFTW的使用也只知道輸入和輸出是特別定義的複數格式組成的array而以。

想請問,假如我從PCM讀到的data長這樣,cdff caff d4ff d3ff, 那麼是直接把cd, ca, d4, d3依序放進in陣列像這樣 (0,cd) (1,ca) (2,d4) (3,d3) 這樣嗎?

查到的FFTW教學資料只說複數陣列的每組資料是由前面的浮點數表示實數部分和後面的浮點數表示虛術部分而已...

如果有懂的大大拜託求詳細解說....... 我們教授只會說很簡單怎麼可以搞這麼久可是真的搞不懂阿.....

mini 2017-11-27 10:03 PM

不是很了解但
有一點你可能要先了解
"浮點數在記憶體中的存儲方式"
先不講標準如何 一般都是如下規劃

浮點數在記憶體可分解成 高位元組 與 低位元組
前面的是高位元組 用來儲存 實數
後面的 則是儲存 小數點後的虛數
比如 12.6
12放在高位元組
6 放在低位元組

那以陣列來存放就可用二維陣列來解決
如果data長度是100
以C/C++來講
宣告成 int data(99,1); 或著 byte data(99,1);
第一筆
data(0,1) 存 cd
data(0,0) 存 ff
或著反過來 data(0,1) 存 ff,
要如何放主要看你的規劃 或著讀取記憶體時的方便度

alanniok 2017-11-28 07:51 PM

嗯資料型態的部分我覺得我應該算是了解吧

不過在這邊我說的實數虛數就是指高斯平面的那個實數虛數,前面的實數部分表示X軸的位置虛數的部分表示Y軸的部分。

我換個例子再描述一次我的問題好了,就是如果我讀到一比資料是 1 3 2 4 6 1 5,那麼我要餵給fftw的資料是(1,1) (2,3) (3,2) (4,4) (5,6) (6,1) (7,5) 這樣就可以嗎?

mini 2017-11-28 09:15 PM

說真的什麼高斯 傅立葉
早就忘光光了
連什麼是 fftw 都不知
但既然不小心回答了只好硬著頭皮查一下...
原來是有一現成的 函式庫叫 fftw 可以讓使用者宣告後輸入數值交給它算出解答
版友的問題是如何把自己的資料正確餵給fftw

找到一篇
http://blog.sciencenet.cn/blog-531760-1048005.html
首先是宣告
一個fftw 的一維陣列 in
一個fftw 二維陣列out 擺放輸出值 , out[i][0] 與 out[i][1] 分別列出 實數與虛數 (哪一個擺實哪一個擺虛 請自己觀察變數裡的數值...)
那 1 3 2 4 6 1 5 是一維資料
就直接依序給 in[i] 就好了
in[0]=1
in[1]=3
in[2]=2
in[4]=4
in[5]=6
in[6]=1
in[7]=5


所有時間均為台北時間。現在的時間是 01:33 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1