我有几个方程式,每个方程式都有自己的频率和振幅。我想将这些方程相加,并调整各个相位、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的问题,使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,谢谢
发布于 2011-10-17 22:59:12
你的例子
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 =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)+verticalOffset;图(Eqt)
fminsearch会找到目标函数的最小值。这个解决方案是否满足您的所有条件是您必须测试的东西。在这种情况下,fminsearch给出的初始值为[0;0]的解决方案的最大值为~1.3,这显然不够好。但是,当您绘制从0到2pi的相位角范围的最大值时,您将看到` `fminsearch没有陷入糟糕的局部最小值。相反,根本没有好的解决方案(z轴是最大值)。

发布于 2011-10-17 14:09:05
如果我没理解错的话,你是想找一个相位来改变信号的振幅。据我所知,这是不可能的。
对于一个信号
s = A * cos (w*t + phi)只有A允许您更改振幅。使用w,您可以改变信号的频率,而phi会调整“水平移位”。
此外,我认为你在上面的等式中遗漏了一个“移动变量”,比如time t。
也许this的文章澄清了一些事情。
发布于 2011-10-17 17:56:47
如果您将所有垂直偏移量设置为等于-1,那么它就解决了您的问题,因为每个eq#永远不会大于0,因此和永远不会大于0.8。
我知道这不是很有帮助,但我希望这能帮助你更好地理解你的问题。
https://stackoverflow.com/questions/7789478
复制相似问题