Matlab实现均匀量化
2015-07-23 14:55
555 查看
Matlab实现均匀量化
首先读入一个音频文件的前200个点,如果音频通道大于1则只取一个通道,滤掉其余的得到音频文件的最大值和最小值,最大值和最小值的差除以2的4次方即16得到量化电平的端点间隔。
从最小值开始每次加量化电平端点间隔进行量化,最大值之上补一个边界,方便判断。
Mid Riserd 量化方法
遍历量化区间,如满足某一区间,则取其区间的中点进行量化,并进行下一个点
Mid Tread量化方法
遍历量化电平正负半个端点间隔,如满足该区间,则取该量化端点
输出两者和原来信号进行对比分析。
实现效果
运行效果图:红色的是原始声音信号的波形
蓝色的是4 bits量化后的波形
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/11/1f9a0d5b93039c1b4fc2ac9a87c776b7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/11/88552899c7808863fc7673088fa982fe.png)
代码实现
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');
相关文章推荐
- Matlab 曲线绘制之线型和颜色 示例
- 聚类分析-K均值matlab(一)
- 车牌字符识别OCR算法评估
- matlab之简单粒子群的函数寻优
- Matlab绘图
- C语言与MATLAB接口 编程与实例
- matlab 图像处理函数(第八章) 图像的增强
- matlab GPU 操作
- MATLAB 图像函数(第七章) 图像的代数运算
- MATLAB 图像处理函数(第六章)(获取图像矩形像素的运用)
- 利用matlab如何在图形中绘制箭头
- 如何安装Matlab版libsvm
- matlab中repmat函数的用法
- matlab文件编译成库在C++环境下使用遇到的问题记录
- MATLAB数值取整
- set使用
- matlab norm的使用
- Matlab
- Matlab 常用绘图指令(二维图形)
- Matlab保存图像的方法