Вот, собсно, алгоритм вычисления обеих амплитуд несущей (немодулированного сигнала) и огибающей через вычисление четырех коэффициентов ряда Фурье:
clear all;
ahi = 10.0; % Амплитуда немодулированного сигнала [В]
alo = 1.0; % Амплитуда сигнала модуляции [В]
fhi = 2.0e5; % Частота несущей [Гц]
flo = 2.0e2; % Частота низкочастотной огибающей [Гц]
whi = 2*pi*fhi; % Частота несущей [Рад/с]
wlo = 2*pi*flo; % Частота низкочастотной огибающей [Рад/с]
phi = pi/5; % Фаза несущей [Рад] - Произвольная величина!
plo = pi/7; % Фаза низкочастотной огибающей [Рад] - Произвольная величина!
tp = 1.0/flo; % Длительность импульса [сек]
fs = fhi*4; % Частота дискретизации [Гц]
dt = 1.0/fs; % Период дискретизации [сек]
ns = tp/dt; % Общее число семплов в импульсе ГКЧ
for i = 1:ns
S(i) = ahi*cos(whi*(i-1)*dt)*(1.0+alo*sin(wlo*(i-1)*dt));
end;
a_hi = 0.0;
b_hi = 0.0;
for i = 1:ns
a_hi = a_hi + S(i)*cos(whi*(i-1)*dt);
b_hi = b_hi + S(i)*sin(whi*(i-1)*dt);
end;
ampl_hi = 2.0*sqrt(a_hi^2+b_hi^2)/ns; % Оценка амплитуды немодулированного сигнала [В]
a_lo = 0.0;
b_lo = 0.0;
for i = 1:ns
a_lo = a_lo + S(i)*cos((whi-wlo)*(i-1)*dt);
b_lo = b_lo + S(i)*sin((whi-wlo)*(i-1)*dt);
end;
ampl_lo = 4.0*sqrt(a_lo^2+b_lo^2)/(ampl_hi*ns); % Оценка амплитуды сигнала модуляции [В]
err_hi = ampl_hi - ahi
err_lo = ampl_lo - alo
Для вычисления коэффициентов используются четыре регистра:
a_hi;
b_hi;
a_lo;
b_lo;
Коэффициенты
cos(whi*(i-1)*dt) и
sin(whi*(i-1)*dt)
можно в ПЗУ не хранить, так как они равны: +1,-1 и 0.
enjoy! :)