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

zeitdiskrete Signale ableiten nahe fs/2

 

HauNei
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2013, 09:11     Titel: zeitdiskrete Signale ableiten nahe fs/2
  Antworten mit Zitat      
Hallo zusammen,
ich bin gerade dabei verschiedene Ableitungsmöglichkeiten zu suchen um Geschwindigkeitssignale in Beschleunigungssignale umzuwandeln.
Wichtig wäre hier, eine möglichst Recheneffiziente Methode zu finden.
Kann mir da jemand helfen?
Eine nummerische Ableitung wäre mir am liebsten,
Ableitung im Frequenzbereich kommt aufgrund der sehr hohen Frequenzen und damit verbunden hohen Multiplikationen nicht in frage.
Vielen Danke
HauNei
Private Nachricht senden Benutzer-Profile anzeigen


Benjamin Frank

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2013, 12:44     Titel:
  Antworten mit Zitat      
Grüß Gott,

Ich würde an deiner Stelle einfach eine simple Faltung über einen Ableitungskern machen. Je nachdem wie sehr deine Signale verrauscht sind größer oder kleiner.
Nehmen wir z.B. eine Größe des Ableitungskerns von 7 an, so müsstest du deine Daten einfach über [-1 -1 -1 0 1 1 1] falten et voila, fertig.
Da mir das auf dem Microkontroller jedoch auch viel zu lang gedauert hat, hab ich den Rechenweg ein wenig modifiziert (was sich gerade bei größeren Kernen lohnt).
Es ändern sich von Signalwert zu Signalwert ja jeweils bloß 4 Koeffizienten (egal wie groß der Kernel ist), am Besten ich skizzier das kurz:
Code:

Faltung(x):       0 0 0 -1 -1 -1  0 1 1 1  0   0   0
Indices:           0 1 2  3  4  5   6 7 8 9  10 11 12
Faltung(x+1):   0 0 0 0  -1 -1 -1 0 1 1  1   0   0
 


Wie man jetzt (hoffentlich) sieht, ändern sich bei der Berechnung des nächsten Wertes x+1 nur die Terme von Index 3,6,7 & 10.
Also kann man die Faltung mit Hilfe des letzten Wertes auch als Summe ausdrücken:
Faltung(x+1) = Faltung(x) + Signal(3) - Signal(6) - Signal(7) + Signal(10)

Das ging auf dem µC geschätzt fast 10 Mal schneller als die Faltung.

Schönen Gruß
 
HauNei
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2013, 09:33     Titel:
  Antworten mit Zitat      
Danke für die Antwort,
ich hab des jetzt mal anhand dreier übereinander gelagerten Sinussignalen probiert, bin da aber leider auf keine schlüssige Lösung gekommen.
Da mir immer die höchste Frequenz in meiner anschließenden FFT gefehlt hab.
Wenn ich dann als Kernel [-1,0,1] verwendet habe ging es und meine FFT hat mit meiner erwarteten gut übereingestimmt.

Hier mal mein Programmausschnitt, vielleicht hilft es dann weiter:

Code:
% Frequenzen des Sinusgemisch ---------------------------------------------
% -------------------------------------------------------------------------
f1= 200;f2= 1000;f3= 2000;
% -------------------------------------------------------------------------
Fs              = 8000;                                                 % Abtastfrequenz
Ts              = 1/Fs;                                                 % Abtastzeit
w               = 2*pi*f1;                                              % Omega
T               = (2*pi)/w;                                             % Periode
N               = 100*fix(T/Ts);                                        % Anzahl Werte
k               = 0:1:(N-1);                                            % Vielfache von w
df              = Fs/N;                                                 % Frequenzauflösung
x_fft           = (k*df)';                                              % Frequenzvektor
% -------------------------------------------------------------------------
 
% -------------------------------------------------------------------------
t           = (0:Ts:2*(N-1)*Ts)';% Zeitvektor

rauschen    = 1/10 *rand(length(t),1);
y           = sin(2*pi*f1*t)+ sin(2*pi*f2*t) + sin(2*pi*f3*t);
y           = y + rauschen;
dt_y        = 2*pi*f1*cos(2*pi*f1*t) +2*pi*f2*cos(2*pi*f2*t) + 2*pi*f3*cos(2*pi*f3*t);
dt_y        = dt_y + rauschen;

%DFT-Spektrum -------------------------------------------------------------
% -------------------------------------------------------------------------
y_fft      = (1/N) * fft(y);                                                
y_fft_func = (1/N) * fft(dt_y);
% -------------------------------------------------------------------------

b = [-1,-1, -1, 0 , 1, 1, 1];
a = 1;
dt_y_filt   = filter(b/Ts,a,y);
y_fft_filt  = (1/N)*fft(dt_y_filt);

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Frank

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2013, 08:45     Titel:
  Antworten mit Zitat      
Gerne.
Dass das Signal durch die Faltung auch geglättet wird, ist logisch & mehr oder weniger auch gewollt.
Wenn du dann natürlich ein hochfrequentes Signal hast, wird es dementsprechend gedämpft, je größer du die Ordnung des Kernels wählst.
Von daher macht es Sinn, wenn du selbige kleiner machst. Es rauscht dann u.U. halt etwas mehr.

Gruß
 
HauNei
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2013, 09:02     Titel:
  Antworten mit Zitat      
Danke,
da hab ich wohl mal wieder nicht nachgedacht, was die Länge des Kernels angeht und der Glättung.
Ich werde es jetzt einfach mal an einem realen Geschwindigkeitssignal probieren und die dann miteinander vergleichen.
Viele Grüße
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 - 2024 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.