声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1700|回复: 6

[编程技巧] 循环语句的化简和工具箱调用的问题

[复制链接]
发表于 2011-4-19 16:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 hancy 于 2011-4-19 17:51 编辑

下面是我写的一个半功率法求阻尼的小程序。对频谱数据用CFToolbox二次拟合后会得到p1、p2和p3的值,进而求出阻尼。
问题1:程序里循环语句部分是基于C语言基础写的,但看过eight前辈的一个帖子说的Matlab用矩阵运算更简便,想求助大神们我的程序里的循环语句能够怎么化简啊,我自己试了几次都不成功。
问题2:每次调用工具箱我都是点击左下角的Start,而且算得的参数p1、p2和p3都要复制到下面程序里才能使用,感觉很繁琐。有没有方法用程序调用工具箱然后直接输出参数呐?
先谢谢大家了~

<
x=5:0.001:15;
f(y) = p1*x^2 + p2*x + p3;      
[v0,p0]=max(f);        %功率最大值及横坐标
vh=v0/sqrt(2);         %半功率点幅值
n=length(f);t=1:n;
plot(t,f);
%循环语句,求出半功率点的横坐标
j=0;
for i=1:n-1;
    a=f(i)-vh;
    b=f(i+1)-vh;
    if a*b<=0
       j=j+1;
       if abs(a)<abs(b)
          p(j)=t(i);
          v(j)=f(i);
       else
          p(j)=t(i+1);
          v(j)=f(i+1);
       end
    end
end
[p0;v0]
[p;v]
C=(p(2)-p(1))/(2*p0)     %求阻尼
>
回复
分享到:

使用道具 举报

发表于 2011-4-19 17:26 | 显示全部楼层
1.你没有写注释,看起来比较麻烦,你还是自己向量化吧
2.cftool可以生成代码供重复调用的,点击file--->Generate code
 楼主| 发表于 2011-4-19 17:43 | 显示全部楼层
回复 2 # qibbxxt 的帖子

谢谢指导。
写注释要中英文切换,一直嫌麻烦就没写过。不过不写注释确实是个坏习惯,以后改正!
发表于 2011-4-20 00:29 | 显示全部楼层
回复 1 # hancy 的帖子

1.考量下使用find
2.求阻尼, 有需要一定先拟合吗?
3.求阻尼, 用二次多项式拟合, 合适吗?
不懂, 仅提个人疑问
 楼主| 发表于 2011-4-20 10:20 | 显示全部楼层

感谢你的关注~
1.确实试过find,不过没成功。于是尝试将连续函数变成向量,程序里f实际上是一个向量,而不是一个连续函数(程序开头部分没写完整。。)。
2.原始数据是离散点,经过FFT后得到频谱,频率幅值最大处两边不完全对称,甚至根本不对称,直接用半功率法得不到好的结果。现在流行的是拟合后得到光滑曲线,尽量使峰值两边对称。
3.频率到阻尼是二次关系,而且二次函数有对称轴。不过原来我为了拟合尽可能多的数据,尝试过用高次拟合,但拟合后波峰偏移的厉害,于是改成二次拟合了。现在也是困扰我的一个方面。
发表于 2011-4-20 23:23 | 显示全部楼层
还是建议楼主查阅些关于阻尼的资料,还是先确定阻尼的大概形式以后再选取拟合形式,数据拟合和你使用的拟合方程形式有很大关系。纯属自己的个人意见仅从数据拟合来考虑的!
发表于 2011-4-21 00:17 | 显示全部楼层
为何有这些疑问
2.求阻尼, 有需要一定先拟合吗?
不是採多次平均即可??
3.求阻尼, 用二次多项式拟合, 合适吗?
二次多项式可以拟合FRF那个尖尖的peak吗??
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 20:32 , Processed in 0.064645 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表