Вот программа для Matlab , запустилась на Octave без правок ....
close all; clear all; clc;
%% ИСХОДНЫЕ ДАННЫЕ
Fs = 100E3; % частота дискретизации
f0 = 10E3; % несущая частота
N = 16384; % количество дискретных отсчетов
t = (0:N-1)/Fs; % дискретное время.
frq = Fs*(0:N-1)/N - Fs/2; % дискретная частота
%% ФОРМИРУЮ АМ НА ЧАСТОТЕ f0
sm = cos(2*pi*100*t); % модулирующий сигнал
mAM = 0.9; % глубина АМ
s = (1+mAM.*sm).*cos(2*pi*f0*t); % AM сигнал на частоте f0
% рассчитываю спектр исходного сигнала и вывожу на график
S = fftshift(abs(fft(s)));
figure; subplot(211); plot(t, s);
title('AM signal');
xlabel('time, sec');
subplot(212); plot(frq, S);
title('spectr of AM signal');
xlabel('frequency, kHz');
%% ПЕРЕНОС ПРИ ПОМОЩИ КВАДРАТУРНОГО ГЕТЕРОДИНА
i0 = s.*cos(2*pi*f0*t);
q0 = -s.*sin(2*pi*f0*t);
%% ВЫДЕЛЕНИЕ ОГИБАЮЩЕЙ ПРИ ПОМОЩИ ФНЧ
[b a] = ellip(4, 0.1, 60, 0.1); % формирую ФНЧ
i = filter(b,a,i0); % фильтрую I канал
q = filter(b,a,q0); % фильтрую Q канал
z = i + 1i * q; % выделенная комплексная огибающая
% рассчитываю спектр комплексной огибающей и вывожу на график
Z0 = fftshift(abs(fft(i0+1i*q0)));
Z = fftshift(abs(fft(z)));
figure; plot(frq, Z0, frq, Z, 'r');
title('complex envelope spectr');
xlabel('frequency, kHz');
%% ИЗМЕРЕНИЕ ГЛУБИНЫ АМ ИЗ ВЫДЕЛЕННОЙ ОГИБАЮЩЕЙ
amp = abs(z); % ам есть модуль огибающей z
% отбрасываю половину модуля чтобы исклюсить переходной процесс фильтрации
amp = amp(end/2:end);
% рассчет глубины и вывод на печать
mam = (max(amp) - min(amp))/(max(amp) + min(amp));
fprintf('исходная глубина модуляции: %.4f\n', mAM);
fprintf('измеренная глубина модуляции: %.4f\n', mam);