![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.207.122] |
![]() |
|
Сообщ.
#1
,
|
|
|
Дан комплексный сигнал s(t), в виде массива, надо получить функцию фазы f(t) без разрывов при переходе от -180 к 180
|
Сообщ.
#2
,
|
|
|
fi[x]:=arctan(b[x]/a[x]);
while abs(fi[x]+pi*2-fi[x-1])<abs(fi[x]-fi[x-1]) do fi[x]:=fi[x]+2*pi; while abs(fi[x]-pi*2-fi[x-1])<abs(fi[x]-fi[x-1]) do fi[x]:=fi[x]-2*pi; вроде так ![]() |
Сообщ.
#3
,
|
|
|
Ну с while это уж очень некрасиво, но где то близко
|
Сообщ.
#4
,
|
|
|
Забыл сказать производная в этом месте недолжна скакать
|
Сообщ.
#5
,
|
|
|
ну уж будет она скакать или нет - ето уже зависит только от твоих данных.
я тут у себя немного ошибок нашёл ;D правильно так: ![]() ![]() fi[x]:=arctan(b[x]/a[x]); if a[x]<0 then fi[x]:=fi[x]+pi; fi[x]:=fi[x]+2*pi*round((fi[x-1]-fi[x])/2/pi); без while ;D зы. а есть ещё функция arctan2(y, x), которая выдаёт arctan(y/x) в правильной четверти, без делений на ноль и вобще точнее, быстрее и лучше ![]() ![]() ![]() fi[x]:=arctan2(b[x], a[x]); |