Emphasis 小實驗


關於 emphasis 這個東西, 在 MPEG audio bit stream 裡面會出現.

它的意義我就不多解釋了. 總之是加強高頻 (emphasis) 與還原 (de-emphasis) 的機制.

但是怎麼做才符合 spec. 呢? 例如 CD 的 50/15 us 又是指什麼呢? 這就是我傷腦筋的地方了.

首先我們可以從網路資料看到 50/15 us 是指 time constant, 那麼應該和 RC time constant 有關吧!?

應該是因為早期的 filter 都是用 RC 做的.

因為 1 = 2*Pi*fs*T, 所以 T = 50 us 則 fs = 3,183.099 Hz, 而 15 us 得到 10,610.330 Hz. 所以控制的範圍在 3K~10K 之間.


根據 “signal and system" 書上說的:

如果 1 個 pole, 1 個 zero 而 zero 是 pole 的 10 倍, 這是一個 low pass filter, 最高最低點恰好差 20dB. 以下簡稱 20dB 的 LPF.

若 pole 是 zero 的 10 倍, 這是一個 -20dB 的 high pass filter.

如果有兩對這樣的 pole/zero. 如 pole=[5; 10], zero = [50; 100], 就是 40dB 的 LPF.

單一一個 pole/zero pair, 如果 zero 是 pole 的 100 倍, 這也是一個 40dB 的 low pass filter.


OK! 現在進入 matlab.

% 設定 zero and pole
p=[3183.099];
z=[10610.33];

% 由 zero, pole 建立 transfer function, 最後一個參數是 gain, 給 1 就行了.
% a, b 是 S domain 的 transfer function 的係數, b 是分子的 vector, a 是分母的 vector.
% w 是 frequency 軸的 sample 點

[b,a]=zp2tf(z,p,1);
[h,w]=freqs(b,a);

% 把圖畫出來, x 軸以 10 的次方為底畫出. y 軸取 log, abs(h) 表示 amplitude. angle(h) 表示 phase.
% w/(2*pi) 是因為 x 軸是 ?, 必須轉換成 Hz
% 這是 analog filter 的頻譜.

semilogx(w/(2*pi),20*log10(abs(h)));

% 畫上 X, Y 軸標籤
xlabel(‘Frequency [Hz]’);
ylabel(‘Magnitude [dB]’);

% 打上小格子
grid on;

% 保持住畫面不被後面的圖覆蓋, 而是疊加上去.
hold on;

% 做 bilinear transform, 在 48KHz sample 下, 以同樣的 a,b 做出 digital 上的 a_d, b_d vector.
[b_d, a_d] = bilinear(b, a, 48000);

% 在 48KHz 下, 求出 complex amplitude h 以及 frequency sample vector f.
% 100000 是隨便選的, 選大一點, unit circle 上的點會比較密.
[h,f]=freqz(b_d,a_d, 100000,48000);

% 再畫一次圖, 但顏色是紅色
% 這是 digital filter 的頻譜.
semilogx(f,20*log10(abs(h)),’color’,’r’);

此時 gain 大約 10 dB 多, 符合 20*log10(50/15) = 10.458 dB 的估計.

若 sampling rate 由 48KHz 減小, 紅色線也會往內縮. 這表示在不同 sampling rate 之下, digital filter 和 analog filter 會有差異.