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

txt-Datei laden

 

01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2010, 15:19     Titel:
  Antworten mit Zitat      
Okay,

ich habe es durch L ersetzt! So läuft es, aber ich muss noch was probieren und vllt nochmal nachfragen, vielen dank!

Was mich noch verwirrt ist, dass zwischen den Spalten(Zahlen) ja nicht nur eine Leerstelle ist, sondern unterschiedlich viele. Woher weiss das matlab?

mfg
Private Nachricht senden Benutzer-Profile anzeigen


01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2010, 15:45     Titel:
  Antworten mit Zitat      
Mit meinem Code komme ich auf folgendes Ergebnis. Dabei wundert mich die größte Amplitude bei 0Hz, kann das sein?

mfg

erg.png
 Beschreibung:

Download
 Dateiname:  erg.png
 Dateigröße:  18.56 KB
 Heruntergeladen:  477 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 09.05.2010, 15:47     Titel:
  Antworten mit Zitat      
01detlef hat Folgendes geschrieben:
Okay,

ich habe es durch L ersetzt! So läuft es, aber ich muss noch was probieren und vllt nochmal nachfragen, vielen dank!

Was mich noch verwirrt ist, dass zwischen den Spalten(Zahlen) ja nicht nur eine Leerstelle ist, sondern unterschiedlich viele. Woher weiss das matlab?

mfg


wenn du bei
Code:
textscan, für den option delimiter white space gibst, was ja der default value ist, dann werden wiederholte white spaces als eine betrachtet.
habe ich gestern in doc gelesen ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2010, 15:57     Titel:
  Antworten mit Zitat      
Hallo,

eine Frage zu der Wahl von t:
Code:
t = (0:L-1)*T;  


Ist das universell so berechenbar oder wieso wurde das hier so gewählt?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 09.05.2010, 16:20     Titel:
  Antworten mit Zitat      
wegen der abtastfrequenz fs,
deswegen wollen wir als zeit achse nicht: 1,2,3,4....
sondern: 1Ts, 2Ts, 3Ts, 4Ts.... (bzw T heisst es in deinem Beispiel...)
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2010, 16:25     Titel:
  Antworten mit Zitat      
ok,
aber was sagst du zu dem Ergebnis was ich weiter oben hochgeladen habe?? Kann das sein bei 0Hz ?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2010, 17:11     Titel:
  Antworten mit Zitat      
Ich habe jetzt diesen Beispiel-Code gefunden hier im Forum und würde den gerne auf meinen Anpassen.

Ausgangscode:
Code:
% Zeitbereich
% ----------------------------------

fa = 8000; % Abtastfrequenz
fn = fa/2; % Nyquistfrequenz
N = 1024; % gewünschte FFT-Länge (N=2^x, sonst wird der DFT-Algorithmus verwendet!)
df = fa/N; % Frequenzauflösung
% Erzeugung eines Datensatzes mit N Abtastwerten
% ----------------------------------------------
t = 0 : 1/fa : (N-1)/fa; % x-Vektor
% Frequenzvorgabe in Hz als ganzzahlig Vielfaches der Frequenzauflösung der DFT/FFT:
f1 = df*100; % bei fa = 8000 Hz und N = 1024 beträgt df = 7,8125 Hz und
% f1 damit 781,25 Hz
 f1 = 784;
 f1 = df;
 phase = pi/2;

a1 = 1; % Amplitudenvorgabe
y = a1*sin(2*pi*f1*t); % y-Vektor
y = [y(1:N/2) zeros(1, N/2)];
% Graphische Darstellung
% ----------------------
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
max_y = max(abs(y))*1.1;
fig = figure(1);
plot(y)
axis([0 N -max_y max_y])
title('Datensatz')
ylabel('Amplitude')
xlabel('N Stützstellen')
grid


% Frequenzbereich
% ----------------------------------

% Berechnung der FFT
% ------------------
H = fft(y, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Amplitudenskalierung (Normierung auf N) und verschieben der Elemente des
% Amplitudenvektors, so dass die Darstellung des Amplitudengangs von -fn...0...fn
% erfolgen kann:
amplitudengang = fftshift(amplH/N);
% Graphische Darstellung
% ----------------------
% Frequenzvektoren (werden bei der graphischen Darstellung benötigt):
x_fn = 0 : df : fn-df;
x_fa = 0 : df : fa-df;
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
%a = max([a1, a2, a3, a4, a5]); % wird später benötigt
a = a1;
fig = figure(fig+1);
stem(x_fa-fn, amplitudengang, 'b.-')
axis([-fn fn 0 a/2*1.1])
title('Amplitudengang')
ylabel('Amplitude')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(x_fa-fn, 20*log10(amplitudengang))
%axis([-fn fn -100 20*log10(a/2)+3])
axis([-fn fn -100 3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Darstellung des interessierenden Frequenzbereichs des
% Amplitudengangs (0...fn) und
% daran angepasste Amplitudenskalierung (Normierung auf N/2):
amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2)]; % DC-Bin auf N normieren!
fig = figure(fig+1);
stem(x_fn, amplitudengang, 'b.-')
axis([0 fn 0 a*1.1])
title('Amplitudengang')
ylabel('Amplitude')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(x_fn, 20*log10(amplitudengang))
axis([0 fn -100 20*log10(a)+3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid


So und nun ist mein Problem, wie ich N bei mir wähle? N = length(Inhalt{1}) , aber es muss N=2^x sein?!
Code:

[Dateiname,Pfad]= uigetfile('*txt','Bitte Datei auswählen!');
fid = fopen(fullfile(Pfad,Dateiname),'r');
Inhalt=textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','delimiter','\b','Headerlines',3);
fclose(fid);
% Zeitbereich
% ----------------------------------

fa = 8000; % Abtastfrequenz
fn = fa/2; % Nyquistfrequenz
N = length(Inhalt{1}); % gewünschte FFT-Länge (N=2^x, sonst wird der DFT-Algorithmus verwendet!)
df = fa/N; % Frequenzauflösung
% Erzeugung eines Datensatzes mit N Abtastwerten
% ----------------------------------------------
t = 0 : 1/fa : (N-1)/fa; % x-Vektor
% Frequenzvorgabe in Hz als ganzzahlig Vielfaches der Frequenzauflösung der DFT/FFT:
f1 = df*100; % bei fa = 8000 Hz und N = 1024 beträgt df = 7,8125 Hz und
% f1 damit 781,25 Hz
 f1 = 784;
 f1 = df;
 phase = pi/2;

a1 = 1; % Amplitudenvorgabe
%y = a1*sin(2*pi*f1*t); % y-Vektor
y= Inhalt{3};
%y = [y(1:N/2) zeros(1, N/2)];


Müsste doch eigentlich machbar sein den text umzuschreiben?!
Kann ich das vllt mit

Code:
NFFT = 2^nextpow2(N)

machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 10.05.2010, 17:05     Titel:
  Antworten mit Zitat      
also das mit der Genauigkeit, wenn du als erstes im command window format long eintippst dann siehst du dass dein y genau ist, es ist eine frage wie es dargestellt ist.

meine frage ist : was macht dieses g in deinem code hat anscheinend keine aufgabe.

und das mit dem ausschlag bei 0, ich finde es macht schon sinn da y(1) auch der grösste wert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2010, 17:57     Titel:
  Antworten mit Zitat      
Hallo,

was meinst du mit wie es dargestellt wird? Also ich würde gerne, dass 8 Stellen nach dem Komma genommen werden. Wenn ich das ausgeben lasse, dann rundet er immer auf 4.


Wie meinst du das mit größtem Wert bei y(1)? Es geht ja um die Frequnzen und nicht den größten Wert der Daten!?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 10.05.2010, 19:00     Titel:
  Antworten mit Zitat      
01detlef hat Folgendes geschrieben:
Hallo,

was meinst du mit wie es dargestellt wird? Also ich würde gerne, dass 8 Stellen nach dem Komma genommen werden. Wenn ich das ausgeben lasse, dann rundet er immer auf 4.


Wie meinst du das mit größtem Wert bei y(1)? Es geht ja um die Frequnzen und nicht den größten Wert der Daten!?

mfg


tippe im command window : format long
dann starte deine funktion und guck dir y an

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2010, 21:17     Titel:
  Antworten mit Zitat      
Hallo,

bedeutet das, dass mit längeren Werten gerechnet wird, aber nur 4 ausgegeben wird?

Aber wieso macht bei 0Hz der Pik Sinn?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 10.05.2010, 21:23     Titel:
  Antworten mit Zitat      
stimmt, bin mir fast sicher dass es mit längeren werten gerechnet wird,

aber das mit dem peak bei 0Hz, ich will dir keine falsche antwort geben
aber ich nehme an wenn y(1) grösser ist als die anderen, dann könnte auch
Y(1) grösser sein, aber ich bin mir überhaupt nicht sicher, ich werde mich ab morgen richtig mit fft beschäftigen.

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2010, 21:48     Titel:
  Antworten mit Zitat      
Vielen dank,

es wäre vllt noch interessant den Beispiel-Code zur FFT-Berechnung an meine Datei anzupassen und dann kann ich vergleichen:
Code:
% Zeitbereich
% ----------------------------------

fa = 8000; % Abtastfrequenz
fn = fa/2; % Nyquistfrequenz
N = 1024; % gewünschte FFT-Länge (N=2^x, sonst wird der DFT-Algorithmus verwendet!)
df = fa/N; % Frequenzauflösung
% Erzeugung eines Datensatzes mit N Abtastwerten
% ----------------------------------------------
t = 0 : 1/fa : (N-1)/fa; % x-Vektor
% Frequenzvorgabe in Hz als ganzzahlig Vielfaches der Frequenzauflösung der DFT/FFT:
f1 = df*100; % bei fa = 8000 Hz und N = 1024 beträgt df = 7,8125 Hz und
% f1 damit 781,25 Hz
 f1 = 784;
 f1 = df;
 phase = pi/2;

a1 = 1; % Amplitudenvorgabe
y = a1*sin(2*pi*f1*t); % y-Vektor
y = [y(1:N/2) zeros(1, N/2)];
% Graphische Darstellung
% ----------------------
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
max_y = max(abs(y))*1.1;
fig = figure(1);
plot(y)
axis([0 N -max_y max_y])
title('Datensatz')
ylabel('Amplitude')
xlabel('N Stützstellen')
grid


% Frequenzbereich
% ----------------------------------

% Berechnung der FFT
% ------------------
H = fft(y, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Amplitudenskalierung (Normierung auf N) und verschieben der Elemente des
% Amplitudenvektors, so dass die Darstellung des Amplitudengangs von -fn...0...fn
% erfolgen kann:
amplitudengang = fftshift(amplH/N);
% Graphische Darstellung
% ----------------------
% Frequenzvektoren (werden bei der graphischen Darstellung benötigt):
x_fn = 0 : df : fn-df;
x_fa = 0 : df : fa-df;
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
%a = max([a1, a2, a3, a4, a5]); % wird später benötigt
a = a1;
fig = figure(fig+1);
stem(x_fa-fn, amplitudengang, 'b.-')
axis([-fn fn 0 a/2*1.1])
title('Amplitudengang')
ylabel('Amplitude')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(x_fa-fn, 20*log10(amplitudengang))
%axis([-fn fn -100 20*log10(a/2)+3])
axis([-fn fn -100 3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Darstellung des interessierenden Frequenzbereichs des
% Amplitudengangs (0...fn) und
% daran angepasste Amplitudenskalierung (Normierung auf N/2):
amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2)]; % DC-Bin auf N normieren!
fig = figure(fig+1);
stem(x_fn, amplitudengang, 'b.-')
axis([0 fn 0 a*1.1])
title('Amplitudengang')
ylabel('Amplitude')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(x_fn, 20*log10(amplitudengang))
axis([0 fn -100 20*log10(a)+3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])


Ersetzen den oberen Teil mit
Code:

[Dateiname,Pfad]= uigetfile('*txt','Bitte Datei auswählen!');
fid = fopen(fullfile(Pfad,Dateiname),'r');
Inhalt=textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','delimiter','\b','Headerlines',3);
fclose(fid);
% Zeitbereich
% ----------------------------------

fa = 8000; % Abtastfrequenz
fn = fa/2; % Nyquistfrequenz
N = length(Inhalt{1}); % gewünschte FFT-Länge (N=2^x, sonst wird der DFT-Algorithmus verwendet!)
df = fa/N; % Frequenzauflösung
% Erzeugung eines Datensatzes mit N Abtastwerten
% ----------------------------------------------
t = 0 : 1/fa : (N-1)/fa; % x-Vektor
% Frequenzvorgabe in Hz als ganzzahlig Vielfaches der Frequenzauflösung der DFT/FFT:
f1 = df*100; % bei fa = 8000 Hz und N = 1024 beträgt df = 7,8125 Hz und
% f1 damit 781,25 Hz
 f1 = 784;
 f1 = df;
 phase = pi/2;

a1 = 1; % Amplitudenvorgabe
%y = a1*sin(2*pi*f1*t); % y-Vektor
y= Inhalt{3};
%y = [y(1:N/2) zeros(1, N/2)];


mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2010, 14:24     Titel:
  Antworten mit Zitat      
Vllt wäre es ja noch ganz interessant eine Rücktransformation zu machen, um zu gucken, ob das alte Ergebnis herauskommt. Das werde ich mal versuchen oder bringt mich das nicht weiter?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.