Модуляция сигнала 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);
Другие вопросы по тегам