2

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

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

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 小程序的图片。

在此处输入图像描述

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

我正在使用 matlab/octave 谢谢

4

3 回答 3

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); 垂直偏移=0;目标函数 = @(相位)(最大值(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‌​et; 情节(当量)

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

在此处输入图像描述

于 2011-10-17T14:59:12.157 回答
0

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

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

A允许您更改幅度。随着w您改变信号的频率并phi调节“水平偏移”。

此外,我认为您缺少一个“移动变量”,例如t上面等式中的时间。

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

于 2011-10-17T06:09:04.660 回答
0

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

我知道这没什么帮助,但我希望这能帮助您更好地理解您的问题。

于 2011-10-17T09:56:46.977 回答