Решение нескольких фазовых углов для нескольких уравнений - PullRequest
2 голосов
/ 17 октября 2011

У меня есть несколько уравнений, и у каждого свои индивидуальные частоты и амплитуды.Я хотел бы суммировать уравнения вместе и настроить отдельные фазы, фаза 1, фаза 2 и фаза 3, чтобы значение полной амплитуды 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

Есть ли способ решить для фазы 1, фазы 2 и фазы 3, чтобы амплитуда суммированных сигналов в eq_total никогда не превышала 0,8, просто настраивая / находя значения фазы 1, фазы 2 и фазы 3?

Вот изображение апплета геогебры, с которым я проверил эту идею.

enter image description here

Вот файл геогебры ggb, с которым я редактировал / тестировал идею.(Я использовал это, чтобы посмотреть, сработает ли моя идея). Java требуется, если вы хотите динамически взаимодействовать с апплетом http://dl.dropbox.com/u/6576402/questions/ggb/sin_find_phases_example.ggb

Я использую matlab / octave. Спасибо

Ответы [ 3 ]

1 голос
/ 17 октября 2011

Ваш пример

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]);

EDIT

К сожалению, когда я пытаюсьэтот код и график результатов максимальная амплитуда не 0,79 это больше 1. Я делаю что-то не так?см. код ниже t = linspace (0,1,8000);verticalOffset = 0;targetFunction = @ (phase) (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 (targetFunction, [0; 0]) eqt = 0,2 * cos (2 * pi * t + s1 (1)) + 0,7 * cos (2 * pi * t * 9 + s1 (2)) + 0,8 *сов (2 * пи * T * 5) + verticalOffs и др;plot (eqt)

fminsearch найдет минимум целевой функции.Нужно ли проверять, удовлетворяет ли это решение всем вашим условиям.В этом случае решение, заданное fminsearch с начальным значением [0;0], дает максимум ~ 1,3, что явно недостаточно.Однако, когда вы построите максимум для диапазона фазовых углов от 0 до 2pi, вы увидите, что `fminsearch не застрял в плохом локальном минимуме.Скорее, хорошего решения нет вообще (максимальная ось Z).

enter image description here

0 голосов
/ 17 октября 2011

Если вы установите все вертикальные смещения равными -1, то это решит вашу проблему, потому что каждый eq# никогда не будет> 0, поэтому сумма никогда не может быть> 0,8.

Я знаючто это не очень полезно, но я надеюсь, что это поможет вам лучше понять вашу проблему.

0 голосов
/ 17 октября 2011

Если я вас правильно понимаю, вы пытаетесь найти фазу для изменения амплитуды сигнала. Насколько мне известно, это невозможно.
Для сигнала

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

только A позволяет изменять амплитуду. С помощью w вы меняете частоту сигнала, а phi регулирует «горизонтальный сдвиг».

Кроме того, я думаю, что вам не хватает «движущейся переменной», такой как время t в уравнении выше.

Может быть эта статья немного проясняет.

...