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

Eine Programmieraufgabe

 

mb588
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.04.09
Wohnort: Rostock
Version: ---
     Beitrag Verfasst am: 23.04.2009, 13:56     Titel: Eine Programmieraufgabe
  Antworten mit Zitat      
Hey.
Ich bin Lehramtsstudent an der Uni Rostock und kann überhaupt nicht verstehen warum wir ein numerisches Praktikum machen sollen Confused was denn auch noch total schwer ist und ich damit ganz schön Probleme habe, weil ich mein Thema hat mir so noch keiner erklärt und das denn noch in Matlab zu verarbeiten wird nie etwas.
Vllt könnte ja einer von euch mir mit einem passenden Programm aushelfen! Wäre voll cool. Hier die Aufgabe:

Diskrete Fouriertransformation

Ein wichtiges Hilfsmittel der Informationsverarbeitung stellt die diskrete Fouriertransformation dar. Hierbei werden Signale aus dem Zeitbereich in den Frequenzbereich abgebildet. Implementieren sie ein Programm zur Bestimmung der Fourierkoeffizienten für ein diskretes Signal beschrieben durch einen Vektor der Länge N. Überprüfen sie anschließend Eigenschaften der Fouriertransformation für überlagerte Signale unter Anwendung der inversen Transformation. Zeigen sie zudem Auswirkungen von Störungen im Frequenzbereich nach Anwendung der inversen Transformation anhand selbstgewählter Beispiele.
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 23.04.2009, 14:36     Titel:
  Antworten mit Zitat      
Theorie und Praxis dieser Aufgabe ist Teil der MATLAB Doku:

http://www.mathworks.com/access/hel.....chdoc/math/brenr5t-1.html

Ich sehe dass so, dass der Lehrinhalt ist ein Signal y zu erzeugen

Code:

t=linspace(0,10,1024);
y=sin(t)+0.333*sin(3*t)+0.2*sin(5*t)+0.143*sin(7*t);
plot(t,y)
 


und dann mit dem FFT Befehl zu arbeiten und festzustellen, dass das Spektrum ein paar Peaks hat. Wenn man dann mittels Zufallszallen ein wenig Rauschen dazuaddiert und zurücktransformiert passiert was. Was?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 23.04.2009, 15:57     Titel:
  Antworten mit Zitat      
Hi,

eine andere Form der Störung im Frequenzbereich könnte es sein, Signale wegzulassen, z.B. nur die Hälfte der FFT zu verwenden und diese wieder zurückzutransformieren. Probiers mal aus, ist eigentlich nicht so schwer.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
mb588
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.04.09
Wohnort: Rostock
Version: ---
     Beitrag Verfasst am: 28.04.2009, 15:10     Titel:
  Antworten mit Zitat      
Also ich ha mich jetzt belesen und informiert bei Dozenten, was Fouriertransformation sind. Das Prinziep ist mir klar, aber ich habe große Probleme mit dem Implementieren des Matlab-Programms Confused Komm damit irgendwie nicht zurecht. Ich weiß jetzt auch das ich die oben genannte Aufgabe für Reelle Fouriertransformationen machen soll.
Ich habe folgendes Programmm:


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


Hab das aber auch nur gefunden und mir fällt es schwer die Befehle nachzuvollziehen, da ich auch wenig Zeit habe, weil ja auch viele andere Sachen zu tun sind. Ich bin mir nicht sicher ob dieser Quellcode die komplette Aufgabe umfasst und wie ich die Figuren die entstehen deuten soll Confused


Edit by Martin: Bitte das nächste Mal die Code-Formatierung verwenden. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
mb588
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.04.09
Wohnort: Rostock
Version: ---
     Beitrag Verfasst am: 05.05.2009, 01:38     Titel:
  Antworten mit Zitat      
Ja sorry nächsmal mach ich das Wink kann mir denn einer da weiter helfen? Ich hab mich jetzt schon eine Weile damit beschäftigt, aber komm nicht so recht weiter. Ich wollte für den ersten Teil der Aufgabe das ganz an ein Rechtecksignal machen. Bloss da gehts schon los. Wie mach ich das in Matlab? Theoretisch das klar wie das geht und wie man das so ausrechnet.
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.