Управление файлом.m из другой функции
Поэтому я создал файл.m, который имеет пилообразную сигнальную волну, которую я пытаюсь смодулировать. У меня нет проблем с созданием формы волны, но когда я пытаюсь взять файл.m и умножить его на "c", MATLAB возвращает исходную форму волны. Эта конкретная программа использует технику модуляции двойной боковой полосы. Первая часть - это моя форма волны.
function y = Signal
% Signal Summary of this function goes here
n = 23; % Number of Harmonics
t = 0:.0002:n; % incremental value
y = sawtooth(t,.2); % Wave creation
plot(t,y);
ylabel ('Amplitude');
xlabel ('Time');
title('Sawtooth Wave');
end
На следующем этапе я пытаюсь вызвать файл.m, умножить его на 'c' и построить результирующую функцию.
function [ DSBModulation ] = DSB( DSBModulation )
% Program for DSB-AM
n = 23;
fc = 100;
t = 0:.0002:n;
sig = Signal; % this is how im trying to call the .m file so i can manipulate it
c = cos((2*pi*fc*t)); % using this as the modulating function
u(sig) = (sawtooth(t,.2)).*c; % Multiplying the signal
plot(t,u(sig)); %Displaying the Signal
end
1 ответ
Результат генерации сигнала сохраняется в переменной sig
на следующей строке DSB
функция:
sig = Signal;
Таким образом, дальнейшая операция по модуляции генерируемого сигнала должна использовать это sig
переменная вместо того, чтобы пытаться использовать местный sawtooth
переменная, определенная в области Signal
, Тогда вы должны также отметить, что обозначение u(sig)
в Matlab представляет вектор u
который индексируется значениями в sig
, а не математическое понятие функции u
переменной sig
,
Таким образом, чтобы вычислить ваш вектор модулированного сигнала, вы должны использовать:
u = sig.*c; % Multiplying the signal
Наконец, чтобы построить результаты на том же рисунке, вы можете использовать hold
команда или иным образом использовать отдельный figure
(иначе ваш второй plot
команда сотрет график первого plot
):
close all;
plot(t,u); %Displaying the Signal
hold on; plot(t,sig,'r','LineWidth',3); % Overlay the unmodulated signal for reference
ylabel ('Amplitude');
xlabel ('Time');
Что должно дать вам следующий результат: