均匀量化实验matlab,Matlab实现均匀量化的简单实例

教学任务是要读取一个声音文件,对前200个采样点进行4bit的均匀量化。自己在网上看了很多资料,博客,最后还是一脸茫然,最后还是自己一点一点写,

虽然也弄出了很多问题,不过最后还是依靠自己解决了,记录下这一次辛勤工作的结果。

PS:没想到matlab还可以读取声音文件,修改,和播放,再一次体验到matlab实在太强大了。

matlab实现代码如下:

clear all;

clc;

[y,fs,bits]=wavread('road.wav'); %fs得到声音信号的采样率

ft = y(:,1); %假设声音文件有两个声道,我们只分析第一个声道,如果要分析第二个声道可以改为:ft=y(:,2);

sigLength = length(ft); %获取声音长度

sound(y, fs, bits) ;%可以使用sound函数来播放声音

t=(0:sigLength-1)/fs;

figure;

plot(t(1:200), ft(1:200)),grid;

xlabel('Time(s)');

ylabel('Amplitude');

hold on;

min = 999;

max = -999;

M = 16;

for i = 1:200;

if(ft(i) < min)

min = ft(i);

end

if(ft(i) > max)

max = ft(i);

end

end

det = (max - min)/M;

m = zeros(1,M);

for i = 1:M

m(i) = min + i*det;%量化区间的端点

end

%m_i = [min m(1:M-1)]; %

%量化输出电平为量化间隔的中点:qi = (m(i)+m(i-1))/2

%q_i = (m + m_i)/2

qv = zeros(1,200);%存储200个点的均值量化后的数字化的值

node = [min-0.0001,m(1:M-1),max+0.0001];

display(node(1));

for i = 1 : 200; %声音信号的每个采样点

for j = 1:M;

if(node(j) < ft(i) && ft(i) <= node(j+1))

qv(i) = (node(j) + node(j+1))/2;

end

end

%fprintf('qv(%d) = %d\n',i,qv(i));

end

plot(t(1:200), qv(1:200),'r'),grid;

原始声音波形和量化波形效果:

e7292ff7ddf255fe63f381263a1efbe0.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值