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; 
原始声音波形和量化波形效果:

Matlab实现均匀量化的简单实例_第1张图片

你可能感兴趣的:(通信原理)