2011-10-27 55 views
0

對於正方形,矩形和y軸上的鋸齒信號,我有一個從0到1的信號,我如何將信號向下移動(垂直偏移),使信號從-0.5到在y軸上爲0.5,並將三角形信號從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'); 

感謝我使用八度/ MATLAB

回答

0
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搜索非常基本的數學運算)

0

這裏的情況下,它可以幫助下一個人代碼

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');