均匀量化(Matlab)

所谓均匀量化,就是把输入信号的取值域按照等距离分割成2^n分,其中n为量化位数。

  1. 均匀量化设计以及实现
    在均匀量化时,我们假设模拟抽样信号的取值范围为Min ~ Max,量化电平数为M = 2^n_bits,则在均匀量化时的量化间隔为delv = (Max - Min)/M
    量化区间的端点是:m(i) = Min + i*delv
    量化间隔的中点为:q(i) = (m(i) + m(i-1))/2 i = 1,2,3,……,M
  2. 均匀量化可以分为向上取整(Mid-Riser)以及向下取整(Mid-Tread)两种
    a. 向上取整
    通过遍历量化区间,如果在某个点的声波值满足在某一个区间之内,那么久取该区间的中点进行量化。
    b. 向下取整
    通过遍历来那个量化电平正负半个端点间隔,如果某个点的声波满足该区间,则去该端点的值进行量化。具体实现如下图
  3. 具体代码:
clear all;
close all;
clc;
% 读取声音波形
wav = wavread('road.wav',200 );
% 读取声音左声道
wav = wav(:,1);
figure;
plot(wav,'r'); hold on
% 找出波形最大最小值
Max = max(wav);
Min = min(wav);
delv = (Max - Min)/2^4;
for i = 1 :2^4+1;
    m(i) = Min + delv*(i - 1);
end
% 向上取整
wav_riser = wav;
for i = 1 : 200;
    for j = 1:2^4
        if wav_riser(i) >= m(j) && wav_riser(i) <= m(j+1)
            wav_riser(i) = (m(j) + m(j+1))/2;
            break
        end
    end
end
% 画出量化之后的声波
plot(wav_riser,'b'):title('上取整');hold off
% 向下取整
wav_tread = wav;
for i = 1: 200;
    for j = 1 : 2^4;
       if wav_tread(i) >= (m(j) - 1/2*delv) && wav_tread(i) <= (m(j) + 1/2*delv)
         wav_tread(i) = m(j);
         break
        end
    end
end
% 画出原声波以及量化之后的声波
figure;
plot(wav,'r'); hold on
plot(wav_tread,'g'):title('下取整');hold off

最终效果图
上取整
下取整

  • 4
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值