Алгоритмически получить амплитуду и фазу синусоиды? - PullRequest
4 голосов
/ 19 сентября 2009

Я пытаюсь найти способ алгоритмически получить амплитуду и фазу функции, которая имеет синусоидальные члены в системе компьютерной алгебры Maxima. Это относится только к установившемуся состоянию (так как t -> бесконечность и переходные процессы затухают). Например, тривиальный случай будет:

f(t) = 1 / w * sin(w * t + theta) + exp(-a * t) + 8

В этом случае усиление будет 1 / w, сдвиг фазы будет тета, и мы будем игнорировать переходный член exp (-a * t), потому что мы заботимся только об усилении устойчивого состояния и задержке фазы, и exp (-a * t) -> 0 при t -> бесконечность. Мы также проигнорировали бы термин «+ 8», потому что это просто смещение постоянного тока. То, как меня учили делать это на моих инженерных уроках, требует большого количества эвристик и утомительной перестановки уравнений, чтобы привести их в форму, аналогичную приведенной выше, где ответ очевиден, если взглянуть на него.

Кто-нибудь знает об общем алгоритмическом методе определения усиления и фазовой задержки, предполагая, что они существуют, учитывая, что я обладаю всеми возможностями системы компьютерной алгебры (и стандартными функциями, которые можно ожидать от CAS), чтобы бросить на это? Хотя я, скорее всего, буду внедрять его в Maxima, я, безусловно, был бы признателен за общие ответы, объясненные только с точки зрения математики.

Редактировать: Я подумал, что из моего примера совершенно очевидно, что я хочу получить символический ответ в терминах w. w действительно должен быть омега и представляет частоту ввода. Что я действительно спрашиваю, так это то, существуют ли какие-либо стандартные математические операции, которые будут генерировать коэффициенты усиления и фазы без кучки эвристических, ручных перестановок уравнений.

Ответы [ 4 ]

7 голосов
/ 19 сентября 2009

Вы имеете в виду символически или численно?

Численно вы захотите выполнить преобразование Фурье :

  • сэмплируйте функцию, по крайней мере, вдвое больше ожидаемой максимальной частоты (еще выше, если вы хотите более точное измерение фазы) и пока не превышайте максимальную ожидаемую длину волны

  • выполнить преобразование Фурье (поиск БПФ должен привести к множеству примеров - мои поиски показывают, что максимумы могут даже иметь встроенную функцию БПФ)

  • это даст вам версию вашей функции в "частотной области". У вас будет ряд комплексных значений, где величина - это амплитуда для этой частоты, а угол - это фаза этой частотной составляющей. В вашем случае это звучит так, как будто вы хотите найти частоту с амплитудой пика

1 голос
/ 20 сентября 2009

Может помочь преобразование Лапласа или Фурье; Вы можете применять как символически, так и численно. Но я не уверен, что вы сможете создать общий алгоритмический метод - обычно это разные случаи, в зависимости от того, где находятся полюса.

1 голос
/ 19 сентября 2009

Это может или не может быть идеальным, но я предполагаю, что вы не можете выполнять какие-либо математические функции для функции, генерирующей сигнал (или функция недоступна) -

Я бы выбрал волну с интервалами, значительно меньшими, чем период. Это, вероятно, сложно - вам нужно знать наверняка, что пейрод волны больше, чем интервал дискретизации, но вы не захотите, чтобы он был слишком маленьким, или понадобится вечность, чтобы закончить несколько циклов волны. Возможно, вы могли бы начать выборку с некоторого минимального значения и увеличивать его, пока значение не изменится с некоторой приемлемой скоростью.

Если вы сделаете это, то вы можете сдвинуть волну в центр по оси X (вычитая или сложив среднее значение) и определить 1) минимальное / максимальное значения, которое обеспечивает амплитуду, и 2) X-перехватчики, который обеспечивает период.

0 голосов
/ 21 сентября 2009

Подумав некоторое время, я сам понял это. Я опубликую это здесь, потому что это довольно интересно. Допущения:

  1. Сигнал существует бесконечное время, поэтому все находится в устойчивом состоянии.
  2. Ваше выражение имеет только одну частоту. Это легко проверить только осмотром, даже если это в какой-то ужасно сложной форме. Например, у вас не может быть sin (w1 * t) + sin (w2 * t), иначе это не сработает.
  3. Вы знаете, как называются переменные частоты и времени.
  4. У вас приличная система компьютерной алгебры и все стандартные функции, которые идут с ней.

Алгоритм, согласно этим предположениям, является:

  1. Возьмите преобразование Лапласа. На практике это тривиально, так как большую часть времени, когда вы сталкиваетесь с такими проблемами, ваш ответ изначально находится в области Лапласа, и вы в конечном итоге возвращаетесь во временную область, чтобы получить свое выражение с синусоидой. Даже если нет, приличный CAS уже будет иметь зрелую функцию преобразования Лапласа.
  2. Разделите на преобразование Лапласа греха (w * t). (Предполагая, что вы используете w для частоты и t для времени). Это дает вам передаточную функцию, то есть константу области Лапласа, на которую умножается входная синусоида.
  3. Поскольку t -> бесконечность, т. Е. Для сигналов, существовавших в течение бесконечного времени, переменная Лапласа s эквивалентна i w, поэтому, просто подставив i w в s, вы получите передаточную функцию в частотная область, в действительности преобразование Фурье передаточной функции.
  4. Для синусоидальной волны частоты w коэффициент усиления представляет собой комплексное абсолютное значение передаточной функции. (Комплексное абсолютное значение - это расстояние некоторого комплексного числа от начала координат в комплексной плоскости, sqrt (realpart (my_number) ^ 2 + imagpart (my_number) ^ 2).
  5. Сдвиг фазы - просто арктан (мнимая часть (TransferFunction) / реальная часть (TransferFunction)).
...