Здравствуйте, prrt, Вы писали:
P>P> bb = (re * s.re + im * s.im, -re * s.im + im * s.re);
P> estim = (bb.re * k + estim.re * (1-k), bb.im * k + estim.im * (1-k));
P> sub = (estim.re * s.re – estim.im * s.im, estim.re * s.im + estim.im * s.re);
P> out = (re – sub.re, im – sub.im);
P>
P>Вопрос: что означают указанные формулы для вычисления bb и sub? Где можно почитать теорию применительно к тому, как на с++ написать режекторный фильтр? И вообще, теорию режекторного фильтра применительно к IQ сигналам. Каким образом, «на пальцах», указанные вычисления удаляют пик спектра?
Тут вроде всё очевидно. Вот смотри пусть у тебя есть вектор a и орт s.
мы хотим убрать компоненту s из a. a это a0*s+a1*ns где ns ортогонален s, т.е. (ns,s)=0
r=a-(a,s)*s
где (a,s) это скалярное произведение. только вместо скалярного произведения используется сглаженное значение
e=e*q+(a,s)*(1-q)
r=a-(e*s)*s
Конкретнее:
a=(re,im) s=(re,im) e=estim=(re,im) r=out=(re,im) — комплексные числа
bb = <a|s> = conj(a)*b
e = e*(1-k) + k*bb
sub = e*s
out = a — sub
где: k=1-exp(ln(th)/n)
n-длинна истории, th=1e-3 порог (например шум к полезному сигналу),т.е. вклад за n шагов упадет до th.
Если s периодический сигнал то n должно быть порядка периода, например n=7*T