FDAtool转C

来源:互联网 发布:苹果5s怎么升级4g网络 编辑:程序博客网 时间:2024/05/21 12:14


1.      首先设计低通滤波器

在simulink里面仿真


得到滤波器系数,并生成头文件:

 

 

解得差分方程

           acc_xxx(index)=-IIR_A(2)*acc_xxx(index-1)-IIR_A(3)*acc_xxx(index-2)-IIR_A(4)*acc_xxx(index-3);

           acc_xxx(index)=acc_xxx(index)+IIR_B(1)*acc_x(index)+IIR_B(2)*acc_x(index-1)+IIR_B(3)*acc_x(index-2)+IIR_B(4)*acc_x(index-3);


编写程序:

%%用来测试低通滤波器的c语言头文件    clear,clc;    load('motor(1k0320).mat')    load('acc_xx(5Hz).mat')    [len a]=size(acc_x);        MWSPT_NSEC=5;    IIR_B=[2.191480047329e-005,2.727814787772e-006,2.727814787772e-006,2.191480047329e-005];    IIR_A=[1,   -2.938376706887,    2.879344290419,  -0.9409182983008];           acc_xxx=zeros(1,len);            in=0;    acc_x_iir=zeros(1,len);    for index=1:len        if(index==1)            acc_xxx(index)=acc_xxx(index)+IIR_B(1)*acc_x(index);        elseif(index==2)            acc_xxx(index)=-IIR_A(2)*acc_xxx(index-1);            acc_xxx(index)=acc_xxx(index)+IIR_B(1)*acc_x(index)+IIR_B(2)*acc_x(index-1);        elseif(index==3)            acc_xxx(index)=-IIR_A(2)*acc_xxx(index-1)-IIR_A(3)*acc_xxx(index-2);            acc_xxx(index)=acc_xxx(index)+IIR_B(1)*acc_x(index)+IIR_B(2)*acc_x(index-1)+IIR_B(3)*acc_x(index-2);        else            acc_xxx(index)=-IIR_A(2)*acc_xxx(index-1)-IIR_A(3)*acc_xxx(index-2)-IIR_A(4)*acc_xxx(index-3);            acc_xxx(index)=acc_xxx(index)+IIR_B(1)*acc_x(index)+IIR_B(2)*acc_x(index-1)+IIR_B(3)*acc_x(index-2)+IIR_B(4)*acc_x(index-3);        end%         x(1,1)=acc_x(index);%         for i=1:MWSPT_NSEC%             y(i,1)=0;%             y(i,1)=y(i,1)+x(i,1)*IIR_B(i,1);%             y(i,1)=y(i,1)+x(i,2)*IIR_B(i,2);%             y(i,1)=y(i,1)+x(i,3)*IIR_B(i,3);%             y(i,1)=y(i,1)-y(i,2)*IIR_A(i,2);%             y(i,1)=y(i,1)-y(i,3)*IIR_A(i,3);%             y(i,1)=y(i,1)/IIR_A(i,1);%             y(i,3)=y(i,2);%             y(i,2)=y(i,1);%             x(i,3)=x(i,2);%             x(i,2)=x(i,1);%             x(i+1,1)=y(i,1);%         end%         acc_x_iir(index)=x(MWSPT_NSEC+1,1);    end    xx=acc_xxx-acc_xx(1:len)';    figure(12)     subplot(3,1,1);    plot(acc_xx(1:len));    title('FDATool');    subplot(3,1,2);        plot(acc_xxx);    title('C语言');    ylim([-0.6 0.4]);    subplot(3,1,3);    plot(xx);        ylim([-0.01 0.01]);            


 结果:



   

   

   

 

 

 

 

原创粉丝点击