Есть входной сигнал
х. Есть КИХ система с
h. Наблюдаем выход
y. Наблюдая за выходом системы "с нуля" ( в коде ofs=1), по выходу
у и входу
х считаем оценку ИХ
h_est. Ошибка между оценкой ИХ и заданной нулевая.
Теперь моделируем ситуацию, когда мы несколько отсчетов входного сигнала
х пропустили, не знаем,... и соответственно выход системы
у смотрим не с нуля, а с некой задержкой (в коде ofs=17). Опять считаем
h_est, но уже на основе усеченного по началу входу и выходу. В этом случая ошибка оценки ИХ уже "заметна на глаз", при этом даже если увеличивать размер входного сигнала
L, ошибка уменьшается, но все равно остается существо больше, чем при наблюдении "с нуля".
По сути ситуации различаются тем, что при наблюдении с нуля мы наблюдаем переходный процесс фильтра в чистом виде, а при наблюдении с задержкой чистого переходного процесса у нас нет, пропущен.
Так и должно получаться или в случае наблюдения с задержкой я неправильно формурию матрицу свертки при оценке ИХ?
Код:
% Estimating impulse response function from input and output signal
clear all
sps=8; % число отсчетов на символ
L=20; % число входных символов
ofs=17; %1 or 17 for test, для моделирования полного и неполного набора данных
hStr = RandStream('mt19937ar', 'Seed', 0);
x = 2*randi(hStr, [0 1], L, 1)-1;
x=upsample(x,sps);
h=rcosdesign(0.5,6,sps); % модельная ИХ
y=(conv(h,x)); % прохождение полного входного сигнала черех систему с модедьной ИХ h
x1=x;
y1=y(1:L*sps);
x1=x1(ofs:L*sps); % отсчеты входа, которые используются при оценке ИХ
y1=y1(ofs:L*sps); % отсчеты выхода, которые используются при оценке ИХ
figure
subplot(311)
stem(x, 'rx'); % график полного входа
hold on
plot(y) % график полного выхода
stem(ofs:L*sps, x1, 'kx'); % график отсчетов входа, которые используются при оценке ИХ
plot(ofs:L*sps, y1,'ok'); % график отсчетов выхода, которые используются при оценке ИХ
X = toeplitz(x1, [x1(1) zeros(1, length(h)-1)]); % X : convolution matrix
h_est = X \ conj(y1) ; % оцененная ИХ
err=h-h_est'; % ошибка оценненой ИХ
subplot(312)
plot(h_est/std(h_est)) % график оцененной ИХ
hold on
stem(h/std(h), 'rx'); % график модельной ИХ
subplot(313)
plot(err) % график ошибки оценненой ИХ