Аналитический сигнал

 

Может кто сталкивался с такой проблемой. Пытаюсь получить мнимую часть аналитического сигнала. Должно быть так:

 

А получается так:

 

Делаю по следующему принципу:

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

Более наглядно:

 

Здесь ортогональный сигнал как бы отстает, а у меня наоборот опережает. Делал другим способом с помощью фильтра Гилберта, та же история.

Код:

double X[512],A[1024],Y[512];
   for(int j=0;j<512;j++)//данные
     {X[j]=MathCos(2*3.14*j/32);//Исходный сигнал (действительная часть)
      //Y[j]=MathSin(2*3.14*j/32);//мнимая часть, которая должна получиться
     }
   for(j=0;j<512;j++)//подготовка для преобразования Фурье с помощью библиотеки Клота (R-четные, I-нечетные)
      A[j*2]=X[j];
   fastfouriertransform(A,512,0);//прямое БПФ
   for(j=512;j<1024;j++)//обнуление отрицательных частот
      A[j]=0;
   fastfouriertransform(A,512,1);//обратное БПФ
   for(j=0;j<512;j++)//Вывод
     {ExtMapBuffer1[512-1-j]=2*A[j*2];//действительная часть

      ExtMapBuffer2[512-1-j]=2*A[j*2+1];//мнимая часть

     }
 

Вы наверное взяли это на dsplib.ru, ну так там и ответят квалифицированнее ) А для чего вам ортогональное дополнение, если не секрет? Мнимую часть (имхо) гораздо проще получить во временной области сверткой с косинусом.

>Здесь ортогональный сигнал как бы отстает, а у меня наоборот опережает.

Вы случайно не делаете вывод данных в порядке, обратном оси времени?

 
airbas:

Вы наверное взяли это на dsplib.ru, ну так там и ответят квалифицированнее ) А для чего вам ортогональное дополнение, если не секрет? Мнимую часть (имхо) гораздо проще получить во временной области сверткой с косинусом.

>Здесь ортогональный сигнал как бы отстает, а у меня наоборот опережает.

Вы случайно не делаете вывод данных в порядке, обратном оси времени?



Там на форуме такой проблемы не встречается, очень возможно, что у меня ошибка в коде или в библиотечке.

" А для чего вам ортогональное дополнение, если не секрет? " Много чего можно придумать, например адаптивную фильтрацию.

" Мнимую часть (имхо) гораздо проще получить во временной области сверткой с косинусом."  На  dsplib.ru такого способа не встречал, если можно, дайте ссылку поподробнее разобраться.

" Вы случайно не делаете вывод данных в порядке, обратном оси времени?"  Вроде все правильно.

 
Любой сигнал насколько бы его не вычисляли прийдет к 50/50 , плюс спред на стороне ДЦ итого ...
 
Нельзя описать неописуемое всякими стохастикми, блохастиками и машками ... Если человек решил, что может какими то законами или формулами описать галлактику, то это только потому что он дальше этих формул и законов не видит ...
 
Сколько бы человек не летал в космос, к монаху... он всеравно пользуется только тем что Земля даёт, так и с индикаторами всё это попытки как у мандавоши перепрыгнуть с одного яйца на другое... Сорри если кого чем обидел)
 

Пардон, с косинусом это всё же для гармонического сигнала, а для случайного - ПГ, как вы и делали во втором варианте. В любом случае, это преобразование во временной области, более простое, а через ПФ видимо есть смысл делать если у вас и так уже есть результаты ПФ, вычисленные для других целей.

>Вроде все правильно.

Тогда очевидно, мнимая часть получается с неправильным знаком? Наверняка ошибка в коде, может в этой ветке подскажут: http://dsplib.ru/forum/viewtopic.php?f=7&t=24

Была еще книжка Лайонса, где ПГ доступно объясняется.

 
airbas:

Пардон, с косинусом это всё же для гармонического сигнала, а для случайного - ПГ, как вы и делали во втором варианте. В любом случае, это преобразование во временной области, более простое, а через ПФ видимо есть смысл делать если у вас и так уже есть результаты ПФ, вычисленные для других целей.

>Вроде все правильно.

Тогда очевидно, мнимая часть получается с неправильным знаком? Наверняка ошибка в коде, может в этой ветке подскажут: http://dsplib.ru/forum/viewtopic.php?f=7&t=24

Была еще книжка Лайонса, где ПГ доступно объясняется.


Проверю с другой функцией ПФ, если и там будет такой результат, то просто поменяю знак.

А вообще, наверно так и должно быть.

Преобразование Гилберта поворачивает фазу на П/2

как раз то, что я получаю.

ПС За книгу спасибо, понятная и с юмором, добавил в библиотеку по ЦОС.

 
Народ, подскажите как бороться с отрицательными мгновенными частотами.
 
Rorschach:
Народ, подскажите как бороться с отрицательными мгновенными частотами.

Обнулить? Заполнить предыдущим значением?
 
что то хитрее надо. 
Причина обращения: