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 beim Auflösen einer Gleichung nach einer Variablen

 

Slev1n
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 18.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2015, 17:42     Titel: Problem beim Auflösen einer Gleichung nach einer Variablen
  Antworten mit Zitat      
Hallo Leute,

hab in der Hilfefunktion in Matlab und der Suchfunktion des Forums schon ein paar Einträge bezüglich dem "solve" Befehl durchforstet. Werde aber trotzdem nicht ganz schlau aus meinem Ergebnis.
Code:
% % Bestimmung von tau für "moving average (MA)" Filter


M=100;  % Anzahl der Werte über die gemittelt wird
mp=1;   % Anzahl kaskadierter Filter

syms w;

H=(sin(w*M/2)/M*sin(w/2))^mp-1/sqrt(2); % H=0 für best. omega
% H=(sin(w*M/2)/M*sin(w/2))^mp %Frequenzgang des kaskadierten MA

solve(H,w)

 
ans =
 
 4*pi*k - 4*atan(z^(1/2))
 4*atan(z^(1/2)) + 4*pi*k

 


Durch auflösen der Gleichung will ich die -3dB Grenzfrequenz finden, dafür setze ich H=0 indem ich den Frequenzgang noch minus 1/sqrt(2) nehme.
fzero klappt auch nicht, weil er sagt, dass nur "double" als input erlaubt ist.

Bin eher Anfänger in Matlab und hoffe ihr könnt mir helfen. Wenn ich mir den geplotteten Freuqenzgang ansehe, dann müsste w ungefähr 0,009 sein. Das Ergebnis unter ans verstehe ich allerdings nicht.

Viele Grüße

Slev1n
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.08.2015, 19:50     Titel:
  Antworten mit Zitat      
für mich siht das im plot nicht so aus als hätte H nullstellen.

Zitat:
fzero klappt auch nicht, weil er sagt, dass nur "double" als input erlaubt ist.

Zitat:
Function to solve, specified as a handle to a scalar-valued function.

du hast aber eine symbolische funktion
Zitat:
H=@(w) (sin(w*M/2)/M.*sin(w/2)).^mp-1/sqrt(2)

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Slev1n
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 18.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2015, 09:03     Titel:
  Antworten mit Zitat      
Hey,
danke für die schnelle Antwort. Mir ist ein Fehler mit der Klammer aufgefallen wodurch nun zumindest die richtige Gleichung da steht. Ich schaff es aber nun nicht mal die Funktion für mehrere w zu plotten.
Code:
% Test of the MA frequency response
clear all;
close all;

w=0:0.001:1;
%w=0.001
mp=1;
M=500;
H = zeros(1,length(w));

H = (sin(w*M/2)/(M.*sin(w/2))).^mp
H_dB=20*log(H);
%H_plot=H(1:500);
%omega=w(1:500);


figure(1)
plot(w,H)
axis([0 1 0 1])
xlabel 'Normalized frequency \omega/fs'
ylabel 'Amplitude |H(w)|'

figure(2)
semilogx(w,H_dB)
xlabel 'Normalized frequency \omega/fs'
ylabel 'Amplitude |H(w)| [dB]'
 


Ich bekomme nur einen Wert für H raus, obwohl es doch ein Vektor sein müsste? Scheinbar überseh ich was.

Wenn ich nur 0.001 für w einsetze, bekomme einen sinnvollen Wert.

Gruß
Slev1n
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.08.2015, 13:22     Titel:
  Antworten mit Zitat      
Code:
H = (sin(w*M/2)/(M.*sin(w/2))).^mp
ist die matrix division hier gewollt ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Slev1n
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 18.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2015, 09:19     Titel:
  Antworten mit Zitat      
Was so ein kleiner Punkt nicht alles ausmacht...

Die richtige Formel lautet:
Code:
H = abs((sin(w*M/2)./(M*sin(w/2))).^mp)


Nun will ich aber die 3dB-Frequenz bestimmen. Dafür nehme ich folgende Gleichung und suche die Nullstelle.
Code:
H_3dB = abs((sin(w*M/2)./(M*sin(w/2))).^mp)-(1/sqrt(2))


das "1/sqrt(2)" ist ja der Wert an der 3dB Stelle.

Nun bekomme ich aber einen seltsamen Wert:
Code:
ans =
-226.25034296430181368018512710754


Am Plot kann man sehen, dass sie bei ca. 0.01 liegen müsste.
Code:
% Test of the MA frequency response
clear all;
close all;

w=0:0.001:1;
%w=0.001
mp=1;
M=500;
H = zeros(1,length(w));

H = abs((sin(w*M/2)./(M*sin(w/2))).^mp)
H_dB=20*log(H);
%H_plot=H(1:500);
%omega=w(1:500);


figure(1)
plot(w,H)
axis([0 1 0 1])
xlabel 'Normalized frequency \omega/fs'
ylabel 'Amplitude |H(w)|'

figure(2)
semilogx(w,H_dB)
xlabel 'Normalized frequency \omega/fs'
ylabel 'Amplitude |H(w)| [dB]'
 


Viele Grüße
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.08.2015, 14:11     Titel:
  Antworten mit Zitat      
Zitat:
Nun bekomme ich aber einen seltsamen Wert:
Code:
ans =
-226.25034296430181368018512710754

immer auch mit angeben welche eingabe diese ausgabe erzeugt.

Zitat:
If the symbolic solver cannot find a solution of an equation or a system of equations, the toolbox internally calls the numeric solver that tries to find a numeric approximation.

ich würde mal raten das du wieder solve genommen hast und nicht fzero und davon ausgehen das er da er keine lösung gefunden hat nummerisch rangegangen ist und da deine funktion nicht stetig ist treten da ein paar probleme auf. daher das ergebenis.
ich würde mal fzero probieren mit gutem startwert. oder vpasolve mit gutem startwert.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Slev1n
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 18.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2015, 13:09     Titel:
  Antworten mit Zitat      
Hey,

du hast recht, hab es ausversehen nochmal mit solve versucht. Funktionieren tut es wie folgt:

Code:
%% Berechnung der -3dB Grenzfrequenz des Moving Averag filters

clear all
close all


N=500;            % start value for N
n=100;         % end value for n
% w=2*pi*f;
syms w

H=@(w) 1/N*abs(sin(w*N/2)/sin(w/2))-1/sqrt(2);
y=fzero(H, 0.1)
 


je nachdem wieich den Startwert setze, kommen ganz passable Werte raus. Für 0.01 bisher am besten

Gruß

Slev1n
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.