LabVIEWForum.de - Programm von MatLab inLabVIEW übersetzen

LabVIEWForum.de

Normale Version: Programm von MatLab inLabVIEW übersetzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5
Hallo zusammen,

ich bin absoluter Anfänger in LabVIEW und soll den folgenden Code in LabVIEW übersetzen. Allerdings hatte ich noch nie mit LABView zu tun.Sad

Der Code sieht folgender aus:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
[N, NS]=size(data)
dt=1/f_at
Nt_start=floor(t_start/dt)
Nt_end=floor(t_end/dt);
Time=dt*NS
Deltaf=1/Time
p0=2e-5;
rho=1.2;
c0=340;
ddx=0.1
obereGrenze=2*pi/(ddx);
theta2 =1e-2;
DDX=0.04;
dfx=DDX;
dfy=DDX;
%############### Ende Eingabe ######################
%###############
[N P]=size(Koo);
xn(1:N)=Koo(1:N,1);
yn(1:N)=Koo(1:N,2);
N = length(xn);
rn=[xn',yn',zeros(N,1)];

%####################
Fz(1:N,1:NS)=0;
w=hamming(NS); %Gewichtsfunktion
NW=sum(w);
for n=1:N
for m=1:NS
xs(n,m)=data(n,m)*w(m);
end
end
for n=1:N
Fz(n,Smile=fft(xs(n,Smile); %FFT berechnen
end

Fz=Fz/NW;
%####################
Nx=floor((right-left)/DDX)+1;
Ny=floor((top-bottom)/DDX)+1;
dfx=DDX;
dfy=D
%####
d1=DF;
for k=1:Ny
for l=1:Nx
n=l+(k-1)*Nx;
x(n)=left + dfx*(l-1);
y(n)=bottom + dfy*(k-1);
end
end

M = length(x);
z = -d1*ones(M,1);
% ####
p(1:M)=0;% = zeros(M,1);
uz(1:M)=0;% = zeros(M,1);
%##################################################################

%#############################
over=4;
Lmx=max(xn)-min(xn);
Lmy=max(yn)-min(yn);
dkx=2*pi/(over*Lmx);
dky=2*pi/(over*Lmy);
NKx=floor(obereGrenze/dkx)+1;
NKy=floor(obereGrenze/dky)+1;
for k=1:NKy
for l=1:NKx
n=l+(k-1)*NKx;
KX(n)=-obereGrenze/2 + dkx*(l-1);
KY(n)=-obereGrenze/2 + dky*(k-1);
end
end
%#####################################################################
%##########################
for f=f_low:10:f_high;
lambda = c0/f;
k0 = 2*pi/lambda;
omega=2*pi*f;
%#########################################
Frequ=floor(f/Deltaf)+1;
prn=zeros(N,1);
prn(1:N)=Fz(1:N,Frequ);
Mk=size(KX);

%#####
for n=1:N
for k=1:Mk(2)
K2=KX(k)^2+KY(k)^2;
if K2 < k0^2
KZ(k)=sqrt(k0^2-K2);
A(k,n)=exp(-sqrt(-1)*(KX(k)*xn(n)+KY(k)*yn(n)+KZ(k)*DF ));
else
KZ(k)=sqrt(K2-k0^2);
A(k,n)=exp(-sqrt(-1)*(KX(k)*xn(n)+KY(k)*yn(n))-KZ(k)*DF );
end
end
end

AhA=A'*A;
Ann=AhA(1,1);
AhA=AhA+Ann*theta2*eye(N);
invAhA=inv(AhA);
%######################################################################

%#### ################################
for n=1:M
for k=1:Mk(2)
K2=KX(k)^2+KY(k)^2;
if K2 < k0^2
KZ(k)=sqrt(k0^2-K2);
alfa(k,n)=exp(-sqrt(-1)*(KX(k)*x(n)+KY(k)*y(n)+KZ(k)*(z(n)+DF) ));
beta(k,n)=+KZ(k)*alfa(k,n)/(rho*omega);
else
KZ(k)=sqrt(K2-k0^2);
alfa(k,n)=exp(-sqrt(-1)*(KX(k)*x(n)+KY(k)*y(n))-KZ(k)*(z(n)+DF) );
beta(k,n)=-sqrt(-1)*KZ(k)*alfa(k,n)/(rho*omega);
end
end
end
Aha=A'*alfa;
Ahb=A'*beta;
c = invAhA*Aha;
b = invAhA*Ahb;
%#######################################################################
p = p + prn.'*c;
uz = uz + prn.'*b;
%##### z-Komponente der Intensität ##################################
end
%Umsortieren
p0=2e-5
for k=1:Ny
for l=1:Nx
m=l+(k-1)*Nx;
result(l,k)=abs(p(m));
end
end
</div>

Beispielsweise habe ich jetzt schon einige Zeit gesucht und keine "Übersetzung" für den Befehl length(x) gefunden. Was wäre den das entsprechende Symbol in LabVIEW?
Wie erstell ich denn am kompaktesten die Schleifen?

Würde mich sehr über eine Antwort freuen.

Grüße
Peter

PS: Ich soll keine Express-VIs verwenden.
' schrieb:Beispielsweise habe ich jetzt schon einige Zeit gesucht und keine "Übersetzung" für den Befehl length(x) gefunden. Was wäre den das entsprechende Symbol in LabVIEW?

In der array Palette gleich das erste.

' schrieb:Wie erstell ich denn am kompaktesten die Schleifen?

Was meinst du mit kompakt? Es gibt wie überall For- und While-Schleifen. Wenn du ein array hast und die Schleife so oft durchlaufen soll wie das array Elemnte hat benutzt du einfach die Autoindizierung. Dann sparst du dir das "length(x)". Ist ziemlich kompakt.

' schrieb:PS: Ich soll keine Express-VIs verwenden.

Das ist ein sehr guter Vorsatz!



Den ganzen Code hier zu posten ist überflüssig, denn den wird dir niemand übersetzen. Du musst selber anfangen und bei konkreten Problemen kannst du hier nachfragen.

Lese dich ein bisschen ein. Hier habe ich ein paar pdf-Dokumente gepostet, die dir vielleicht weiterhelfen. Beitrag #5.


Gruß dimitri
Hi,

ich weiß nicht, was Du mit "übersetzen" meinst, aber LabVIEW hat sowohl matlab- als auch Mathscript-Knoten. Letzteres müsste eigentlich für Deinen Fall gehen (bin aber nur so drüber geflogen)... Dann brauchst du auch keine Matlab-Lizenz für den etnsprechenden Knoten...

Grüße,

ch
' schrieb:ich bin absoluter Anfänger in LabVIEW und soll den folgenden Code in LabVIEW übersetzen. Allerdings hatte ich noch nie mit LABView zu tun.Sad

Ich nehme an, du sollst den Code mit LV-Mitteln nachbauen...dazu musst du den Matlab-Code erst mal verstehen und analysieren...und dann Stück für Stück aufbauen! Wenn du noch nie mit LV zu tun hattest, könnte das ein bisschen dauern...einfach, weil sich die Programmierkonzepte unterscheiden...

Du kannst dir im LV-Example Finder aber z.B. mal das Beispiel "Building Arrays.vi" (Suche nach "FOR") anschauen, um dir die Verwendung von For- und While-Schleifen klarzumachen!

Gruß
Achim
Würde Dir gerne helfen, hatte aber mit Matlab seit 6 Jahren nichts mehr zu tun und damals habe ich es nur bei 4 Laborterminen im Rahmen meines Studiums mal angeschnitten, d.h. ich habe so gut wie keine Ahnung (mehr) von Matlab. Du solltest in Worten sagen, was Du umsetzen möchtest und dann kann man Dir helfen. Den Matlab-Code verstehe ich auf die Schnelle nicht und zum Einarbeiten habe ich gerade keine Zeit, keinen Bedarf und auch keine Lust. Wink

Gruß Markus

' schrieb:ich bin absoluter Anfänger in LabVIEW und soll den folgenden Code in LabVIEW übersetzen. Allerdings hatte ich noch nie mit LABView zu tun.Sad
' schrieb:Den Matlab-Code verstehe ich auf die Schnelle nicht und zum Einarbeiten habe ich gerade keine Zeit, keinen Bedarf und auch keine Lust. Wink

floor: rundet nach unten
' ist das selbe wie transpose
wenn ein . hinter dem Vektor steht, dann geht die Rechenoperation elementweise von statten
ein : als Index heißt "laufe alle Elemente durch"

Rest ist selbsterklärend Wink



Im übrigen wäre ein Satz dazu was der Code überhaupt machen soll nicht schlecht. Einige Variablen sind auch vorher nicht definiert ... ich nehme an die muss der Benutzer dann im m-file selbst eintragen. Und was steht in data?


Gruß dimitri
' schrieb:Rest ist selbsterklärend
Aus das hier?
[attachment=22609]
' schrieb:Aus das hier?
[attachment=50826:clip000.png]
Jaja, die Forensoftware..., die macht aus Doppelpunkt-Klammer zu das entsprechende Smiley-Icon: : ) =Smile

Gruß, Jens
' schrieb:[attachment=50826:clip000.png]

Die Code nimmt sich halt selber nicht so ernst...Tongue
Ich weiß ehrlich gesagt auch noch nicht für was das Programm gut sein soll. Das primäre Ziel ist erstmal die "übersetzung" und dann wird sich der rest schon ergeben.

Die Werte, die nicht definiert sind werden duch eine externe Schnittstelle übergeben. Z.B. Messeinrichtung.

Der Code läuft bereits in Mathscript, allerdings soll durch die Übersetzung eine schnelle Berechung erfolgen und somit die Wartezeiten reduziert werden.
Seiten: 1 2 3 4 5
Referenz-URLs