WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rechnen mit einem 12 Bit quantisierten Signal

 

t.b.
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2011, 19:36     Titel: Rechnen mit einem 12 Bit quantisierten Signal
  Antworten mit Zitat      
Hallo zusammen. Ich habe ein Problem und hoffe ihr könnt mir bei der Lösung helfen.

Ich habe eine Signal x, das mit 12 Bit quantisiert ist. Ich habe also 12^2 Quantisierungsstufen. Wenn ich jetzt eine Funktion bestimmen möchte, die durch die lokalen Maxima verläuft, mache ich das ja mit
Code:

f_max = interp1(n(Maxima),x(Maxima),n,'linear'),


wobei n meine Stützstellen darstellt. Wie kann ich es am einfachsten hinbekommen, dass meine neue Funktion f_max an die Quantisierungsstufen angepasst ist?

Ich hoffe jemand hat da eine einfache Idee.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.11.2011, 21:32     Titel: Re: Rechnen mit einem 12 Bit quantisierten Signal
  Antworten mit Zitat      
Hallo t.b.,

Wenn ich Dich richtig verstehe:
Code:
x = rand(1, 100);
y = round(x * 4095) / 4095;

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 10:11     Titel:
  Antworten mit Zitat      
Das ist sehr gut, danke.

Aber kannst du mir auch sagen, warum ich nur 4095, statt 2^12=4096 Stufen nehmen muss?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.11.2011, 11:50     Titel:
  Antworten mit Zitat      
Hallo t.b.,

Weil ich die Null dazu genommen habe.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 12:05     Titel:
  Antworten mit Zitat      
Achso, du zählst die 0 als erste Stufe. Wenn ich jetzt aber ein Signal habe, dass in einem Bereich von -5 bis 5 verläuft. Dann ist ja meine erste Stufe bei -5 und dann geht es in der Schrittweite (1/4096) weiter bis 5, oder?

Kann ich dann die Stufe bei -5 so betrachten, wie als wenn ich bei der 0 anfangen würde? Also wenn die -5 dazugehören soll, nehme ich 4095 Werte, gehört sie nicht dazu, dann 4096?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.11.2011, 12:21     Titel:
  Antworten mit Zitat      
Hallo t.b.,

Wenn die Werte von einschließlich -5 bis +5 laufen, kannst Du zunächst 5 addieren, dann bist Du bei 0 bis 10. Wenn Du dies mit 4096 multiplizieren würdest, hättest Du 4097 verschiedene Werte und damit einen Bias nach dem Dividieren.

Um soetwas sicher zu vermeiden, muss Du das Programm unbedingt testen. Dafür kannst Du bereits quantisierte Werte einsetzen, sie erneut quantisieren und danach muss das Ergebnis identisch sein.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 12:59     Titel:
  Antworten mit Zitat      
könnte ich das nicht einfach so machen:
Code:

y=round(x*4096)/4096


also irgendwie weiß ich jetzt gerade nicht, wie ich die sache angehen soll.

das signal, mit dem ich arbeite, wurde mit einem AD-Wandler quantisiert. Der Bereich geht maximal von -5 bis +5. Ich habe mir die Stufen auch mal einzeln eingezeichnet, und zwar so:

Code:
for u=-5:(1/4096):5
line([0  10],[u   u])
end


Wenn ich aber u von -5:1/4095:5 laufen lasse, dann liegen die Werte zwischen den Quantisierungsstufen. Ich bin mir jetzt nicht sicher, wie ich es machen soll. Was würdest du denn vorschlagen?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.11.2011, 14:05     Titel:
  Antworten mit Zitat      
Hallo t.b.,

Code:
size(-5:(1/4096):5)
% >> 40961

Das wäre schon ein ungewönlicher AD-Wandler mit 40961 Stufen. Du meinst wahrscheinlich:
Code:


Ich hatte bereits vorgeschlagen:
Code:
x = (x + 5); % Shift auf 0-10
x = round((x / 10) * 4095) / 4095;  % Quantisieren;
x = x - 5;  % Zurück-shiften

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2011, 21:06     Titel:
  Antworten mit Zitat      
okay. danke dir nochmal.

ich habe aber doch noch ne frage.

wenn ich ein signal mit 12 bit quantisiere auf einen bereich von -5 bis 5. ist dann eine quantiserungsstufe 10*(1/12^2). Irgendwie bin ich mir gerade nicht mehr sicher.

gruß
t.b.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.11.2011, 00:31     Titel:
  Antworten mit Zitat      
Hallo t.b.,

Ich vermute Du meinst 2^12m nicht 12^2. Wenn Du Matlab zur Vefügung hast, kannst Du es einfach probieren:
Code:
bins = linspace(-5, 5, 2^12);
bins(2) - bins(1)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.