Matlab實現均勻量化


Matlab實現均勻量化

首先讀入一個音頻文件的前200個點,如果音頻通道大於1則只取一個通道,濾掉其余的
得到音頻文件的最大值和最小值,最大值和最小值的差除以2的4次方即16得到量化電平的端點間隔。
從最小值開始每次加量化電平端點間隔進行量化,最大值之上補一個邊界,方便判斷。

  1. Mid Riserd 量化方法
    遍歷量化區間,如滿足某一區間,則取其區間的中點進行量化,並進行下一個點
  2. Mid Tread量化方法
    遍歷量化電平正負半個端點間隔,如滿足該區間,則取該量化端點

輸出兩者和原來信號進行對比分析。

實現效果

運行效果圖:
紅色的是原始聲音信號的波形
藍色的是4 bits量化后的波形

1

2

代碼實現

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');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM