模擬信號的數字處理,就是用離散時間系統來處理連續時間信號。我們在連續時間信號的離散時間處理以及離散時間信號的連續時間處理中已經學習過連續時間信號的離散時間處理,不過那只是單純從理想的數學角度進行最簡略的分析,這一篇文章中我們將從現實角度對這一過程進行分析,其中會討論實現這一系統所需的各個模塊。
前面的筆記中的結構模型如下
本文所討論的較為現實的模型如下
其中包含
- 連續時間抗混疊濾波器
- 電平的采樣與保持
- A/D轉換器
- 離散時間系統
- D/A轉換器
- 補償重構濾波器
消除混疊的預濾波
理想抗混疊濾波器
在模擬信號轉換成數字信號過程中,采樣周期影響着每秒內數字信號的數量。采樣周期越大(采樣頻率越小),則每秒所采集得到的數字信號的數量越少,這也意味着后續對這些數字信號處理所需的計算量越小。因此在對模擬信號進行采樣的時候,總是希望在保證所需信號頻率的前提下,使用盡量小的采樣頻率。以電話為例,盡管聲音在4~20kHz內含有明顯分量,不過電話的主要目的是傳播人聲,這只需要保證聲音的頻率在4kHz內就夠了,因此電話在對聲音進行采集的時候的采樣率為8kHz。但是如果直接對原始聲音進行采樣,就會發生混疊現象,混疊引起的噪聲被稱為加性噪聲(addictive noise)。為了避免這種噪聲的產生,需要先對原始聲音進行低通濾波,把大於4kHz的頻率消去,這種濾波器被稱為抗混疊濾波器(Antialiasing filter)。
理想情況下,抗混疊濾波器的頻率響應為
$H_{aa}(j\Omega) = \left\{\begin{matrix}1, &|\Omega|<\Omega_c\leqslant \pi/T\\ 0, &|\Omega|\geqslant\Omega_c \end{matrix}\right.$
易實現的抗混疊濾波器
不過在模擬信號下的,設計一個在頻域上具有直角(銳截止)的濾波器較為困難,並且需要較高的成本,因此下面將提出一個易於實現的抗混疊濾波器。該濾波器有如下結構:
- 在對模擬信號進行預濾波時,先用一個簡單的不那么嚴格的低通濾波器進行濾波。頻域上,該濾波器在$\Omega_N$一直到$M\Omega_c$處逐漸降為$0$。
- 在對預濾波后的信號進行采集的時候,僅要求$\Omega_N$內的頻譜不被混疊,為了滿足此條件,采樣周期應滿足$\frac{2\pi}{T}-\Omega_c\geqslant\Omega_N$,這里假設滿足這一條件的采樣周期為$T=\frac{\pi}{M\Omega_N}$,有$2M\Omega_N\geqslant\Omega_N+\Omega_c$。
- 等到了數字信號階段,在對所采集得到的信號進行倍率為$M$的減采樣,就能得到截至頻率為$\Omega_N$的數字信號。
總結地說就是把較難實現的模擬信號低通濾波器進行簡化,然后在數字信號進行處理時進行補救。這種實現方式在模擬信號的數字處理中有很廣泛的應用。
模數(A/D)轉換
A/D轉換目的是把連續時間信號轉換為離散時間信號,具體表現為把代表連續時間信號的電壓或者電流值轉化為二進制碼。A/D轉換有如下結構
轉換分為三個步驟
- 采樣與保持。每間隔$T$對原始信號$x_a(t)$進行一次采樣可得到一個電平,不過由於A/D轉換不是瞬時就能完成的,因此有必要為A/D轉換器提供一個穩定的電平,以此才能讓A/D轉換器輸出一個准確的數值。
- 量化。A/D轉換器得到電平后會對該數值進行量化,量化步長通常都是均勻的。
- 編碼。得到量化電平之后,需要對該電平值進行二進制編碼。
采樣與保持
用數學式子來表示采樣為
$x_s(t) = \displaystyle{\sum_{n=-\infty}^{\infty}x_a(nT)\delta(t-nT)}$
保持(這里又稱零階保持)的沖擊響應為
$h_0(t) = \left\{\begin{matrix}1, & 0<t<T\\0, &else \end{matrix}\right.$
采樣與保持系統也就是這兩者的級聯系統
$\begin{align*}
x_0(t) &= h_0(t)*\sum_{n=-\infty}^{\infty}x_a(nT)\delta(t-nT)\\
&= h_0(t)*\sum_{n=-\infty}^{\infty}x[n]\delta(t-nT)\\
&= \sum_{n=-\infty}^{\infty}x[n]h_0(t-nT)\\
\end{align*}$
信號通過采用與保持系統后輸出的將是一個階梯波形
量化
量化就是把輸入的樣本$x[n]$映射到一個集合,該集合中的元素的數量是有限的,可表示為
$\hat{x}[n] = Q(x[n])$
$\hat{x}[n]$被稱為量化樣本,一般的量化器有如下表達式
$\hat{x}[n]= \left \lfloor\frac{ x[n]+\Delta/2 }{\Delta}\right \rfloor\Delta$
這個式子建立了從輸入到輸出的映射如下
x為輸入,$\hat{x}$為輸出,上圖中有8個輸出值可供映射($-4\Delta,-3\Delta,\cdot\cdot\cdot,3\Delta$)。除了輸入以及輸出外,量化器有兩個重要參數:量化步長(又稱量化階)$\Delta$,全部量化區間的大小$2X_m$,量化會盡量把失真控制在$\frac{\Delta}{2}$以內,不過如果輸入值超出量化區間的話,信號會由於截斷而丟失過多的信息。
量化過后,波形會變為
二進制編碼
量化的結果是最終輸出計算機能夠處理的二進制數值,這里的二進制編碼就是把上面的量化電平(量化后的樣本)編碼成二進制數值然后進行輸出。以這一節所討論的量化過程為例,一共有$-4\Delta$~$3\Delta$共8個量化電平,也就是說我們只用三個bit就能完成對該量化電平的編碼。
上圖有兩種編碼方法,每種編碼方法都有8個碼值,分別對應$-4\Delta$~$3\Delta$。
- 右邊的編碼方法的是Offset binary code,000代表在負數上最小的值,111代表正數最大的值。
- 左邊的編碼方法是Two's complement code,這種方法采用的是補碼的方式進行編碼,也就是計算機上對整數的編碼方式,碼字的最高位是符號位,剩下的是數值位。不過為了計算方便我們這里實際上會把除了符號為之外的數值當作分數,分母為$2^{B}$,其中$B+1$為碼字的總長度。
| Two's complement code | Decimal | Fraction |
| 011 | 3 | 3/4 |
| 010 | 2 | 2/4 |
| 001 | 1 | 1/4 |
| 000 | 0 | 0 |
| 111 | -1 | -1/4 |
| 110 | -2 | -2/4 |
| 101 | -3 | -3/4 |
| 100 | -4 | -1 |
對於這種正負都有樣本的信號,常用Two's complement code的編碼方式,並且把編碼的碼值當作分數(如上述表格),這么一來,用$X_m$乘以該碼值代表的分數就能得到量化樣本。
$\hat{x}[n] = X_m\hat{x}_B[n]$
這里用$\hat{x}_B[n]$表示編碼后輸出的碼字所代表的分數。
量化誤差分析
量化誤差的定義
量化前后的差值就是量化誤差
$e[n] = \hat{x}[n] – x[n]$
繼續對前面描述的例子展開討論,例子當中會把$-\frac{\Delta}{2}<x[n]\leqslant \frac{\Delta}{2}$映射到$0$進行輸出,把$\frac{\Delta}{2}<x[n]\leqslant\frac{3\Delta}{2}$映射到$\Delta$進行輸出,以此類推。也就是說在上述例子中,如果能保證$-\frac{9\Delta}{2}<x[n]\leqslant \frac{7\Delta}{2}$,那么量化的誤差能被控制在
$-\frac{\Delta}{2}<e[n]\leqslant \frac{\Delta}{2}$
如果輸入的樣本超出規定的范圍,那么量化誤差的幅度將超出$\frac{\Delta}{2}$,這些樣本的狀態被稱為clipped,此時的量化器的狀態被稱為overloaded。
下面假設有一個余弦信號經過采樣后的離散序列表示為$x[n] = 0.99cos(n/10)$:
先采用三位的量化器($B+1=3$)對其進行量化:
可以發現該3位量化器的規定量化范圍是$(-1.125, 0.875]$,而實際樣本的范圍是$[-0.99, 0.99]$,因此會出現overloaded的情況,見上圖$e[n]$在$n=0,63,125$附近會出現較大的幅度。
如果我們采用的是一個8位量化器$B+1=8$,那么有如下量化結果:
該8位量化器的規定量化范圍為$(-\frac{257}{256}, \frac{255}{256}]$,涵蓋了樣本的范圍$[-0.99, 0.99]$,因此不會出現overloaded現象。
量化誤差的統計表示
觀察上面例子,發現在采用8位量化器的時候,量化誤差有均勻概率隨機分布的傾向。下面我們來對$n\in [0, 101000)$內的所有量化誤差進行統計,以判斷該量化誤差是否為隨機。我們這里把$(-\frac{\Delta}{2},\frac{\Delta}{2}]$分為101個區間,如果量化誤差在$(-\frac{\Delta}{2},\frac{\Delta}{2}]$內呈現均勻概率的隨機(Uniform Random),那么該101個區間中,每個區間的量化誤差數目應該都在1000左右。
從上圖可以看到雖然存在一定偏差,但是可以看到101個區間中統計得到的量化誤差數目都在1000左右。下面是以16位量化器($B+1=16$)進行量化時的分布
可以發現16位量化器比8位量化器的分布更加均勻,更加接近均勻概率密度的分布。實際上當信號是一個復雜信號的時候(語音或者音樂),通常就可以假設這些信號的量化噪聲為這種均勻概率的隨機過程。而量化位數越高,所得的分布曲線就會越接近理想的均勻概率分布(Uniform Distribution)曲線。
總結來說,量化誤差的統計表示是基於如下假設:
- 誤差序列$e[n]$是平穩隨機過程的一個樣本序列;
- 誤差序列與序列$x[n]$不相關;
- 誤差過程的隨機變量之間是不相關的,也就是說,誤差是一個白噪聲過程;
- 誤差過程的概率分布就是一個均勻概率分布。
信噪比
信噪比(SNR)主要用於判斷噪聲對原信號的污染程度,信噪比越大,則表明污染越小。
理論分析
前面的小節中已經得到了一個假設:$e[n]$是一個服從均勻概率分布的白噪聲序列,均值為$\mu=0$,其方差為
$\displaystyle{\sigma_e^2=\int_{-\Delta/2}^{\Delta/2}(e-\mu)^2\frac{1}{\Delta}de= \left.\frac{1}{3\Delta}e^3\right|_{-\Delta/2}^{\Delta/2} = \frac{\Delta^2}{12}}$
對於一個$(B+1)$的量化器,其滿幅度值為$X_m$,那么噪聲方差或者說功率為
$\sigma_e^2 = \frac{2^{-2B}X_m^2}{12}$
信噪比的定義為信號的方差對噪聲方差的比值,以db(分貝)表示:
$\color{red}{SNR_Q = 10log_{10}\left(\frac{\sigma_x^2}{\sigma_e^2}\right) = 10log_{10}\left(\frac{12\cdot 2^{2B}\sigma_x^2}{X_m^2}\right) = 6.02B+10.8-20log_{10}\left(\frac{X_m}{\sigma_x}\right)}$
從上面的式子可以看出,要提高信噪比,可以通過增加B,即增加量化器的量化位數來得到。每增加一位,就能增加約6db的信噪比。
此外,式子中還有需要特別考慮的一項
$-20log_{10}\left(\frac{X_m}{\sigma_x}\right)$
其中的$X_m$是量化范圍的一半,通常在一個實際系統中是一個固定值,$\sigma_x$是信號的標准差,不過$\sigma_x$與原信號的峰值幅度$X_p$有正關系,這意味着$X_p$越大,則$\sigma_x$就會越大,這意味着,如果$\sigma_x$越大,則$X_p$有可能會超過$X_m$,使得$e[n]$不再服從均勻分布,那么上面信噪比的式子也就不再成立;如果$\sigma_x$越小,由於這一項是負項,因此這一項會隨着$\frac{X_m}{\sigma_x}$的變大而變小,從而使得信噪比降低。
實際分析
我們這里研究實際信號的信噪比與$X_m/\sigma_x$以及$B$之間的關系。
實際的信噪比我們可以通過下面的式子進行計算得到
$\color{red}{SNR_Q = 10log_{10}\left(\frac{\sigma_x^2}{\sigma_e^2}\right) = 10log_{10}\left(\frac{\displaystyle{\frac{1}{N}\sum_{n=0}^{N-1}(x[n])^2}}{\displaystyle{\frac{1}{N}\sum_{n=0}^{N-1}(e[n])^2}}\right)}$
首先規定系統的$X_m = 1$,對於信號$x[n] = Acos(n/10)$,我們改變$A$就能改變$\sigma_x$,因此實現$X_m/\sigma_x$的改變。實際信號的信噪比與$X_m/\sigma_x$以及$B$的關系如下圖:
- 觀察發現當$X_m/\sigma_x$較大時,相鄰的曲線之間相差約為$12dB$,回顧前面的理論$SNR_Q$公式,可以發現這是因為相鄰的曲線相差的位數為$2$,$6.02B \approx 12$。
- 隨着$X_m/\sigma_x$的變小,SNR也將上升到峰值。不過$X_m/\sigma_x$的變小意味着$\sigma_x$的增大,即信號的峰值$A$的增大,當$A$大到超出量化器規定的范圍后,信號會被clipped,這會導致信噪比急速下降。
信噪比的實際應用
對於語音和音樂這樣的模擬信號,幅度分布趨向於集中在零附近,並隨着幅度的增加迅速跌落。在這些情況下,樣本幅度超過標准差$\sigma_x$的3倍或者4倍的概率非常小。例如,如果信號幅度是一個高斯型分布,那么僅有0.064%的樣本的幅度大於$4\sigma_x$。因此,為了避免信號峰值被clipped,可以在A/D轉換器之前設置濾波器和放大器的增益,以使得$\sigma_x = X_m/4$,這就能保證被clipped的信號的概率小於0.064%。那么此時的信噪比為
$SNR_Q\approx 6B-1.25dB$
在對高質量的音樂進行錄制或者重放時,如果采用的是這種系統,要獲得90~96dB的信噪比,就要求有16位的量化。但是要記住,要達到這種性能需要知道輸入信號的幅度的分布以及A/D轉換器的規定范圍,並對着兩者進行精心匹配后才能實現。
數模(D/A)轉換器
在連續時間信號的采樣與重構中我們學習過,對離散序列重構為連續的信號,可以采用低通濾波器來實現。
$X_r(j\Omega) = X(e^{j\Omega T})H_r(j\Omega)$
式中,$X(e^{j\Omega T})=X(e^{j\omega})|_{\omega = \Omega T}$為樣本序列的離散時間傅里葉變換,$X_r(j\Omega)$為重構的連續時間信號的傅里葉變換,理想重構濾波器為$H_r(j\Omega) = \left\{\begin{matrix}T, & |\Omega|<\pi/T\\0, &|\Omega|\geqslant\pi/T \end{matrix}\right.$。時域上,重構的信號與離散序列有如下關系
$x_r(t) = \displaystyle{ \sum_{n=-\infty}^{\infty}x[n]\frac{sin[\pi(t-nT)/T]}{\pi(t-nT)/T} }$
上述為一個理想D/C轉換器。不過實際的系統通常把D/C轉換分為兩個部分:
- 數模(D/A)轉換器
- 補償重構濾波器
這一節主要討論D/A轉換器。
首先我們前面說過,這里的量化所得的二進制碼字$\hat{x}_B[n]$是一個小數,用$X_m$乘以$\hat{x}_B[n]$即可得到實際的量化樣本$\hat{x}[n]$。而D/A轉換器就是A/D轉換器的逆操作:以二進制碼字序列$\hat{x}_B[n]$作為輸入,產生一個由$\hat{x}[n]$保持$T$個單位時間的階梯信號$x_{DA}(t)$。
這個過程中產生的信號變化如下
前面已經說過信號保持的脈沖響應如下:
$h_0(t) = \left\{\begin{matrix}1, & 0<t<T\\0, &else \end{matrix}\right.$
因此有
$\begin{align*}
x_{DA}(t) &= \sum_{n=-\infty}^{\infty}X_m\hat{x}_B[n]h_0(t-nT)\\
&= \sum_{n=-\infty}^{\infty}\hat{x}[n]h_0(t-nT)
\end{align*}$
補償重構濾波器
通過D/A轉換已經能得到一個連續時間的階梯信號,在頻域上有如下表示:
$\begin{align*}
X_{DA}(j\Omega) &= \mathcal{F}\left\{\sum_{n=-\infty}^{\infty}\hat{x}[n]h_0(t-nT)\right\}\\
&= \mathcal{F}\left\{\sum_{n=-\infty}^{\infty}\hat{x}[n]\delta(t-nT)*h_0(t)\right\}\\
&= \mathcal{F}\left\{\sum_{n=-\infty}^{\infty}\hat{x}[n]\delta(t-nT)\right\}\cdot\mathcal{F}\left\{h_0(t)\right\}\\
&= \left\{\sum_{n=-\infty}^{\infty}\hat{x}[n]\cdot\mathcal{F}\delta(t-nT) \right\}H_0(j\Omega)\\
&= \left\{\sum_{n=-\infty}^{\infty}\hat{x}[n]e^{-j\Omega Tn} \right\}H_0(j\Omega)\\
&= \hat{X}(e^{j\Omega T})H_0(j\Omega)
\end{align*}$
此時得到的已經是連續時間信號,但是階梯信號並不是我們最終需要的重構信號,而所需要得到的重構信號為
$X_r(j\Omega) = \hat{X}(e^{j\Omega T})H_r(j\Omega)$
因此我們可以對$x_{DA}(t)$進行補償,補償濾波器在頻域上的表示如下:
$\tilde{H}_r(j\Omega)=\frac{X_r(j\Omega)}{X_{DA}(j\Omega)}=\frac{H_r(j\Omega)}{H_0(j\Omega)}$
低通濾波器以及零階保持濾波器的頻率響應分別為:
$H_r(j\Omega)=\left\{\begin{matrix} T, &|\Omega|<\pi/T\\0, &|\Omega|\geqslant\pi/T \end{matrix}\right.\qquad H_0(j\Omega) = \frac{2sin(\Omega T/2)}{\Omega}e^{j\Omega T/2}$
因此補償濾波器的頻率響應為:
$\tilde{H}_r(j\Omega)=\left\{\begin{matrix} \frac{\pi T/2}{sin(\Omega T/2)}e^{j\Omega T/2}, &|\Omega|<\pi/T\\0, &|\Omega|\geqslant\pi/T \end{matrix}\right.$
系統的有效響應
本文主要討論利用離散時間系統處理連續時間信號的模型,上述的各個小節分別對模型中的各個模塊進行了較為詳細的分析
對該模型進行逆推能得到下面的式子
$\begin{align*}Y_r(j\Omega)&=\tilde{H}_r(j\Omega)H_0(j\Omega)Y(e^{j\omega})\qquad lowpass\ filter\ H_r(j\Omega)=\tilde{H}_r(j\Omega)H_0(j\Omega)\ for\ restruction\\
&=\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\omega})\hat{X}(e^{j\omega})\qquad LTI\ system\ frequency\ response\ H(e^{j\omega})\\
&=\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\Omega T})\mathcal{F}\{x[n]+e[n]\}\qquad \hat{x}[n]=x[n]+e[n]\\
&=\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\Omega T})(X(e^{j\omega})+E(e^{j\omega}))\\
&=\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\Omega T})\left(\frac{1}{T}\sum_{k=-\infty}^{\infty}X_a\left[ j\left(\Omega-\frac{2\pi k}{T}\right)\right ]+E(e^{j\omega})\right)\\
&=\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\Omega T})\left(\frac{1}{T}X_a(j\Omega)+E(e^{j\omega})\right) \qquad \tilde{H}_r(j\Omega)\ will\ cutoff\ entries\ k\neq 0\\
&=\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\Omega T})\left(\frac{1}{T}H_{aa}(j\Omega)X_c(j\Omega)+E(e^{j\omega})\right)
\end{align*}$
其中$H_{aa}(j\Omega)$、$H_0(j\Omega)$、$\tilde{H}_r(j\Omega)$分別為抗混疊濾波器、D/A轉換的零階保持、補償重構濾波器,$H(e^{j\Omega T})$是離散系統的頻率響應。在忽略噪聲的情況下,整個系統的有效響應為
$\color{red}{H_{eff}(j\Omega) = \frac{1}{T}\tilde{H}_r(j\Omega)H_0(j\Omega)H(e^{j\Omega T})H_{aa}(j\Omega)}$
從這個等效式子能夠看出,理論上,系統中任意一個濾波器的不完善都能由其余的項來進行補足。




















