刚做了 哈哈 等一下 发给你 有问题再追问我
%幅度
c1=[数据];
c=c1/c(1);
%相位
w=[数据,注意单位是度]/180*pi;
%for语句的功能和下面那行H=c.*exp(i*w');是一样的,将幅度和相位转化成复数点
%for k=1:length(c)
% a(k)=c(k)*cos(w(k));
% b(k)=c(k)*sin(w(k));
% y(k)=a(k)+b(k)*i;
%end
%下面这行注意去掉(加上)点乘,和矩阵的运算有关
H=c.*exp(i*w');
%频率
x1=[数据];
%换成单位是rad/s
x=2*pi*x1;
%换成单位是dB
yy=20*log10(c);
%拟合传函,你可以help invfreqs看看这个函数怎么用
%invfreqs里面的2,3分别是分子分母的阶数
%[]和12是使得拟合出的传函是稳定的
%12是迭代次数(尽量高,但高了也可能跑不出来)
[num,den]=invfreqs(H,x,2,3,[],12);
G=tf(num,den);
%[z,p,k]=tf2zp(num,den) ;
%num,den和z,p,k是传函的两种形式
figure(1)
%下面这行是画数据点图,可以不要
%plot(x1,yy)
%将横坐标画为对数坐标
%semilogx(x1,yy)
%hold on
%画bode图
bode(G)