Ослабление сигнала функцией логарифма..

 

Всем привет!!

Вопрос довольно банальный и прост, но решение я пока не смог найти..

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

может кто-то пытался подобную задачу решить..

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

 
forte928 писал(а) >>

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

Гм. У вас на графике исходный сигнал принимает как положительные, так и отрицательные значения. Как обходили логарифмирование отрицательных значений? Использовалось преобразование типа: сигнал_ослабленный=знак(сигнал_исходный)*логарифм(модуль(сигнал_исходный)) ?

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

И ещё. А там точно гладкость пропадает? Не влияет ли масштабирование по вертикали? Попробуйте сделать фиксированные небольшие максимум и минимум.

 
 
lea писал(а) >>

Гм. У вас на графике исходный сигнал принимает как положительные, так и отрицательные значения. Как обходили логарифмирование отрицательных значений? Использовалось преобразование типа: сигнал_ослабленный=знак(сигнал_исходный)*логарифм(модуль(сигнал_исходный)) ?

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

И ещё. А там точно гладкость пропадает? Не влияет ли масштабирование по вертикали? Попробуйте сделать фиксированные небольшие максимум и минимум.

Даже если взять обычную функцию синуса и применить функцию типа :

ResultView[Ix] = WeakenSignal(SourceSignal[Ix]);


double WeakenSignal(double Source)
{
if (Source>0) return(MathLog(Source+1));
if (Source<0) return(MathLog(MathAbs(Source-1))*(-1));
return(0);
}

то получается такая картинка как на рисунке..

Масштабирование процентное..т.е. на участке -1..1 и возникают проблемы с ослаблением сигнала..

 
forte928 писал(а) >>

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

Поделите исходный сигнал на тысячу или миллион! - Получите точно такой же, но более низкой амплитуды:-)

Или нужно что-то другое?

 
Neutron писал(а) >>

Поделите исходный сигнал на тысячу или миллион! - Получите точно такой же, но более низкой амплитуды:-)

Или нужно что-то другое?

Судя по всему, нужно распределение сигнала поменять. Иначе применили бы деление, уж точно.

 

forte928 тебе наверно нужна отрицательная обратная связь, для этого нужно нормировать осцилятор на стандартное отклонение

получится чем больше волатильность тем больше ослабление

 

для начала обьясню почему используется ослабление сигнала на основе логарифма..

если взять любой осцилятор то для приведения соотношений периодов к одинаковому формату, используються соотношения между двумя сигналами в логарифмическом соотношении --> Source1*MathLog(Period1/(Period1+Period2)); Source2*MathLog(Period2/(Period1+Period2));

или в более подобном соотношении..Можете это проверить как на CCI, так и на RSI. Такую зависимость я заметил еще при построении осцилятора у которого нужно было привести разные периоды к одинаковой амплитуде..

В данном случае решается задача которая суммирует два сигнала разной частоты у которых различные амплитуды : Freq1+Freq2

вот и получается что для того что бы сигналы были равнозначны нужно привести к "общей" амплитуде..вот и получается что Freq2`=MathLog(Freq2);

но кажется решение я примерно нашел из допущения что тот сигнал что необходимо нам преобразовать был получен из исходной функции усиленный F(x)=Exp(ax) -> y=exp(ax) -> но при этом нужно отметить что уровень сигнала нужно опусть к "0", в итоге исходная функция усиления принимает вид : y=exp(x)-1;

следовательно для получения сигнала на выходе (ослабления сигнала) необходимо провести обратное преобразование x=ln(y+1) ..

Имеем решение задачи :

 

Всем большая благодарность за участие...

 

Да забыл привести функцию ослабления :

double WeakenSignal(double Source)
{
if (Source>=0) return(MathLog(Source+1));
if (Source<0) return(-MathLog(MathAbs(Source)+1));
}
соотвественно для положительных и отрицательных значений..
 
forte928 >>:

Да забыл привести функцию ослабления ...

Спасибо. Все бы темы так заканчивались: вопрос >> обсуждение >> решение >> оформленный результат >> много пользы для народа.