Matlab實現均勻量化
首先讀入一個音頻文件的前200個點,如果音頻通道大於1則只取一個通道,濾掉其余的
得到音頻文件的最大值和最小值,最大值和最小值的差除以2的4次方即16得到量化電平的端點間隔。
從最小值開始每次加量化電平端點間隔進行量化,最大值之上補一個邊界,方便判斷。
- Mid Riserd 量化方法
遍歷量化區間,如滿足某一區間,則取其區間的中點進行量化,並進行下一個點 - Mid Tread量化方法
遍歷量化電平正負半個端點間隔,如滿足該區間,則取該量化端點
輸出兩者和原來信號進行對比分析。
實現效果
運行效果圖:
紅色的是原始聲音信號的波形
藍色的是4 bits量化后的波形
代碼實現
clear all
clc
% 量化位數
n_bits = 4;
% 讀入原始文件的左聲道前200個點
WAV = wavread('road.wav', 200);
WAV = WAV( : ,1);
figure;
plot(WAV, 'r');hold on
% 設置量化電平參數
MAX_VALUE = max(WAV);
MIN_VALUE = min(WAV);
MID_VALUE = (MAX_VALUE - MIN_VALUE) / 2^n_bits;
for i = 1 : 2^n_bits + 1
m(i) = MIN_VALUE + MID_VALUE * (i - 1);
end
%% Mid Riser的量化方法
WAV1 = WAV;
for i = 1 : 200
for j = 1 : 2^n_bits
% 取分界點的中點
if WAV1(i) >= m(j) && WAV1(i) <= m(j+1)
WAV1(i) = (m(j) + m(j+1)) / 2;
break
end
end
end
plot(WAV1, 'b');hold off % 輸出並對比
title('Mid Riser');
%% Mid Tread的量化方法
figure;
plot(WAV, 'r');hold on
WAV2 = WAV;
for i = 1 : 200
for j = 1 : 2^n_bits
% 取某一分界點
if WAV2(i) >= (m(j) - 1/2 * MID_VALUE) && WAV2(i) <= (m(j) + 1/2 * MID_VALUE)
WAV2(i) = m(j);
break
end
end
end
plot(WAV2, 'b');hold off % 輸出並對比
title('Mid Tread');