0
点赞
收藏
分享

微信扫一扫

matlab仿真运算中的字长效应

%仿真运算中的字长效应
clc;
clear all;
close all;
x=[7/8 zeros(1,15)];%一维数组,第一个值为7/8,剩下15个为0;
y=zeros(1,length(x));%zeros:产生一个1行,length(x)列的0矩阵;
Qy=zeros(1,length(x));%存放未量化运算结果
Qy2=zeros(1,length(x));%存放2bit量化运算结果
Qy4=zeros(1,length(x));%存放4bit量化运算结果
Qy6=zeros(1,length(x));%存放6bit量化运算结果
%系统系数
A=0.5;
b=[1];
a=[1,A];
%未经过量化处理的运算
for i=1:length(x);
    if i==1
        y(i)=x(i);
    else
        y(i)=-A*y(i-1)+x(i);
    end
end

%经过2bit量化处理的运算
B=2;
for i=1:length(x);
    if i==1
        Qy(i)=x(i);
        Qy(i)=round(Qy(i)*(2^(B-1)))/2^(B-1);
        %round:四舍五入取整函数;
    else
        Qy(i)=-A*Qy(i-1)+x(i);
        Qy(i)=round(Qy(i)*(2^(B-1)))/2^(B-1);
    end
end
Qy2=Qy;

%经过4bit量化处理的运算
B=4;
for i=1:length(x);
    if i==1
        Qy(i)=x(i);
        Qy(i)=round(Qy(i)*(2^(B-1)))/2^(B-1);
        %round:四舍五入取整函数;
    else
        Qy(i)=-A*Qy(i-1)+x(i);
        Qy(i)=round(Qy(i)*(2^(B-1)))/2^(B-1);
    end
end
Qy4=Qy;

%经过6bit量化处理的运算
B=6;
for i=1:length(x);
    if i==1
        Qy(i)=x(i);
        Qy(i)=round(Qy(i)*(2^(B-1)))/2^(B-1);
        %round:四舍五入取整函数;
    else
        Qy(i)=-A*Qy(i-1)+x(i);
        Qy(i)=round(Qy(i)*(2^(B-1)))/2^(B-1);
    end
end
Qy6=Qy;

xa=0:1:length(x)-1;
plot(xa,y,'-',xa,Qy2,'--',xa,Qy4,'o',xa,Qy6,'+');
legend('原系统运算结果','2bit量化运算结果','4bit量化运算结果','6bit量化运算结果');
%legend:按顺序在坐标区上添加图例;
xlabel('运算次数');
ylabel('滤波结果');

结果:

 很明显,位数越高,振荡值越小。

举报

相关推荐

0 条评论