我有几个方程式,每个方程都有各自的频率和幅度。我想将这些方程式加在一起并调整各个相位,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的图片,我用这个想法测试了这个想法。
这是我用来编辑/测试想法的geogebra ggb文件。 (我用这个来看看我的想法是否有用)如果你想与applet动态交互,那就需要Java http://dl.dropbox.com/u/6576402/questions/ggb/sin_find_phases_example.ggb
我正在使用matlab / octave 感谢
答案 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轴是最大值)。
答案 1 :(得分:0)
如果我理解正确,您正试图找到阶段来改变信号的幅度。据我所知,这是不可能的。
对于信号
s = A * cos (w*t + phi)
只有A
允许您更改幅度。使用w
,您可以更改信号的频率,phi
可以调整“水平移位”。
此外,我认为你错过了一个“移动变量”,如上面等式中的时间t
。
也许this文章澄清了一些事情。
答案 2 :(得分:0)
如果您将所有垂直偏移设置为-1,那么它可以解决您的问题,因为每个eq#
永远不会是> 0,所以总和永远不会是> 0.8。
我知道这没有用,但我希望这会帮助您更好地理解您的问题。