Модуляция сигнала MatLab
Я пытаюсь модулировать сигнал в MatLab путем умножения некоторого сигнала на сигнал несущей. Несущий сигнал cos(2*pi*fc*t)
и это мой код до сих пор
for t = 1:length(input);
m(t) = (Ac + input(t)).*cos(2*pi.*fc.*t);
end
xam = m;
input, Ac и fc - параметры, которые необходимо ввести при использовании функции. Когда я запускаю этот код с любым входным сигналом (я использую cos(t)
с t = 0:0.001:10
) на выходе всегда один и тот же сигнал. Однако, если я использую./ вместо. * Перед fc, выход модулируется. Почему использование. * Fc вместо./fc не работает?
1 ответ
Для начала вы можете векторизовать ваше уравнение так:
t = 0:0.001:10;
input = cos(t);
xam = (Ac + input).*cos(2*pi*fc*(1:length(t)));
Я подозреваю, что причина, по которой вы каждый раз видите одну и ту же кривую выхода, заключается в том, что ваш fc
значение является целым числом. Если fc
является целым числом, cos(2*pi*fc*t)
оценивается в 1 для всех целочисленных значений t
оставляя входной сигнал неизменным после модуляции. Когда вы используете 1/fc
Вы получаете нецелое значение, и выход модулируется.
Я считаю, что вы хотите сделать следующее:
t = 0:0.001:10; % Time in seconds
f = 1; % Frequency of input signal in rad/s
fc = 3; % Frequency of carrier wave in rad/s
input = cos(2*pi*f*t); % Input signal
xam = (Ac + input).*cos(2*pi*fc*t); % Amplitude modulated signal
Комментарии показывают значение каждого аргумента. Если бы вы только хотели пройти частоту дискретизации fs
в вашей функции, решение будет выглядеть так:
N = 1001;
fs = 1000;
t = (0:1:N)*(1/fs);
f = 1;
fc = 3;
input = cos(2*pi*f*t);
И ваша функция будет выглядеть так:
function xam = modulate(input, fs, fc, Ac)
t = (0:1:length(input))*(1/fs);
xam = (Ac + input).*cos(2*pi*fc*t);