matlab对音频均匀量化

来源:互联网 发布:sqlserver 默认值约束 编辑:程序博客网 时间:2024/05/17 22:23

首先,必须深刻理解quantier这个函数的应用,它的基本思想是将浮点数转化为定点,中间是二进制的过度过程。

对于quantizer后面两个参数[a,b],a代表整数的(二进制表示)字长,b代表小数(二进制表示)的幂长。

转载下面的例子便于理解:



浮点转换为定点的过程在Matlab中称为量化,使用quantizer和quantize两个函数完成。

(1)、quantizer用于定义数据的量化属性

(2)、quantize则按照quantizer定义的量化属性量化浮点数据。

    下面举一个例子:

x = [3.5 1.5 6 20.8 -128.25 127.75];
qpath = quantizer('fixed','round','saturate',[10,2]);
fix_x = quantize(qpath,x);

    运行后fix_x结果为:

fix_x =

    3.5000    1.5000    6.0000   20.7500 -128.0000  127.7500

    其中-128.25溢出了,这里设置溢出后为饱和输出,所以为-128。

    具体关于quantizer和quantize函数的使用说明请参考Matlab的help文件



好了,下面对于均匀量化过程

syms sample_point;syms quantizion_bits;syms mmid_riser;sample_point = 200;quantizion_bits = 4;[y,fs,nbits]=wavread('E:\大二下\通信原理\实验五\road.wav',sample_point);sample = y(1:sample_point);q_riser = quantizer('fixed','round','saturate',[9,quantizion_bits]);q_tread = quantizer('fixed','floor','saturate',[9,quantizion_bits]);  %这里特别注意不能用round,请自己思考为什么mid_riser = quantize(q_riser,sample);%对采样信号进行量化for i=1:sample_point    mid_riser(i) = mid_riser(i) + power(1/2,quantizion_bits)/2;    %mid_riser(i) = 0.1;    endmid_tread = quantize(q_tread,sample);%对采样信号进行量化subplot(1,2,1);  plot(n,sample,'r',n,mid_riser,'b'); title('Mid-Riser');legend('original singal','quantized at 4 bits');grid;subplot(1,2,2);  plot(n,sample,'r',n,mid_tread,'b'); title('Mid-Tread');legend('original singal','quantized at 4 bits');grid;



1 0
原创粉丝点击