Hallo zusammen! versuch ein audio signal in Scilab zu programmieren: Abtastfrequenz:44100HZ 1s stille dann folgt das Audio signal bzw.sinussignal über 2s lang, dann 3s Stille, und gleichzeitig muss ich der quadratische Mittelwert(RMS)rechnen. g(1:44100)=0; s=sin(0:88200); g(44100:132300)=s’; g(132300:264600)=0; plot(g); xtitle(“Audio Signal” , ”Zeit” , “Amplitude”); playsnd(g,44100); x=0; y=0; for i=1:264600, old=y, i=i+1; x=(g(i)^2)^0.5; y=old+x; end; A=y*(1/264600)^0.5; der pc bleibt immer hängen beim rechenen. woran kann es liegen??an der Pc Leistung??was mache ich falsch? kann mir bitte jemand helfen?? danke
for i=1:264600, old=y, i=i+1; x=(g(i)^2)^0.5; y=old+x; end; ich würde die i ausgeben, die gebildet werden. ist das i=i+l oder +1 (L oder Eins ?)
hm, da sind nen paar flaws drin:
>> s=sin(0:88200);
die Signalfrequenz ist bei abgetasteten Systemen auf die Abtastfrequenz
bezogen. Obige Zeile ist nicht, was Du willst. Außerdem hat nen
Gartenzaun mit 3 Latten zwei Zwischenräume, also hat auch der Vektor
0:88200 88201 Elemente, also 1 zuviel!
Matlab ohne for ist schneller !
'If you got the ':', you got Matlab'
so in etwa:
fa=44100; %Abtastfrequenz
f =1000; % Signalfrequenz
s=[zeros(1,1*fa) sin(2*pi*(0:(2*fa)-1)*(f/fa)) zeros(1,3*fa)];
rms=sqrt(sum(s.*s)/length(s));
Cheers
detlef
hi detlef! vielen vieln dank, werd s heute noch probieren und gebe ich dir ein feedback. ciao
Hallo detlef, Habe gerade dein Programm in Matlab ausgeführt, es ist super aber mir fällen noch paar kleinichkeiten und zwar: die stille hier istnur 0,5s und das signal läuft von 0,5 bis 1,4. und was die RMS angeht ichdachte es wird ohne ende laufen weil man muss die schritte von 0 bis 264600 rechnen,(es sind viele ergebnisse) wäre dir sehr dankbar wenn du mir weiter helfen kannst. ciao
>>die stille hier istnur 0,5s und das signal läuft von 0,5 bis 1,4. Möglicherweise stimmt die Abtastfrequenz dann nicht, die Anzahl der samples ist richtig. >>(es sind viele ergebnisse) ja, den RMS kann man natürlich für jeden Zeitpunkt ausrechnen, die Formel ist für jeden Abtastzeitpunkt auswertbar. Gute Nacht Detlef
Morgen! erstmal danke für das programm, ja habe nur noch eine kleine bitte und zwar die formel in Matlab zu programmieren(weiss die echt schlecht dargestellt:-)) von 1 bis 264600 wir die Y gerechnet, die s ist in quadrat und das ganze hoch 1/2(wurzel) 264600 2 1/2 R =(1/264600 ∑(s)) i=1 hier ist meine lösung aber ergendwie hackt s irgendwo?(bekomme nur nullen) habe die formel in zwei kleine formeln aufgespaltet:erstens die summe rechnen dann mit (1/264600)^0.5 multiplizieren. hast du mal eine lösung?? x=0; y=0; for i=1:264600, old=y, i=i+1; x=(s(i)^2)^0.5; //s ist unser signal y=old+x; end; A=y*(1/264600)^0.5;
die Formel ist mehrfach falsch. Wikipedia: RMS. sqrt(a)+sqrt(b)=sqrt(a+b) gilt nur für Spezialfälle. Cheers Detlef
zu wave gehört ausser Abtastfrequenz noch Anzahl der Channels und SampleWidth. Du machst ja sin(RangeHere) .. aber wenn SampleWidth auf 2 Byte steht, dann ist [-1..1] eines Sinus zu klein oder? Dann noch Channels, Du gehst davon aus, dass Du einen Monosignal erzeugst. Ob Matlab es so handhabt weiss ich nicht. Ich hab immer mit Python wave Dateien erzeugt http://docs.python.org/lib/module-wave.html es geht recht einfach dort. Grüsse, Daniel
Hallo! abgesehen vom namen Rms, wie kann ich diese formel in matlab programmieren, ist das richtig was ich da geschrieben habe?ansonsten kannst du mir bitte eine lösung geben??? danke
hi daniel, kennen mich mit dem thema nicht ganz gut aus, aber das signal, das mir Detlef geschrieben hat, funktioniert super und ich kann mir das signal anhören, das ist ja auch ein Monosignal. danke ciao
In Matlab sollte man "i" niemals als Laufindex benutzen, das kann teilweise zu ziemlich kurriosen Ergebnissen führen. Das Zeichen "i" wird auch zur Eingabe des Imaginärteils einer komplexen Zahl verwendet. Gruss, ajax
>>Since both i and j are functions, they can be overridden and used
as a variable. This permits you to use i or j as an index in FOR
loops, etc.<<
Das kommt bei Matlab raus für 'help i', da kann nichts anbrennen.
Allgemein ist es aber schlecht, in Matlab Laufvariablen zu benutzen, die
Rechnung wird dann sehr langsam, bis auf ganz wenige Ausnahmen gehts
ohne Laufvariablen.
Cheers
Detlef
Lerne Matlab oder benutze es nicht. Oben hatte schon jemand darauf hingewiesen, daß du Schleifen durch ':' ersetzen sollst. Du ignorierst es und wiederholst dich. >for i=1:264600, old=y, i=i+1; > >x=(s(i)^2)^0.5; //s ist unser signal > > >y=old+x; > >end; Durch 'for i=1:264600' zählst du i bereits hoch. Das 'i=i+1' ändert die Laufvariable nochmal. Ich würde an deiner Stelle nicht solchen Blödsinn verzapfen, wenn du ein lauffähiges Programm haben willst. Ich habe mich bisher eine knappe Stunde durch ein Scilab-Tutorial gearbeitet und kann mir, wenn ich meine und deine Matlab-Kenntnisse vergleiche, nicht vorstellen, daß du dich mehr als 5 Minuten mit Matlab beschäftigt hast.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.