2016-04-19 6 views
1

J'utilise les codes suivants dans Scilab pour générer la modulation de largeur d'impulsion en utilisant la méthode de vectorisation. Mais j'obtiens un tracé indésirable en faisant varier le nombre de cycles, TimePeriod, percent.Could quelqu'un peut-il m'aider?Génération de PWM en utilisant Scilab

percent=input("Enter the percentage:"); 
TimePeriod=input("Enter the time period:"); 
Cycles=input("Enter the number of cycles:"); 

x=0:Cycles*TimePeriod; 
t=(percent/100)*TimePeriod; 

for n=0:0.01:Cycles 
    y(((n*TimePeriod)< x) & (x<(n*TimePeriod+t))) = 1; 
    y(((n*TimePeriod+t)< x)& (x<((n+1)*TimePeriod))) = 0; 
    plot(y,'b','LineWidth',2) 
end 

Répondre

1

J'ai modifié votre code et maintenant cela fonctionne. Votre code était très lent en raison de la boucle for avec beaucoup d'appels. (Scilab et Matlab sont optimisés pour effectuer des opérations matricielles.) Ils ont donc réduit le nombre d'appels au nombre de cycles

percent=input("Enter the percentage:"); 
TimePeriod=input("Enter the time period:"); 
Cycles=input("Enter the number of cycles:"); 
ts = 0.01; // sample time 

x=ts:ts:Cycles*TimePeriod; 
on = ones(1, percent/100*TimePeriod/ts); 
off = zeros(1, (1 - percent/100)*TimePeriod/ts); 
signal = []; 
for cycle = 1:Cycles 
signal = [signal, on, off]; 
end 

figure(1) 
plot2d(x, signal);