Code Matlab

01/04/2017 17:19 Navox1#1
Grüße,

Hoffe jemand kann mir hier schnell bei dem "einfachen" Matlab Code helfen.


function my_hist(x)
figure
centers=(-127.5:127.5)/128;
counts=hist(x,centers);
counts=counts/length(x)*256/2;
bar(centers,counts);
xlabel('x')
ylabel('h(x)')

Was ich verstanden habe:
Hier wird die Fkt. my_hist(x) definiert. xlabel ylabel beschriftet die x bzw y- achse.
Aber der Rest ist mir iwie schleierhaft.
Mit centers wird eine Zahlenfolge von (-127.5 bis 127.5 in einer Schritten)/128 definiert.
counts definiert jetzt ein Histogram mit der Eingabe x auf der x-Achse und centers auf der y-achse?
was bringt jetzt das nächste counts?
Was bringt das bar? Ein Balkendiagram?
Bekomme ich jetzt ein Balkendiagram+Histogram raus?


Hoffe jemand kann mir eben helfen :/

Grüße

Navox
01/05/2017 00:27 Shadow992#2
Quote:
Originally Posted by Navox1 View Post
Grüße,

Hoffe jemand kann mir hier schnell bei dem "einfachen" Matlab Code helfen.


function my_hist(x)
figure
centers=(-127.5:127.5)/128;
counts=hist(x,centers);
counts=counts/length(x)*256/2;
bar(centers,counts);
xlabel('x')
ylabel('h(x)')

Was ich verstanden habe:
Hier wird die Fkt. my_hist(x) definiert. xlabel ylabel beschriftet die x bzw y- achse.
Aber der Rest ist mir iwie schleierhaft.
Mit centers wird eine Zahlenfolge von (-127.5 bis 127.5 in einer Schritten)/128 definiert.
counts definiert jetzt ein Histogram mit der Eingabe x auf der x-Achse und centers auf der y-achse?
was bringt jetzt das nächste counts?
Was bringt das bar? Ein Balkendiagram?
Bekomme ich jetzt ein Balkendiagram+Histogram raus?


Hoffe jemand kann mir eben helfen :/

Grüße

Navox
Zuerst einmal musst du klar zwischen Histogramm und Säulendiagramm unterscheiden. Ein Histogramm hat erst einmal wenig mit einem Diagramm zu tun. Es ist bloß eine Art von "Zusammenfassen/Speichern der Werte". Ein Histogramm hat also genau so viel mit Diagrammen zu tun wie eine SQL-Datenbank mit HTML-Tabellen zu tun hat: Beides ist einfach und vollautomatisiert in einander umwandelbar, aber beide Sachen können gesondert und ohne die andere Seite existieren. Es ist also wichtig, dass du dir klar machst was genau ein Histogramm ist.

Dazu kannst du zum Beispiel das näher anschauen: [Only registered and activated users can see links. Click Here To Register...]

(nur das Kapitel "Histogramm" alleine reicht völlig aus und ist auch ohne Wissen außenrum verständlich).

Wenn dir klar ist was ein Histogramm ist, dann kannst du dir noch einmal deinen Code ansehen und dann siehst du auch, dass er folgendes macht:

PHP Code:
// Define function 
function my_hist(x
figure
// get values ranging from -0.99 to + 0.99 with step 1/128=0.0078125
centers=(-127.5:127.5)/128;
// create histogram for x and use the values in centers as possible bins (--> assign the values in x to the nearest bin in centers)
counts=hist(x,centers);
// scale all values up by 128 --> Values ranging from -0.99 to + 0.99 --> divide by count of elements in x (I do not know which "Meta-Goal" this fulfills, it seems kind of stupid to me... However....)
counts=counts/length(x)*256/2;
// Create a "Säulen"-diagram with values "centers" in x direction and values "counts" in y direction
bar(centers,counts);
// Give the diagram x and y direction some names
xlabel('x')
ylabel('h(x)'
Edit:
Btw. Ein Balkendiagramm ist laut Definition auch noch einmal etwas anderes als ein Säulendiagramm, aber das nur am Rande. ;)
01/05/2017 11:55 Navox1#3
Kurz zum "Sinn" des Codes :)
Ich habe eine Audiodatei welche ich mit "x = audioread('english5.wav')" die Abtastwerte im Vektor x speichere.
Die Aufgabenstellung:
Lesen und verstehen Sie den Code der Funktion my_hist(x). Welche Art der
Normierung wird verwendet? Erzeugen Sie anschließend ein Histogramm aus den
Abtastwerten der Sprachaufnahme.


Was mich jetzt verwirrt ( sorry schonmal ^^):

figure Was bedeutet dieser Befehl?
counts=hist(x,centers); Erstellt dieser Befehl die Dicke der Balken?



Schonmal dickes Danke an dir :)
01/05/2017 12:48 Shadow992#4
Quote:
Originally Posted by Navox1 View Post
Kurz zum "Sinn" des Codes :)
Ich habe eine Audiodatei welche ich mit "x = audioread('english5.wav')" die Abtastwerte im Vektor x speichere.
Die Aufgabenstellung:
Lesen und verstehen Sie den Code der Funktion my_hist(x). Welche Art der
Normierung wird verwendet? Erzeugen Sie anschließend ein Histogramm aus den
Abtastwerten der Sprachaufnahme.


Was mich jetzt verwirrt ( sorry schonmal ^^):

figure Was bedeutet dieser Befehl?
counts=hist(x,centers); Erstellt dieser Befehl die Dicke der Balken?



Schonmal dickes Danke an dir :)
Na komm schon googlen ist nicht verboten: [Only registered and activated users can see links. Click Here To Register...]

Und die Zeile mit dem "counts = hist(...)" erstellt genau ein Histogram und speichert es in "counts". Was genau du da mit der " Dicke der Balken" meinst versteh ich nicht, aber ich vermute, dass dir entweder immer noch nicht klar ist was ein Histogramm ist oder aber du dir den Link nicht angeschaut hast.

Die Normierung ist dann ganz klar das "Durch length(x) teilen". Ich weiß gerade nicht auswendig was für eine Normierung das ist, aber google hilft dir dabei bestimmt ;)

Edit:
Würde sagen es ist eine p-Norm mit p=0, ob dein Lehrender/Aufgabensteller das hören will ist aber wieder was anderes (eventuell hab ich length auch falsch in Erinnerung was der Befehl macht? Um googlen wirste also so oder so net drum rumkommen).
01/05/2017 12:53 Navox1#5
Okay habs soweit verstanden, danke nochmal :)