⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bianyima.m

📁 该程序在matlab环境下完成抽样量化编码功能(非均匀量化)。
💻 M
字号:
function f=bianmahanshu()%整合后的编码函数
i=-0.1:0.001:0.1;
yuan=sinc(200/pi*i).^2;
fmax=pinpu();
t=-0.1:1/(2*fmax):0.1;
chouyangzhi=chouyang(fmax);
yasuozhi=yasuo(chouyangzhi,fmax);
bianmazhi=lianghua(yasuozhi);
subplot(3,3,1);
plot(i,yuan);
title('原函数图象');
subplot(3,3,2);
stem(t,chouyangzhi);
title('抽样值');
f=bianmazhi;
end
function f=pinpu()%连续函数频谱计算函数,返回最高截止频率fm值
step=0.001;
t=-10:step:10;
A=sinc(200/pi*t).^2;
B=[];
fm=0;
Y=fft(A);%快速傅立叶变换
Y(1)=[];%去掉无效的第一项
N=length(Y);
B=abs(Y(1:1:N/2));%求模值
for i=1:1:N/2%搜索最高截止频率fm所在单元
    if B(i)<B(1)*10^(-5)
        fm=i;
        break;
    else continue;
    end
    
end
f=fm/N*(1/step);%得到fm值
freq=1/N*(1/step):1/N*(1/step):1/2*(1/step);%频率横坐标刻度定义
subplot(3,3,3);
plot(freq,B);%作单边频谱
title('原信号单边频谱');
end

function f=chouyang(fm)%fm为原信号最大频率,由频谱函数反馈得到
B=[];
fs=2*fm;%fs为抽样频率
s=1/fs;%s为抽样步长
t=-0.1:s:0.1;
B=sinc(200/pi*t).^2;
f=B;
stem(t,B);%画抽样后信号的点状图
end
function f=yasuo(A,fm)%非均匀压缩
B=[];
t=-0.1:1/(2*fm):0.1;
for i=1:1:length(A)
    A(i)=2048*A(i);%放大使得各分段判决值为整数
    if abs(A(i))<=32%在绝对值较小两段的变换
        B(i)=A(i)*(1/16);
    else for j=3:1:8%其余段的变换
    if abs(A(i))>=2^(j+2)&abs(A(i))<=2^(j+3)
        B(i)=(A(i)-16*2^(j-1))*(1/(16*2^(j-2)))+j;%变换函数
    else continue;
    end
 end
end
B(i)=B(i)/8;%归一化
end
f=B;
subplot(3,3,4)
stem(t,B)
title('压缩器输出信号')
end
function f=lianghua(A)%均匀量化及编码函数
B=[];
C=[];
for i=1:1:length(A)
    A(i)=A(i)*128;%放大以便使得判决值为整数
        if A(i)>0%极性码编码
            B((i-1)*8+1)=1;
        else   B((i-1)*8+1)=0;
            A(i)=abs(A(i))%取绝对值
        end
     for j=2:1:8%后7位码编码
            k=(i-1)*8+j;%编码序列序号
            if A(i)>=2^(8-j)%逐级反馈编码
                A(i)=A(i)-2^(8-j);
                B(k)=1;
            else B(k)=0;
            end
     end
end
    f=B;%返回编码结果
end
function f=yimahanshu(bianmazhi)%译码主函数
fm=64;
fs=2*fm;
t=-0.1:1/fs:0.1;
junyunyima=yima(bianmazhi,fm);%调用均匀译码函数
yimazhi=kuozhang(junyunyima,fm);%调用扩张器特性函数
subplot(3,3,6);
stem(t,junyunyima);
title('均匀译码输出信号图象');
subplot(3,3,7);
stem(t,yimazhi);
title('最终A率13折线译码')
f=yimazhi;%返回译码值
end%主程序结束
function f=yima(M,fm)%均匀八位码译码
B=[];
t=-0.1:1/(2*fm):0.1;
for i=1:1:length(M)/8
    if M((i-1)*8+1)==1%极性判断
        sgn=1;
    else sgn=-1;
    end
    B(i)=0;
    for j=2:1:8
        B(i)=B(i)+2^(8-j)*M((i-1)*8+j)+0.5;%译码函数
    end
    B(i)=sgn*B(i)/128;%归一化
end
f=B;
stem(t,B);%译码结果点状图
end
function f=kuozhang(A,fs)%扩张器特性函数
B=[];
fm=0;
t=-0.1:1/(2*fs):0.1;
for i=1:1:length(A)
    A(i)=8*A(i);%将输入值放大到0到8之间
    B(i)=0;
    if abs(A(i))<=2%在第一,二两段的变换
        B(i)=A(i)*16;
   end
        for j=3:1:8%在其余各段的变换
            if abs(A(i))>=8
              B(i)=2048;
            end
          if abs(A(i))>(j-1)&abs(A(i))<=j%确定所在段
             B(i)=(A(i)-j+1)*2^(j+2)+2^(j+2);%变换函数式
             else continue;
          end
        end
B(i)=B(i)/2048;
end
stem(t,B);
f=B;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -