量化誤差信號的直方圖(Plot histogram of error signals)_自相關及交叉相關(Autocorrelation and Cross-correlation)

量化誤差(error signals)

量化誤差是指原始信號與量化信號之間的差異
對於給定的位元/樣本數(7、4、2 和 1),計算原始語音信號和量化後語音信號之間的差異。



針對指定的bits數陣列進行尋訪,垂直呈現量化誤差直方圖。
延續使用之前自定義的量化函數 UquantAudio 對信號進行量化

量化誤差程式碼
% 讀取原始語音信號
[speech, Fs_speech] = audioread('speech.au');


% 設定量化的位元/樣本
bits = [7, 4, 2, 1];

% 創建一個新圖形來繪製直方圖
figure;
orient tall;

% 計算並繪製每個量化誤差信號的直方圖
for i = 1:length(bits)
    % 量化語音信號
    quantized_speech = UquantAudio(speech, 2^bits(i));
    % 計算誤差
    error_signal = speech - quantized_speech;
    
    % 使用 subplot 在同一圖形中繪製直方圖
    subplot(4,1,i);
    hist(error_signal, 20);
    title(['誤差直方圖 - ', num2str(bits(i)), ' 位元/樣本']);
end

% 保存直方圖圖片
saveas(gcf, 'error_histograms.png');



從顯示圖可觀察到,當量化級別較少時(如1位元/樣本),誤差分布可能會更廣泛,顯示出更大的誤差範圍。

7位元量化誤差直方圖:
顯示了當信號被量化到128個可能的級別時(2的7次方)的誤差分布。
誤差值範圍較小,分布相對均勻,這表明在高量化級別下誤差較小且分布平均。

4位元量化誤差直方圖:
當信號被量化到16個級別(2的4次方)時的誤差分布更為集中。
誤差的絕對值增加了,這是因為隨著量化級別的減少,可能的誤差範圍擴大了。


2位元量化誤差直方圖:
在僅僅只有4個級別(2的2次方)下誤差分布非常極端。
大多數誤差集中在四個明顯的峰值附近,這些峰值對應於可用量化級別之間的間隔。

1位元量化誤差直方圖
可以看到大量的誤差集中在兩個極端的峰值上,反映所有的信號樣本要麼被量化到了一個低極值,要麼被量化到了另一個極高值。


結論:
隨著量化級別的降低,誤差的變異性增加,且誤差分布越來越遠離均勻分布



自相關及交叉相關(Autocorrelation and Cross-correlation)

無論是「自相關」或者「交叉相關」都可以用來識別信號中的特徵和模式,是信號處理中兩種衡量信號相關性的重要函數。

自相關(Autocorrelation)與量化級別的影響
用來分析信號中重複模式(比方:週期性),描述信號與其自身在不同時間延遲下的相關程度。
自相關函數估計可能會顯示出隨著量化級別的減少,誤差信號中的樣本可能變得更加相關。

較生活化舉例:

假設你有一首歌的旋律固定在你的腦海中,而這首歌有一個非常明顯的重複節奏,像是節拍的重複。自相關就像是一種測量,用於找出這首歌中節奏重複出現的程度和頻率。

在數學上,你可以通過將這首歌與它自己在不同時間點的版本進行比較來計算這種重複性。
如果在每個節拍之間的時間延遲下,這首歌的旋律與它自己非常相似,則自相關值會很高,這表明歌曲有很強的周期性。



交叉(互)相關(Cross-correlation)與量化級別的影響
可顯示一個信號在另一個信號中的存在及其延遲。交叉相關函數衡量兩個信號在不同時間延遲下的相似度

交叉相關函數估計可能會顯示出量化級別的減少影響了量化語音信號與量化誤差信號之間的關聯性。當量化級別較高時,誤差較小,可能不會顯示出強烈的相關性,但隨著量化級別的降低,誤差增加,交叉相關可能變得更加明顯。

較生活化舉例:

想像你在聽兩個不同的樂器演奏的旋律,並且想知道它們之間是否存在某種同步性或是一個樂器是否在跟隨另一個樂器演奏。交叉相關就像是測量兩個樂器之間的旋律如何隨時間相互關聯的方法。

如果當一個樂器開始演奏某個旋律時,另一個樂器隨後以相同或類似的旋律回應,那麼在這個時間延遲下,交叉相關值會很高,這意味著兩個樂器之間存在一定程度的同步或相關性。

自相關及交叉相關程式碼
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
% 讀取原始語音信號
[speech, Fs_speech] = audioread('speech.au');

% 計算並繪製自相關估計
figure;
for i = 1:length(bits)
    error_signal = speech - UquantAudio(speech, 2^bits(i));% 計算量化誤差
    [r, lags] = xcorr(error_signal, 200, 'unbiased');% 計算自相關,200表示計算自相關時考慮的最大延遲,unbiased 表示使用無偏估計的方法。
    subplot(4,1,i);% 將圖形窗口分割為4個子圖,選擇第i個
    plot(lags, r);% 繪製自相關函數
    title(['自相關估計 - ', num2str(bits(i)), ' 位元/樣本']);
end

% 保存自相關圖片
saveas(gcf, 'autocorrelation_estimates.png');

% 計算並繪製交叉相關估計
figure;
for i = 1:length(bits)
    quantized_speech = UquantAudio(speech, 2^bits(i));% 獲取量化後的語音信號
    error_signal = speech - quantized_speech;% 計算量化誤差
    [c, lags] = xcorr(error_signal, quantized_speech, 200, 'unbiased');% 計算交叉相關
    subplot(4,1,i);
    plot(lags, c);% 繪製交叉相關函數
    title(['交叉相關估計 - ', num2str(bits(i)), ' 位元/樣本']);
end

% 保存交叉相關圖片
saveas(gcf, 'crosscorrelation_estimates.png');

lags 是自相關函數的延遲軸,r 是自相關值。
以下是針對speech.au音檔的波形圖呈現






留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header