首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求解多个方程的多个相角

求解多个方程的多个相角
EN

Stack Overflow用户
提问于 2011-10-17 12:46:34
回答 3查看 601关注 0票数 2

我有几个方程式,每个方程式都有自己的频率和振幅。我想将这些方程相加,并调整各个相位、phase1、phase2和phase3,以使eq_total的总振幅值保持在一个特定值以下,如0.8。我知道我可以标准化信号或更改垂直偏移,但出于我的目的,我需要通过更改/查找phase1、phase2和phase3中的相位值来控制振幅,这些值将限制方程求和时的最大振幅。

注意:我使用建设性和破坏性相位干涉来调整求和方程的最大振幅。

代码语言:javascript
复制
Example:
eq1=0.2*cos(2pi*t*3+phase1)+vertical offset1
eq2=0.7*cos(2pi*t*9+phase2)+vertical offset2
eq3=0.8*cos(2pi*t*5+phase3)+vertical offset3

eq_total=eq1+eq2+eq3

有没有一种方法可以解决phase1、phase2和phase3的问题,使eq_total中的求和信号的振幅不会超过0.8,只需调整/找到phase1、phase2和phase3的值?

这是一张我用来测试这个想法的geogebra applet的图片。

这是我用来编辑/测试idea的geogebra ggb文件。(我用它来看看我的想法是否可行)如果您想要与小程序http://dl.dropbox.com/u/6576402/questions/ggb/sin_find_phases_example.ggb进行动态交互,则需要Java

我正在使用matlab/octave,谢谢

EN

回答 3

Stack Overflow用户

发布于 2011-10-17 22:59:12

你的例子

代码语言:javascript
复制
eq1=0.2*cos(2pi*t*3+phase1)+vertical offset1
eq2=0.7*cos(2pi*t*9+phase2)+vertical offset2
eq3=0.8*cos(2pi*t*5+phase3)+vertical offset3

eq_total=eq1+eq2+eq3

其中最大振幅应小于0.8,有无限多个解。除非您有其他想要实现的目标,否则我建议您修改该问题,以便找到最大振幅恰好为0.8 (或0.79,这样就可以保证低于)的相位角组合。

此外,三个相位角中只有两个是独立的;如果你全部增加,比如说pi/3,解决方案仍然有效。因此,在eq_total中只有两个未知数。

你可以使用FMINSEARCH来解决非线性优化问题。您可以将问题公式化,使max(abs(eq_total(phase1,phase2)))等于0.79。

因此:

代码语言:javascript
复制
%# define the vector t, verticalOffset here

%# objectiveFunction is (eq_total-0.79)^2, so the phase shifts 1 and 2 that
%# satisfy this (approximately) should guarantee that signal never exceeds 0.8
objectiveFunction = @(phase)(max(abs(0.2*cos(2*pi*t+phase(1))+0.7*cos(2*pi*t*9+phase(2))+0.8*cos(2*pi*t*5)+verticalOffset)) - 0.79)^2;
%# search for optimal phase shift, starting at no shift
solution = fminsearch(objectiveFunction,[0;0]);

编辑

不幸的是,当我尝试这段代码并绘制结果时,最大振幅不是0.79,而是大于1。我做错了什么吗?参见以下代码: t=linspace(0,1,8000);verticalOffset=0;objectiveFunction =t=linspace- 0.79)^2;s1 = fminsearch(objectiveFunction,0;0) eqt=0.2*cos(2*pi*t+s1(1))+0.7*cos(2*pi*t*9+s1(2))+0.8*cos(2*pi*t*5)+verticalOffs‌​et;图(Eqt)

fminsearch会找到目标函数的最小值。这个解决方案是否满足您的所有条件是您必须测试的东西。在这种情况下,fminsearch给出的初始值为[0;0]的解决方案的最大值为~1.3,这显然不够好。但是,当您绘制从0到2pi的相位角范围的最大值时,您将看到` `fminsearch没有陷入糟糕的局部最小值。相反,根本没有好的解决方案(z轴是最大值)。

票数 1
EN

Stack Overflow用户

发布于 2011-10-17 14:09:05

如果我没理解错的话,你是想找一个相位来改变信号的振幅。据我所知,这是不可能的。

对于一个信号

代码语言:javascript
复制
s = A * cos (w*t + phi)

只有A允许您更改振幅。使用w,您可以改变信号的频率,而phi会调整“水平移位”。

此外,我认为你在上面的等式中遗漏了一个“移动变量”,比如time t

也许this的文章澄清了一些事情。

票数 0
EN

Stack Overflow用户

发布于 2011-10-17 17:56:47

如果您将所有垂直偏移量设置为等于-1,那么它就解决了您的问题,因为每个eq#永远不会大于0,因此和永远不会大于0.8。

我知道这不是很有帮助,但我希望这能帮助你更好地理解你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7789478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档