Как я могу изобразить прямоугольные волны с различными рабочими циклами и определенной амплитудой? - PullRequest
1 голос
/ 12 октября 2019

Проблема: Используйте Matlab для расчета среднеквадратичного напряжения прямоугольной формы импульса с периодом 1 мс. Волна должна иметь минимальный пик 0 В и максимальный пик 4 В. Вычислите среднеквадратичное напряжение для рабочих циклов времени «ВКЛ», равное 20, 50 и 80 процентам. Также рассчитайте среднеквадратичное напряжение для треугольной волны с теми же уровнями напряжения (от 0 до 4 вольт и обратно до 0 вольт в конце периода).

У меня есть код для расчета среднеквадратичного напряжениядля всех четырех из этих волн, но мне нужно построить график трех прямоугольных волн, и я не уверен, как это сделать.

Я знаю о функции square и функции dutycycle,но я не знаю, как их реализовать, чтобы была определенная амплитуда (в данном случае от 0 до 4). Любая помощь будет принята с благодарностью.

% Calculation of RMS value for 20 percent
v_sum = 0.0; % Initial sum is set to zero
% for loop for one cycle
for k = 0.0:1.0:99.0
   if k < 20
       v = 4; % On period
   else
       v = 0; % Off period
   end
    v_sum = v_sum + v.^2; % Sum and Square are implemented
end
% Rms value calculation
v_rms_20 = sqrt(v_sum/100); % Root and Mean implementation
% Display the value
disp(v_rms_20)

%-----------------------------------------
% Calculation of RMS value for 50 percent
% Initial sum is set to zero
v_sum = 0.0;
% for loop for one cycle
for k = 0.0:1.0:99.0
   if k < 50
       v = 4; % On period
   else
       v = 0; % Off period
   end
    v_sum = v_sum + v.^2; % Sum and Square are implemented
end
% Rms value calculation
v_rms_50 = sqrt(v_sum/100); % Root and Mean implementation
% Display the value
disp(v_rms_50)

%-----------------------------------------
% Calculation of RMS value for 80 percent
v_sum = 0.0; % Initial sum is set to zero
% for loop for one cycle
for k = 0.0:1.0:99.0
   if k < 80
       v = 4; % On period
   else
       v = 0; % Off period
   end
    v_sum = v_sum + v.^2; % Sum and Square are implemented
end
% Rms value calculation
v_rms_80 = sqrt(v_sum/100); % Root and Mean implementation
% Display the value
disp(v_rms_80)

%-----------------------------------------
% Calculation of RMS value for triangular wave
v_sum = 0.0; % Initial sum is set to zero
% for loop for one cycle
for k = 0.0:1.0:99.0
   if k < 50
       v = 4*(k)/50; % Up trend period
   else
       v = 4*(100-k)/50; % Down trend period
   end
    v_sum = v_sum + v.^2; % Sum and Square are implemented
end
% Rms value calculation
v_rms_triangle = sqrt(v_sum/100); % Root and Mean implementation
% Display the value
disp(v_rms_triangle)

1 Ответ

0 голосов
/ 12 октября 2019

Для настройки диапазона амплитуды и напряжения вы можете сместить и масштабировать результат квадрат по амплитуде.

square Функция возвращает значения в диапазоне [-1, 1].

  • Добавить 1 - установить диапазон на [0, 2].
  • Умножьте на амплитуду / 2, установите диапазон на [0, амплитуда].

Пример (на примере MATLAB квадрат ):

t = 0:1/1e4:5; %Time (X axis).
cyc = 20; %Duty cycle
amp = 4; %Amplitude
cyc20_amp4 = (square(2*pi*t, cyc)+1)*amp/2; %Voltage (Y axis)

%Plot a graph
figure;plot(t, cyc20_amp4);title(['dutycycle=', num2str(cyc), ' amplitude=', num2str(amp)]);
xlabel('t');ylabel('V')

Результат:
enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...