| 
 | 
  
 
| el barto | 
 
 
Gast
 
 
 | 
 
  | 
Beiträge: ---
 | 
  | 
 
 | 
 
  | 
Anmeldedatum: ---
 | 
  | 
 
 | 
 
  | 
Wohnort: ---
 | 
  | 
 
 | 
 
  | 
Version: ---
 | 
  | 
 
 | 
 
 
 | 
 
  | 
 
  | 
      
Verfasst am: 19.12.2013, 09:30    
Titel: Erstellung Sinusfunktion
 | 
  | 
 
 
Hi leute,
 
 
ich bin recht neu bei der Programmierung in scilab und habe folgendes Problem:
 
Ich möchte ein Sinussignal begrenzter Länge erzeugen.
 
Dieses Signal soll genau 1/10 der Länge von N haben.
 
Das Signal selbst funktioniert mit der Datenlänge N.
 
Es funktioniert nur nicht wenn ich versuche die zeitliche Begrenzung mit reinzubringen.
 
 
Hier das Programm:
 
 
N=2048                                 // Datenlänge
 
Dt= 1/500000                        // Abtastrate
 
Fs= 50000                             // Frequenz
 
 
zv = 0 : Dt : (N*Dt);                                                 // Zeitvektor
 
for i=1:N
 
    if (i<=N) then
 
        xu = sin(2*%pi*zv*Fs);     //Sinussignal                                 
 
    else 
 
        xu=0;
 
 
    end 
 
end
 
 
 
Bitte um eure Hilfe
 
 
Danke
 |   
 | 
 
| 
 | 
 
 
		
		 |  
		
		
		
  
		 | 
		 
		
| Headbucket | 
 
  
 
Forum-Anfänger
 
 
 | 
 
  | 
Beiträge: 34
 | 
  | 
 
 | 
 
  | 
Anmeldedatum: 03.12.13
 | 
  | 
 
 | 
 
  | 
Wohnort: Dresden
 | 
  | 
 
 | 
 
  | 
Version: R2007B
 | 
  | 
 
 | 
 
 
 | 
 
  | 
 
  | 
      
Verfasst am: 19.12.2013, 10:09    
Titel: 
 | 
  | 
 
 
Hallo,
 
 
verstehe ich dich richtig, dass du einfach nur einen (abgetasteten) Sinus mit einer bestimmten Anzahl von Abtastwerten erzeugen möchtest?
 
 
Zu deinem Programm:
 
 
Dt ist sicher die Abtastperiode und nicht die Abtastrate
 
 
Bedenke bei der Erstellung des Zeitvektors, dass du in deinem Beispiel 2049 Punkte abtastest, da du ja von Null startest.
 
 
Außerdem ergibt deine for-Schleife keinen Sinn, da du einfach 2048 mal die selbe Berechnung durchführst.
 
 
Hier mal ein Beispiel:
 
 
 
N kannst du jetzt natürlich wählen, wie du willst. Das Beispiel ist ungetestet, da ich auch kein Sciplab besitze.
 
 
Grüße
 
Headbucket
 |   
 | 
 
| 
 | 
 
 
 
| Gast | 
 
 
 
 
 | 
 
  | 
Beiträge: ---
 | 
  | 
 
 | 
 
  | 
Anmeldedatum: ---
 | 
  | 
 
 | 
 
  | 
Wohnort: ---
 | 
  | 
 
 | 
 
  | 
Version: ---
 | 
  | 
 
 | 
 
 
 | 
 
  | 
 
  | 
      
Verfasst am: 19.12.2013, 11:05    
Titel: Erstellung Sinusfunktion
 | 
  | 
 
 
Da hast du natürlich recht. Dt= 1/500000
 
Mein Problem ist, dass ich mit dem Sinus Vektor weiter arbeiten möchte. D.h.  er muss die Datenlänge 2048 haben. Wenn ich in deinem neuen Code N/10 benutze, so wie ich es benötige, ist der Vektor entsprechend wieder zu klein. Aus diesem Grund hatte ich die fehlerhafte Schleife eingebaut.   
 |   
 | 
 
| 
 | 
 
 
 
| Gast | 
 
 
 
 
 | 
 
  | 
Beiträge: ---
 | 
  | 
 
 | 
 
  | 
Anmeldedatum: ---
 | 
  | 
 
 | 
 
  | 
Wohnort: ---
 | 
  | 
 
 | 
 
  | 
Version: ---
 | 
  | 
 
 | 
 
 
 | 
 
  | 
 
  | 
      
Verfasst am: 19.12.2013, 11:12    
Titel: 
 | 
  | 
 
 
Ich sehe gerad, dass das oben geschriebene wohl nicht 100% verständlich ist. 
 
Soll bedeuten, dass das Sinussignal selbst nur N/10 lang sein soll und der restliche Sinusvektor mit Nullen aufgefüllt werden soll um auf die Gesamtdatenlänge von 2048 zu kommen.
 |   
 | 
 
| 
 | 
 
 
 
| Gast | 
 
 
 
 
 | 
 
  | 
Beiträge: ---
 | 
  | 
 
 | 
 
  | 
Anmeldedatum: ---
 | 
  | 
 
 | 
 
  | 
Wohnort: ---
 | 
  | 
 
 | 
 
  | 
Version: ---
 | 
  | 
 
 | 
 
 
 | 
 
  | 
 
  | 
      
Verfasst am: 19.12.2013, 11:17    
Titel: 
 | 
  | 
 
 
ahh, ich hab es
 
 
Dankeschön für deine Mithilfe!!!!!
 
 
Programm:
 
zv = 0 t N/10*Dt-Dt) //Zeitvektor
 
 
 
for i=1:N
 
    if (i<=N/10) then
 
        xu = A * sin(2 * %pi * Fs * zv); //Sinussignal
 
    else xu(i)=0;
 
    end
 
end
 |   
 | 
 
| 
 | 
 
 
 
| Headbucket | 
 
  
 
Forum-Anfänger
 
 
 | 
 
  | 
Beiträge: 34
 | 
  | 
 
 | 
 
  | 
Anmeldedatum: 03.12.13
 | 
  | 
 
 | 
 
  | 
Wohnort: Dresden
 | 
  | 
 
 | 
 
  | 
Version: R2007B
 | 
  | 
 
 | 
 
 
 | 
 
  | 
 
  | 
      
Verfasst am: 19.12.2013, 11:28    
Titel: 
 | 
  | 
 
 
Ah. Das musst du natürlich dazu schreiben.
 
 
Mit der Schleife rechnest du aber wieder N/10 mal "umsonst"  .
 
 
Effektiver wird es sein, wenn du mein Beispiel nimmst und einfach noch folgende Zeile am Ende anfügst:
 
 
Damit füllst du alle Werte ab N/10 bis 2048 mit 0 auf.
 
Ich weiß allerdings nicht, ob es bei Scilab die funktion "end" auch gibt (gibt den höchsten index des vektors zurück).
 
 
Aber hauptsache es funktioniert  
 
 
Grüße
 |   
 | 
 
| 
 | 
 
 
 
 
 
  
 | 
  
 | 
 
| 
Einstellungen und Berechtigungen
 | 
 
 
 | 
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen 
 | 
 
 
 
 |  
 
 
  Impressum
 | Nutzungsbedingungen
 | Datenschutz
 | FAQ
 |   RSS
  
  
  Hosted by: 
 
  
  
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks 
 
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
  
 
 | 
 
 
		 |