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

时间:2011-10-17 04:46:34

标签: matlab octave nonlinear-functions nonlinear-optimization

我有几个方程式,每个方程都有各自的频率和幅度。我想将这些方程式加在一起并调整各个相位,phase1,phase2和phase3,以使eq_total的总幅度值保持在0.8之类的特定值。我知道我可以对信号进行归一化或改变垂直偏移,但是出于我的目的,我需要通过改变/找到phase1,phase2和phase3中相位的值来控制振幅,这将限制方程时的最大振幅总结。

注意:我正在使用相长和相消相位干涉来调整求和方程的最大幅度。

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,这样只需调整/找到phase1,phase2和phase3的值,eq_total中求和信号的幅度就不会超过0.8?

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

enter image description here

这是我用来编辑/测试想法的geogebra ggb文件。 (我用这个来看看我的想法是否有用)如果你想与applet动态交互,那就需要Java http://dl.dropbox.com/u/6576402/questions/ggb/sin_find_phases_example.ggb

我正在使用matlab / octave 感谢

3 个答案:

答案 0 :(得分:1)

你的例子

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。

因此:

%# 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 = @(相位)(max(abs(0.2 * cos(2 * pi * t + phase(1))+ 0.7 * cos(2 * pi * t * 9 + phase(2))+ 0.8 * cos(2 * p i * t * 5)+ verticalOffset)) - 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等;情节(EQT)

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

enter image description here

答案 1 :(得分:0)

如果我理解正确,您正试图找到阶段来改变信号的幅度。据我所知,这是不可能的。
对于信号

s = A * cos (w*t + phi)

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

此外,我认为你错过了一个“移动变量”,如上面等式中的时间t

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

答案 2 :(得分:0)

如果您将所有垂直偏移设置为-1,那么它可以解决您的问题,因为每个eq#永远不会是> 0,所以总和永远不会是> 0.8。

我知道这没有用,但我希望这会帮助您更好地理解您的问题。