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

Problem bei RMS-Bildung durch Glättung (TP). Mit Programm

 

Karsten_dd

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2013, 09:54     Titel: Problem bei RMS-Bildung durch Glättung (TP). Mit Programm
  Antworten mit Zitat      
Hallo zusammen,

ich lese sehr oft hier im Forum. Bisher konnte ich immer eine Lösung zu meinem Problem finden doch jetzt brauch ich doch mal Rat.

Ich möchte den RMS-Wert aus einem sinusförmigen Signal bestimmen. Dafür habe ich zwei Methoden implementiert:
(1) Samples quadrieren -> Aufsummieren -> Wurzelziehen
(2) Samples quadrieren -> Tiefpassfiltern -> Wurzelziehen

Ich habe auch noch eine dritte Methode mit einem Integrator implementiert. Diese ist aber gleichwertig mit der ersten Methode.

Eingangswerte:
- Signalfrequenz
- Abtastfrequenz
- Samples
- Filter-Grenzfrequenz
- Auswahl der Filterordnung

Ich habe die Standardwerte so gewählt, wie sie einem realen Messsystem entsprechen. So liegt z.B. die Abtastfrequenz bei 131072 Hz und die maximale Sampleanzahl bei 8192. Dadurch entsteht das erste Problem bei der 1. Auswertung: Der berechnete RMS-Wert liegt bei 0,707127 für einen idealen Sinus (1V Peak).
Um auf diesen Wert zu kommen runde ich zunächst auf ganzzahlige Perioden (von 62,5 auf 62). 62 Perioden entsprechen 8126,464 Samples. Ich runde ab auf 8126. Dadurch erkläre ich mir die Abweichung bei der Berechnung des RMS (Abweichung in der 5. Kommastelle). Ist das korrekt? Wie könnte ich diese Abweichung ausgleichen?

Ein weiteres Problem: Schalte ich überlagertes Rauschen ein, um einen realen Signal näher zu kommen und vergleiche den RMS-Wert durch Tiefpassfilterung (2. Auswertung), so kommt es vor, dass der RMS-Wert kleiner ist als mein "schmallbandiger" RMS-Wert (1. Auswertung). Egal, wie ich meine Filterparameter wähle. Was mache ich da falsch? Wie könnte ich das besser machen?

Ich hoffe, dass jemand etwas Zeit findet mein Programm zu testen und durchzugucken. Eigentlich handelt es sich ja um eine relativ einfache Thematik. Trotzdem weiß ich, dass es sicher nicht leicht ist den Code eines anderen erstmal zu verstehen.

Sollte irgendetwas unklar sein einfach schreiben. Gerne kann ich das ein oder andere noch ausführlich erklären.

Hier nochmal ein paar Codeauszüge, falls ihr die Datei nicht runterladen möchtet:
Code:
%Definitionen

f   = 1000;   % Frequenz
T   = 1/f;     % Periodendauer
A   = 1;       % Amplitude
off = 0;       % Y-Offset
phi = 0;       % Phasenverschiebung

fa  = 131072;      % Abtastfrequenz
Samples = 8192; % Samples
Ta  = 1 / fa;        % Abtastperiode

N   = floor(Samples * Ta / T); % Anzahl abzutastender Perioden
Samples = floor(N * T / Ta);   % Samples

ts  = 0:Ta:(T * N - Ta);    % Zeitpunkte an denen abgetastet wird

f_tp = 80;    % Grenzfrequenz des Tiefpassfilter

y = off + A * sin(2 * pi *f * ts + phi); % abgetasteter Sinus

%% bisherige Auswertung

uq_sum = 0;
N = Samples;

for i = 1:N
  uq_sum = uq_sum + y(i) * y(i);
end;

Urms_mean = sqrt(uq_sum / N);

%% neue Auswertung mit Tiefpass

y_power = power(y,2);         % Quadrierung

K = tan((2*pi*f_tp/fa) / 2);            % tan der normierten Grenzfrequenz
W = K^2;
alpha = 1 + K / Q + W;
a = [1 (2*(W-1)/alpha) ((1-K/Q+W)/alpha)];
b = [(W/alpha) (2*W/alpha) (W/alpha)];
y_filt = filter(b,a,y_power);

y_filt = sqrt(y_filt);  % Wurzelziehen

Urms_tp = mean(y_filt(round(0.8*length(y_filt)):end));  % Mittelwertbildung der letzten 20%
 


Das gezippte Matlab-Programm ist mit GUI und umfangreicher.

Grüße Karsten

RMS.zip
 Beschreibung:
Matlab-Programm

Download
 Dateiname:  RMS.zip
 Dateigröße:  13.54 KB
 Heruntergeladen:  587 mal


Headbucket
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.12.13
Wohnort: Dresden
Version: R2007B
     Beitrag Verfasst am: 03.12.2013, 10:06     Titel:
  Antworten mit Zitat      
Habe mich eben mal angemeldet (hätte ich gleich mal machen sollen).
Habe nämlich eine minimal zu alte zip hochgeladen. Hier die neuste (Funktionen sind die gleichen. Nur andere Bezeichungen)

RMS.zip
 Beschreibung:

Download
 Dateiname:  RMS.zip
 Dateigröße:  13.54 KB
 Heruntergeladen:  620 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Napomleb
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2013, 15:08     Titel: Re: Problem bei RMS-Bildung durch Glättung (TP). Mit Progra
  Antworten mit Zitat      
Hallo Karsten,

ohne deinen Code jetzt genauer angeschaut zu haben mal ein paar Grundgedanken

Karsten_dd hat Folgendes geschrieben:

Ich möchte den RMS-Wert aus einem sinusförmigen Signal bestimmen. Dafür habe ich zwei Methoden implementiert:
(1) Samples quadrieren -> Aufsummieren -> Wurzelziehen
(2) Samples quadrieren -> Tiefpassfiltern -> Wurzelziehen

Du könnest das ganze auch Fouriertransformieren und im Frequenzbereich lösen. Dann würdest du auch gleich sehen was bei ungeradzahligen Perioden passiert Wink


Karsten_dd hat Folgendes geschrieben:

Um auf diesen Wert zu kommen runde ich zunächst auf ganzzahlige Perioden (von 62,5 auf 62). 62 Perioden entsprechen 8126,464 Samples. Ich runde ab auf 8126. Dadurch erkläre ich mir die Abweichung bei der Berechnung des RMS (Abweichung in der 5. Kommastelle). Ist das korrekt? Wie könnte ich diese Abweichung ausgleichen?

Wenn es sich um ein Abtastproblem handelt solltest du mit "Fenstern" arbeiten.


Geht es dir generell nur um den RMS wert oder welches Ziel verfolgst du?

Was noch sehr nützlich ist den Filter anzuschauen, probier mal fvtool(b,a) Wink

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Headbucket
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.12.13
Wohnort: Dresden
Version: R2007B
     Beitrag Verfasst am: 06.12.2013, 07:34     Titel:
  Antworten mit Zitat      
Hallo Napomleb,

das ganze im Frequenzbereich zu lösen ist mir auch schon in den Sinn gekommen. Allerdings ist mein Programm in Delphi geschrieben und da umgehe ich oft diesen Weg, da es doch deutlich mehr Aufwand ist. Vllt sollte ich es aber wirklich mal auf einen Versuch ankommen lassen.

Mir geht es generell nur um den RMS-Wert.

fvtool(b,a) war ein sehr guter Tip. Das werde ich ab jetzt öfters mal nutzen Smile.

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.