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('滤波结果');

结果:

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值