Сдвиг сигнала вниз

#matlab #octave

#matlab #октава

Вопрос:

У меня есть сигнал, который создается от 0 до 1 для сигналов квадрата, прямоугольника и пилообразной формы на оси y, как я могу сместить сигнал вниз (смещение по вертикали), чтобы сигнал менялся от -0,5 до 0,5 по оси y, и изменить сигнал треугольника с 0,5 до 1,0 на -0,5 до 0,5?

 clear all
% SCRIPT BEGINS
t=linspace(0,1,22050)
freq=5%how many times it repeats in 1 sec
A = 1; % amplitude
T = 1/freq; % period of the signal

% square
square = mod(t * A / T, A) > A / 2;
plot(t, square)
title('Square');

% rectangle
l = 0.2; % percentage the signal spends on low value
rectangle = mod(t * A / T, A) > A * l;
figure;
plot(t, rectangle);
title('Rectangle');

% sawtooth
sawtooth = mod(t * A / T, A);
figure;
plot(t, sawtooth);
title('Sawtooth');

% triangle
triangle = (mod(t * A / T, A) > 0.5).*mod(t * A / T, A)   (mod(t * A / T, A) <= 0.5).*(1 - mod(t * A / T, A));
figure;
plot(t, triangle);
title('triangle');
 

спасибо, я использую octave / matlab

Ответ №1:

 function x_new = rescale(x, new_min, new_max)

x_min = min(x);
x_max = max(x);

x_new = new_min   (new_max - new_min) * (x - x_min) / (x_max - x_min);
 

(Кстати, это очень простая математика, которую можно было бы легко найти в Google)

Ответ №2:

Вот код на случай, если он поможет следующему пользователю

 clear all
% SCRIPT BEGINS
t=linspace(0,1,22050);
freq=5; %how many in 1 sec
%t = 0:0.01:1; %time vector
A = 1; % amplitude
T = 1/freq; % period of the signal

vertoffset=0.5;
% square
square = mod(t * A / T, A) > A / 2;
square = square - vertoffset;
plot(t, square)
title('Square');

% rectangle
l = 0.2; % percentage the signal spends on low value
rectangle = mod(t * A / T, A) > A * l;
rectangle = rectangle - vertoffset;
figure;
plot(t, rectangle);
title('Rectangle');

% sawtooth
sawtooth = mod(t * A / T, A);
sawtooth = sawtooth -vertoffset;
figure;
plot(t, sawtooth);
title('Sawtooth');

% triangle
triangle = (mod(t * A / T, A) > 0.5).*mod(t * A / T, A)   (mod(t * A / T, A) <= 0.5).*(1 - mod(t * A / T, A));
triangle = 2*triangle - 1.5;
figure;
plot(t, triangle);
title('triangle');