星期一, 11月 30, 2009

WAV 音檔

Waveform 音檔格式 (WAV 或 WAVE) 主要用於 Windows 作業系統儲存未壓縮 (線性 PCM 編碼) 的音檔,實際上也可以存壓縮過的音檔,使用 RIFF 格式說明編碼參數。

RIFF (Resource Interchange File Format) 格式於 1991 由微軟及 IBM 提出,將 IFF (Interchange File Format) 的位元組順序改成用 little-endian,也用於微軟其它影音檔,如 AVI、ANI 等。Apple 的 AIFF 是 1988 改自 IFF,但使用 big-endian。

RIFF 資料存成許多有標記的區塊 (chunk),包括 4-byte 的區塊標記、4-byte 內容長度、及內容資料,如果長度不是偶數最後再填補一個位元組。

區塊的基本架構如下:
4-byte ASCII 標記
4-byte 內容長度 (in byte)
內容資料 (如果內容長度不是偶數,填補一個 byte)

RIFF 檔案本身就是一個標記為 "RIFF" 大區塊,其內容資料包含一個 4-byte 檔案標記及其它子區塊。WAV 檔的檔案標記是 "WAVE" ,子區塊有 "fmt " 及 "data" 等,架構如下:

"RIFF"
內容長度 = 檔案大小 - 8
"WAVE"
"fmt "
長度

內容
"data"
長度

內容

"fmt " 區塊格式如下,內容資料至少 16 bytes,:
"fmt "
內容長度 = 16, 18, 20, or 40
format codenumber of channels
sample rate (Hz)
data rate (byte/sec)
block size (byte)bit/sample (bit)
size of extensionnumber of valid bits
speaker position mask
SubFormat
GUID, including the data format code
total 16 bytes

Format CodeDataExtension
1PCMno
3IEEE float
68-bit G.711 A-law
78-bit G.711 µ-law
0xFFFE (EXTENSIBLE)Extensible 由 SubFormat 決定

如單聲道取樣頻率 8000 Hz 的 PCM WAV 檔:
"RIFF"
檔案大小 -8
"WAVE"
"fmt "
size = 16
1 = pcm#chans = 1
sample rate = 8000 Hz
data rate = 16000 byte/sec
block size = 2bit/sample = 16
"data"
data size
data
...


音樂 CD (CDDA) 是 44100 Hz、雙聲道的線性 PCM。範例:
檔案 offset長度檔案內容說明
0x00000000 = 045249 4646"RIFF"
0x00000004 = 4476f4 7c02長度 = 0x027cf476 = 41743478
下個 chunk  位於 0x8 + 0x027cf476 = 0x027cf47e
0x00000008 = 845741 5645WAVE
0x0000000c = 124666d 7420"fmt "
0x00000010 = 1641200 0000長度 = 0x00000012 = 18
下個 chunk 位於 20 + 18 = 38 = 0x26
0x00000014 = 20180100
0200
44ac 0000
10b1 0200
0400
1000
0000
0x0001 = PCM
頻道數 = 0x0002
取樣率 = 0x0000ac44 = 44100
資料率 = 0x0002b110 = 176400
block size = 0x0004 = 4
bit/sample = 0x0010 = 16
extension size = 0x0000 = 0
0x00000026 = 3846461 7461data
0x0000002a = 424c0f3 7c02長度 = 0x027cf3c0 = 41743296
下個 chunk 位於 0x2e + 0x27cf3c0 = 0x27cf3ed
236.64 秒
0x0000002e = 46417432960000 ....PCM 資料
0x027cf3ee44c49 5354"LIST"
0x027cf3f248800 0000長度 = 0x00000088 = 136
下個 chunk 位於 0x27cf3f6 + 0x88 = 0x27cf47e
0x027cf3f6136494e464f
49415254
0e000000
52494646494e46ef5f4941525400
49434d54
0e000000
52494646494e464f5f49434d5400
49435244
0e000000
52494646494e464f5f4943524400
49474e52
0e000000
52494646494e464f5f49474e5200
494e414d
0e000000
52494646494e464f5f494e414d00
49535243
0e000000
52494646494e464f5f4953524300
"INFO"
"IART" (artist)
長度 0x0e
"RIFFINFO_IART"
"ICMT" (comment)
長度 0x0e
"RIFFINFO_ICMT"
"ICRD"
長度 0x0e
"RIFFINFO_ICRD"
"IGNR"
長度 0x0e
"RIFFINFO_IGNR"
"INAM"
長度 0x0e
"RIFFINFO_INAM"
"ISRC"
長度 0x0e
"RIFFINFO_ISRC"

其它區塊
  • LIST
  • fact

參考:
  1. RIFF (wikipedia)
  2. Audio File Format Specifications
延伸閱讀:
  • MP3 (MPEG-1 Audio Layer 3):有損壓縮音訊大幅降低資料量,然而音質沒有明顯的下降。
  • WMA (Windows Medis Audio):有損壓縮音訊可比 MP3 體積小一倍,但音質差不多 (高位元音質的渲染力較不足)。
  • WMA Pro
  • WMA Lossless
  • WMA Voice 
  • AAC (Advanced Audio Coding) 有損壓縮音訊
  • aptX

星期三, 11月 25, 2009

"folded" symmetrical-coefficient FIR filters

A symmetrical-coefficient FIR filters can be folded to replace some of the multipliers by adders.

y(n) = h(4)x(n-4) + h(3)x(n-3) + h(2)x(n-2) + h(1)x(n-1) + h(0)x(n)
= h(4)[x(n-4)+x(n)] + h(3)[x(n-3) +x(n-1)] + h(2)x(n-2)
乘法少了兩個,但加法多了兩個。

However, remember not all programmable-DSP chips can take advantage of the folded FIR filter structure because it requires a single addition before each multiply and accumulate operation.

symmetric coefficients
The number of multiplications required to implement the symmetric FIR filtering can be reduced to half if L is even. In addition, we only have to store half the amount of coefficients because they are symmetric.

antisymmetric (negative symmetric)
參考:
  1. An odd way to build a simplified FIR filter structure from "Understanding Digital Signal Processing, Second Edition" by Richard G. Lyons.

星期五, 11月 13, 2009

FSK CID Format

Caller ID (caller identification, CID) 有多種翻譯或別名:來電顯示、來電號碼顯示、CLID (Caller Line Identity Display), CLI (calling line identification)、calling number identification (CNID)、CLIP (Calling Line Identification Presentation)、CND (Caller Number Display)、Caller Display, CND (Calling Number Delivery)、CPN (Calling Party Number)

相關:ANI

CID 在來電時傳送發話者的電話號碼,有 DTMF 和 FSK 兩種傳送方式。而FSK 訊息有 SDMF (Simple Data Message Format) 及 MDMF (Multi Data Message Format) 兩種格式,分別以 0x04 及 0x80 開頭,格式如下。

SDMF:
0x04長度月日時分phone numberchecksum
118長度-81

MDMF:
0x80長度Messagechecksum
11長度1

其中 Message 格式如下,可有多個:
Type長度Data
11長度

其中 Type 定義及對應的 Data:
Type長度Data說明
0x018
月日時分
date 及 time
0x02不定
phone number
電話號碼
0x041
'O' or 'P'
無號碼
0x07不定
name
名子
0x081
'O' or 'P'
沒有名子

註:'O' 表 out of area (unavailable),'P' 表 privacy (blocked)

FSK 使用 audio frequency-shift keying,baud rate 是 1200±1%,用高低兩種頻率分別表示 space (0) 及 mark (1),訊號規格有 Bell 202 及 V.23 兩種,Bell 202 的 Space: 2,200±22 Hz、Mark: 1,200±12 Hz,V.23 的 Space 2100±1.5%、Mark 1300±1.5%,基本上可以設計成兩者通用。
\CID 傳送時機電話號碼時間日期發話者名子
DTMF振鈴前
FSKV.23極性反轉後振鈴前SDMF 無
MDMF 有
Bell 202振鈴中第一個長停歇

SDMF 或 MDMF 傳送時,每個 byte 前面加 start bit 0,依序由 LSB 送到 MSB,然後加 stop bit 1,可以額外插入最多 10 個 1 作為小暫停。

Channel Seizure Signal → Mark 150 ms (180 symbols) → SDMF 或 MDMF 資料
  • Channel Seize Signal:250ms 共 300-symbol 0101... (相當於 30 octets 10101010)
  • Mark Signal:150ms 共 180-symbol 111...
台灣有 DTMF 和 FSK,FSK 用 V.23,但使用 Dual Tone Alerting Signal (DTAS) 取代極性反轉。
  • DTAS (2130 + 2750 Hz 100±10 ms) → 45 ~ 500 ms → FSK 訊息 → 200 ~ 500 ms → 振鈴
延伸閱讀:
  • http://melabs.com/resources/callerid.htm 有範例
  • 掛機時,CID 是在振鈴期間送,非振鈴時可用 MDMF 送 Visual Message Waiting Indication (VMWI):Message Type 0x82: Message Waiting Notification,訊息內容 Type=0x0B, Length=1, Indication on=0xff, Indication off=0x00。
  • Voice Mail Waiting Indicator:話機上有個燈,表示有留言。
  • 以前 Bellcore 定義了三種等級的 caller ID 服務:
    • Type I:來電振鈴時傳送來電顯示
    • Type II:Type I 功能加上話中插撥傳送來電顯示 (Call Waiting)
    • Type III:Type II 功能加上 ADSI (Analogue Display Services Interface) 對談式應用 (Telephone Management、E-bank、E-mail)
    Call Waiting 步驟:
    1. 局端送 CAS tone
      • 一開始會有 0 ~ 300 ms OSI 訊號 (非必要),再來交換機會暫時靜止遠端的聲音送入 0 ~ 60 ms,並送出一個插播聲音 SAS 250ms ~ 1 sec. 經過 0 ~ 50 ms 的間斷,交換機送出 CAS 2130 + 2750 Hz 約 80 ~ 85 ms 的複頻音
    2. 話機 on-hook → off-hook → ACK
      • 話機偵測到 CAS Tone 後作一個並機測試,如果沒並聯的分機佔線才發出一個 "D" Tone 給局端即所謂的 ACK 回應訊號 (靜音避免送出刺耳的 FSK 聲音)。局端會等待 ACK 約 160±5 ms 的時間
    3. 局端送 CID,用戶端顯示 Caller ID,最後用戶端結束靜音
      • 局端先送 50 ~ 500 ms 的間隔,然後送資料,緊接著 OSI 和 0 ~ 320 ms 間格,最後回到通話狀態
  • FSK baud rate 1200,在取樣率 8000 時,每 3 個 FSK symbols 有 20 個取樣,也就是平均每個 symbol 有 6 個或 7 個取樣。
  • https://sites.google.com/site/molexliao/Home/caller-id-sms
  • Caller ID FAQ
  • http://matthieu.benoit.free.fr/cid_dsp.htm
  • http://www.picbasic.co.uk/support/tml_callerid_cnt.pdf
  • CLASS (custom local area signaling services)