[an error occurred while processing this directive]
2 Крок - заставил таки смоделировать DDS (+)
(«Телесистемы»: Конференция «Аналоговая схемотехника»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SM 10 июня 2003 г. 23:25


Вот результаты моделирования. Синим на рисунке обозначен сигнал со старшей адресной шины (тот, что по-Вашему якобы должен быть хороший меандр). Черным (точками) - синтерполированный выходной сигнал 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;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru