用实验数据画伯德图

只有实验数据,没有传递函数,用matlab画伯德图,求代码

第1个回答  2015-07-16
刚做了 哈哈 等一下 发给你 有问题再追问我

%幅度
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)追问

c是什么?采集点数吗?

追答

幅度啊 你的数据应该是幅度和相位吧 没有这两个和对应的频率是没办法拟合传函的

追问

我的数据是两个界面上互成90度的方向的振幅,以及对应的频率,

追答

博德图包含的内容就是幅度和相位,是代表输入与输出之间的关系,我觉得你应该先把你的原数据处理一下,处理成幅度和相位的数据之后,才能拟合和画图,处理应该很简单吧,估计你用excel都可以做
要不然,你试试sisotool里面的导入数据,导入之后可以直接画,但我不知道它能导入的是什么样的数据,估计很可能不是你这个数据

本回答被提问者采纳
相似回答