|
ограничение амплитуды, для квадр. с-ла |
|
|
|
Nov 10 2008, 11:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992

|
необходимо ограничить по амплитуде синус(затем и произвольный сигнал) (например по уровню X), далее он фильтруется и проч., в итоге получаем его огибающую. - это предельно прозрачно, если сигнал один, скажем sin(1000Гц) или случ. сигнал, как быть для квадратурного с-ла? можно для sin ограничить отдельно Re и Im, вроде в этом случае все будет корректно, будет ли все корректно для произвольного сигнала? можно конечно повыводить формулы, помоделить, надеюсь кто-нить скажет "с ходу", поделитесь опытом.
|
|
|
|
|
Nov 10 2008, 11:30
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(shf_05 @ Nov 10 2008, 14:16)  необходимо ограничить по амплитуде синус(затем и произвольный сигнал) (например по уровню X), далее он фильтруется и проч., в итоге получаем его огибающую. - это предельно прозрачно, если сигнал один, скажем sin(1000Гц) или случ. сигнал, как быть для квадратурного с-ла? можно для sin ограничить отдельно Re и Im, вроде в этом случае все будет корректно, будет ли все корректно для произвольного сигнала? можно конечно повыводить формулы, помоделить, надеюсь кто-нить скажет "с ходу", поделитесь опытом. Нет не корректно ограничивать квадратуры отдельно, надо переводить в полярные координаты, заменять амплитуду на константу, затем обратно в декартовы.
|
|
|
|
|
Nov 10 2008, 12:08
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(shf_05 @ Nov 10 2008, 14:58)  соложность в том, что вычислять аргумент надо в режиме РВ, на медленном проце. далее квадратуры фильтруются, и вычисляется их огибающая. Если фазу считать не хочется можно так : Код s = x+1j*y; // входной сигнал tmp = x^2 + y^2; if( tmp>A^2 ) // A - порог ограничения { y = s * A/sqrt(tmp) // Ограниченный выходной сигнал } else { y = s; }
--------------------
ну не художники мы...
|
|
|
|
|
Nov 10 2008, 12:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992

|
Цитата(petrov @ Nov 10 2008, 17:17)  А смысл ограничения в чём? очень приблизительно- система ШОУ важна эквивалентность ограничения квадратурного с-ла неквадратурному в спектральной области. вот протестил: clear a= 3; s= 2*hilbert(randn(1,100)); t= 1:length(s); s1= s; s1(abs(s)>3)= s(abs(s)>3)./(abs(s(abs(s)>3)))*a; s2_a= (abs(s)); s2_a(s2_a>a)= a; s2_r= s2_a.*cos(angle(s)); s2_im= s2_a.*sin(angle(s)); s2= s2_r+i*s2_im; figure(1) plot(t,real(s1),'r',..., t,abs(s1),'m',... t,real(s2),'b',... t,abs(s2),'k'), plotbrowser('on') figure(2) plot(t,abs(s1)-abs(s2),'b') вроде все чисто
|
|
|
|
|
Nov 11 2008, 12:06
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(shf_05 @ Nov 10 2008, 15:14)  +1 ))) это эквивалентно ограничению амплитуды и умножению на фазу
зы: раньше я и делить не хотел теперь все-таки видимо придется Лучше не делить а сделать 1/sqrt(x), вроде есть куча алгоритмов которые это довольно быстро считают...
--------------------
ну не художники мы...
|
|
|
|
|
Nov 12 2008, 07:48
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(shf_05 @ Nov 12 2008, 10:33)  понятно, в моем варианте sqrt находится по ф-ле тейлора (6 коэф-в) тактов 20, далее деление, занимающее 16 тактов. а можно сразу придумать ряд, аппроксимирующий 1/sqrt. А что за процессор который так удачно делить умеет (за 16 тактов) ?
--------------------
ну не художники мы...
|
|
|
|
|
Nov 12 2008, 07:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992

|
Цитата(alex_os @ Nov 12 2008, 12:48)  А что за процессор который так удачно делить умеет (за 16 тактов) ? adsp2191 16 тактов на одно деление, дак вроде и тмс тоже за 16 делит, а впоследнем до кучи есть встроенная инструкция sqrt. вот пример, на самом деле чуть больше 16 //sr1- divider //ay0- result ay0= 0; // 16 LSB of numerator ay1= mx0; // 16 MSB of numerator- I data DIVS AY1, sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; DIVQ sr1; mx0= ay0; // I/abs(I+i*Q)
Сообщение отредактировал shf_05 - Nov 12 2008, 07:55
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|