Вот результаты моделирования. Синим на рисунке обозначен сигнал со старшей адресной шины (тот, что по-Вашему якобы должен быть хороший меандр). Черным (точками) - синтерполированный выходной сигнал DDS после фильтрации (приближение к восстановленному аналоговому сигналу при помощи ЦАП с последующей фильтрацией с частотой среза на частоте Найквиста). Красным - выход с компаратора, на вход которого подан восстановленный сигнал.Так вот тут четко и хорошо видно, что так долго объяснял mse и я. Что на адресной шине есть дрожание скважности, а в выходном восстановленном сигнале этого эффекта нет. И что компаратор даст лучшие результаты, чем вывод адресной шины наружу. И не удивительно, что об этом кроме mse и меня знает еще фирма Analog Devices. И не выводит изначально лишних сигналов наружу :-)
Далее. Предложенное мной умножение на 2 с последующем делением на эту-же двойку - это только лишь для ликвидации последствий дрейфа нуля компаратора, который в моделе естественно не учтен. Для получения более точного приближения скважности выходного сигнала к двойке.
Вот скрипт. Если интересно.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
per = 5678;
% generate LUT. 256 samples of one period
% 10-bit accuracy
t = 0:255;
lut = fix(511.*sin(t.*(2*pi/256)));
% generate 256 samples from LUT with
% period 'per'. Assumed counter size 16 bits
addr = fix(mod((t.*per),65536)/256);
for i=1:256
lut_lookup(i)=lut(addr(i));
end
% generate high bit of address
high_bit = 1-fix(addr./128);
% interpolate synthesised signal four times by
% by factor two. This gives estimation of
% reconstructed analog signal. Filtering
% by default - to Nyquist frequency
s_out = interp(lut_lookup,2); % *2
s_out = interp(s_out,2); % *4
s_out = interp(s_out,2); % *8
s_out = interp(s_out,2); % *16
% comparator. get sign of interpolation result
% and move and scale to 0..1
pulse_out = (sign(s_out)+1)./2
% plot results
t1 = 0:4095;
t1 = t1 .* (255/4095);
plot(t1,pulse_out,'r'), hold on, ylim([-0.2 1.2]), xlim([120 170])
plot(t,high_bit,'b')
plot(t1,(512+s_out)./1024,':k'), hold off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|