2010年9月10日 星期五

What is be32_to_cpu/cpu_to_be32(),cpu_to_le16(),cpu_to_le32(),

be32_to_cpu/cpu_to_be32(),cpu_to_le16(),cpu_to_le32(),

le 叫做Little Endian,be 叫做Big Endian,這是兩種字節序.
le 就表示地址地位存儲值的低位,地址高位存儲值的高位.
be 就表示地址低位存儲值的高位,地址高位存儲值的低位.
我們就以這裡這個臨時變量c 為例.假設c 是這樣被存儲在內存地址0x0000 開始的地方:

0x0000 0x12
0x0001 0x34
0x0002 0xab
0x0003 0xcd

如果你是採用le 的字節序,那麼讀出來的值就是0xcdab3412,
反之,如果你採用的是be 的字節序,那麼讀出來的值就是0x1234abcd.
同樣的,如果你把0x1234abcd 寫入0x0000 開始的內存中,那麼結果就是:

big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x23 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12

為什麼這幾個函數名字裡面都一個”cpu”?
談到字節序不談cpu 那就好比神采飛揚的談起超級女聲卻對張靚穎是何許人也茫然不知.
不同的cpu 採用不同的字節序.看生產商自己喜歡了.
其中,big endian 以Motolora 的PowerPC 系列cpu 為代表,
而little endian 則以我家Intel 的x86 系列cpu 為代表.
所以這幾個函數名字裡邊都會有cpu 的字樣,
那麼毫無疑問對於不同的cpu,這幾個函數執行的代碼是不一樣的.
但是,凡是xx_to_cpu 就說明函數的結果是給cpu 使用的,
反之如果是cpu_to_xx 就說明是從cpu 的字節序轉換成目標字節序.

2010年8月11日 星期三

PCM/ADPCM 聲波檔案之間差異的說明

PCM 和 ADPCM 是類比音訊資料儲存為數位格式 Microsoft.WAV 檔的技巧。

其他儲存體的方法 (比方說 mu-法律、 A-法律轉換編碼 CELP,等等),不受 Windows 音效系統 1.0。

PCM 的運作方式 PCM 的運作是藉由採取不連續的範例,依平均間隔 (稱為取樣率)。常見的時間間隔是 11 kHz]、 [22 kHz] 和 [44 kHz。越高取樣比率原始的類比音效和愈好聲音的品質愈好的表示。每個範例是值的具有無限解析從 +1.0 全面以完整的比例數值-1.0 實數數字。因為這些必須儲存為有限精確度數位數字,資料會被截斷成 16 位元 PCM 或 8 位元 PCM 通常稱為 8 位元和 16 位元範例。16 位元資料有更多的解析度,所以數位的一種聲音聽起來更好。8 位元 PCM 具有較少解析度按鍵動作發聲 hiss 導致該一種聲音。它也需要較少的磁碟空間。

ADPCM 的運作方式 通常稱為 「 為壓縮,表單的 ADPCM 是更有效率的方法儲存 16 位元或 8 位元 PCM 比波形。它只會使用每個佔用的磁碟空間的 16 位元 PCM 四分之一的範例 4 位元。但是,聲音品質是差。因為 Windows 音效系統硬體只能夠了解 8/16 位元 PCM,電腦必須壓縮和解壓縮至/從需要 CPU 時間的 PCM ADPCM。可以在 22 kHz 單聲道 ADPCM 背景解壓縮即時 (也就是雖然播放) 上 386SX/16 百萬赫茲 CPU。較高的取樣率 (44 kHz) 或立體聲檔案將會花太長的時間為一個 386SX/16 解壓縮,這會造成略過] 中音訊]。11 kHz 單聲道 ADPCM 可以壓縮即時 386SX/16 電腦上。若要如何 ADPCM 電腦必須有 [音訊壓縮管理員 (ACM) 安裝。

ADPCM 儲存兩個相鄰的 PCM 樣本中值的差異,並使允許資料減少一些假設。因為這些假設適當地重現低頻率,但是任何高頻率傾向於取得失真。扭曲是 11 kHz ADPCM 輕易按鍵動作發聲檔案,但會變成更難以分辨較高的取樣速率而是幾乎無法辨識與 44 kHz ADPCM 檔案。

2010年5月12日 星期三

[轉] Ubuntu 安裝Vim Plugin ctags及taglist

http://stenlyho.blogspot.com/2008/11/ubuntuvim-plugin-ctagstaglist.html
Ubuntu 安裝Vim Plugin ctags及taglist
安裝ctags及taglist

1. 首先先安裝ctags

apt-get install exuberant-ctags

2. 然後到Taglist網站去下載zip檔http://vim-taglist.sourceforge.net/

(1) 下載後解壓縮該檔案
# unzip taglist_45.zip
Archive: taglist_45.zip
inflating: plugin/taglist.vim
inflating: doc/taglist.txt
(2)將plugin及doc複製到家目錄的".vim"這個目錄裏,如果不存在就建一個新的".vim"

在vim裏設定功能鍵F9 - 用它來開啟/關閉taglist功能
在/etc/vim /vimrc裏加入下面1行

map :Tlist

最後一個步驟,到你的原始程式目錄裏輸入

ctags -R *.c *.h

開啟vim xxx.c按F9
你就會看見如下圖的結果

畫面分成左右兩邊,切換方式用Ctrl-W-W

左邊畫面TagList只要按Enter就會自動跳到相對應的函式或定義

右邊的畫面:
Ctrl+] : 跳到游標所指function的implement 位置 ,注意游標要在function的第一個字。
Ctrl+t : 返回到剛剛的位置。

2010年5月11日 星期二

[轉]TDD(Time Division Duplex) noise.分時多工雜訊

使用GSM手機的時候,一般人一定常聽過其嗶嗶嗶的聲音,有時候是自己的手機聽筒傳出,對方聽不到;有時候是對方聽到,但自己聽不到這個噪音;還有就是在 手機快響起的時候,電腦的喇叭or汽車的喇叭or教室的擴音器也會出現嗶嗶的聲音。
還是不知道我在說什麼聲音嗎?可以到這裡來聽聽:
(2009.07.05 更新,原來在youtube找的影片不見了,我自己錄了一段影片,
一個是我不小心買到的便宜爛喇叭,一個是比較好的喇叭,可 以很明顯的比較得出來TDD noise)


為什麼會有這個聲音呢?下面用簡單易懂,不講太多艱深的方式來陳述。
先從GSM手機的原理來說起。
GSM是使用TDMA分時多工的技術, 利用不同的時間點傳送不同的使用者的語音通話等資料。
以簡單的假設來解釋,同時有八個人在一間房間裡跟錄音機講話,為了要錄下所有人的聲音來溝 通,使用第一秒第一個人講話,第二秒第二個人講話,第三秒第三個人講話…到了第九秒又回到第一個人講話,如此就是分時多工。
而因為分時多工的關 係,手機會開關power(功率),即一下講話一下不講話的意思,而且是週期性的出現,這個週期時間是4.615ms(10^(-3) 秒),換算成頻率是1/4.615ms=217Hz(赫茲)。
一般聽力健全的人可聽見的聲音,其頻率約在20~20,000Hz之間,所以這個聲音是人耳聽得到 的,嗶嗶聲就是因此而來。

而手機的嗶嗶聲來源,主要有三種:

1.通過手機電源
2.通過不同傳輸路徑的耦合
3. 天線幅射出的功率耦合

手機會被影響出現嗶嗶噪音的元件有Mic(麥克風,講話收音)、Receiver(聽筒,講手機時耳朵聽聲音的聽 筒)、Speaker(揚聲器,發出來電鈴聲or放音樂出來)
當Mic有雜訊時,是對方會聽到嗶嗶聲;當Receiver有雜訊時,是我方會聽到 嗶嗶聲;當Speaker有雜訊時,是來電鈴聲or播出來的音樂會有嗶嗶聲。

1.通過手機電源即是手機PA功率放大器週期性的抽取電源的 時候,因為電源的不穩定,上述的三種元件都有接電,所以都會有217Hz的噪音,這樣就需要用電容去穩定電源。
2.通過手機內部的不同傳輸路徑的 耦合,這時候在layout的時候就要小心,把重要的電路保護好,不要外露或跟其他的線耦合到。
3.天線幅射出去的功率耦合,就是造成電腦的喇叭 or汽車的喇叭or教室的擴音器也有嗶嗶聲的來源,這時候只能期待那些電腦喇叭、汽車音響等,有做好保護的設計,要不然是無可避免的。而手機裡的Mic、 Receiver、Speaker則也必定需要設計好保護的電容來過濾,做不好的話,一樣就是通話中會有噪音了。這部份是相當難設計的,所以手機音質的好 壞,在這裡就顯得相當的重要。

至於為什麼電腦喇叭、音響之類的東西,會在手機快響起的時候才有嗶嗶聲呢?因為手機一般的時候並不是一直跟 基地台交換資料的,只是一段時間收一下資訊,跟基地台保持連結。而在電話要撥出或是要響起的時候,是要跟基地台交換相對較多的資料,所以手機會先用最大的 功率打出,以確保基地台能收到。之後與通話後,與基地台溝通,再調整手機的功率,若與基地台近一點,可能手機經由天線發射出去的功率就會調小,那功率比較 小,外部的音響也比較不會受到影響了,但當手機很靠近電腦喇叭的話,還是會有嗶嗶聲,大家可以試試看。

手機是拿來講電話的,聲音就是要清 楚,TDD noise的消除問題是一支手機好壞的重要指標。


1.TDMA示意圖
來源(http://cce.ccmtc.edu.tw /peterweb/book/download/無線通訊/ch14.ppt)



2. 人類聽覺的範圍
(來源http://www.cyut.edu.tw/~hcwul/ErgoPrac/u8.pdf)

2010年5月9日 星期日

Samba config

若 Linux 使用者,要分享目錄給其他使用者,都要去研究 smb.conf 這東西,但是對於初學者來說是很麻煩的事情。

不過現在 Ubuntu 使用者,可以用幾個步驟就可以完成。

1.打開檔案管理員 (Nautilus) ,找到你要分享的目錄,點選右鍵,選擇分享目錄 (Share Floder)。
2.若電腦內沒有安裝 Samba,系統會幫你安裝 Samba 套件。
3.安裝順利,出現設定分享資料夾名稱,以及分享權限。
4.到這邊基本都設定完成,不過還有一個步驟要處理,增加 smb user 帳號密碼。
5.打開終端機,下達指令。

sudo smbpasswd -a user

這樣,完成分享資料夾功能。

而在 Windows 環境,用網路芳鄰方式讀取 Ubuntu 分享資料夾。

不過 Ubuntu 預設的 工作群組是 MSHOME 電腦名稱是 主機名稱,所以在瀏覽上會比較麻煩。可以指令方式瀏覽。

開始 -> 執行 -> \\電腦名稱\分享目錄名稱

當然也可以修改設定,一樣請在 Ubuntu 電腦上,打開終端機。

sudo gedit /etc/samba/smb.conf

在最前面會找到這行敘述

workgroup = MSHOME

改成

workgroup = 您指定的工作群組
netbiosname = 您指定的電腦名稱

存檔離開,最後要重新啟動 Samba

sudo /etc/init.d/samba restart

新的 Samba 設定已經完成。

就某方面來看,設定上已經很方便,至少不像以前要翻文字天書,怎麼設定都不起來。
以上說明是最簡易的設定,至於要詳細當然要回歸最基本的 smb.conf 。

2010年4月3日 星期六

何謂LDAP?

LDAP - Lightweight Directory Access Protocol
採用Server/Client、TCP網路處理架構
專門用來存取目錄(Directory)性質的資料庫
可將資料分類儲存
讀取與搜尋速度較快; 異動時較慢
有特定的資料結構(Schema)
目錄服務(Directory Service)的目的就在一個分散式網路環境裡,展現
一個安全、具延展性並且易於維護的單一資訊來源的方式,而利用這種方式,將會是在執行各種應用系統設計專案裡的一個關鍵因素。

別用盜版的 Partition Magic了,來試試免費的硬碟分割工具—Easeus Partition Manager吧!

當你想要分割硬碟,調整分割區的大小,一定會想到Par
tition Magic這套軟體。現在你可以省去買這套軟體的錢,試試 免費的替代方案—Easeus Partition Manager(Home Edition)吧!除了常用的分割區調整大小、搬移、新增、刪除、隱藏…等功能,還支援了S-ATA、USB/1394外接硬碟,是個方便又強大的工具喔!

Easeus Patition Manager

* 官方網站:http://www.partition-tool.com/personal.htm
* 下載點:http://www.partition-tool.com/download.htm
* 版本:5.0.1 家用版
* 支援作業系統:Windows 2000 Pro / XP / Vista / 7 (32位元版)
* 支援硬碟類型:IDE / SCSI / S-ATA / USB外接硬碟 / IEEE 1394外接硬碟
* 支援硬碟容量:2GB ~ 2TB

2010年2月18日 星期四

原來3D 立體投影是這樣用的呀...XD

http://www.youtube.com/watch?v=Zx1U3h6-iDc&feature=related

Sysinfo – 檢視系統資訊

sudo apt-get install sysinfo

執行方式 應用程式 -> 系統工具 -> Sysinfo

顯示資訊有

* System – Linux Kernel 版本 / GNOME 版本
* CPU – CPU 資訊
* Memory – 實體記憶體 / Swap 空間
* Storage – 硬碟 / 光碟機資訊
* Hardward – 顯示卡 / PCI / USB / ISA / IDE 資訊

【軟體】Maidroid Reminder -- 女僕鬧鐘。

http://www.mobile01.com/topicdetail.php?f=423&t=1429278&last=17626756

Hotkey 管理視窗位置

在Windows7中,用戶可以Hotkey管理視窗位
置, 讓用戶輕鬆地對視窗做出排列,方便進行工作。

Hotkey表如下:
[Win Key] + [左方向鍵] 工作視窗排到最左邊
[Win Key] + [右方向鍵] 工作視窗排到最右邊
[Win Key] + [上方向鍵] 工作視窗放到最大化
[Win Key] + [下方向鍵] 工作視窗放到最小
[Win Key] + [Shift]+ [上方向鍵] 工作視窗垂直拉到最大
[Win Key] + [Shift]+ [上方向鍵] 工作視窗縮到最小

ATI Eyefinity

Eyefinity技術可以在單一台電腦的環境當中,同時串連多達24個顯示輸出,而且能夠將所有的顯示輸出合併成一個單一個畫 面,並且提供高解析度的即時3D運算能力。

ATI的Eyefinity正是這樣的一個新技術。根據ATI所發佈的訊息指出,要使用Eyefinity達到三個顯示輸出,必 須在Windows Vista/7的作業系統環境(目前Windows Vista/7也並不支援延伸畫面顯示,唯有透過Eyefinity才可以這麼做),並且要搭配DisplayPort才能達成。