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

FFT

 

Lutz123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2015, 19:50     Titel: FFT
  Antworten mit Zitat      
Hallo Leute,

habe mir ein Gaußsignal erzeugt und möchte dieses in den Frequenzbereich transponieren. Im Zeitbereich habe ich die funktion so abgebildet so, wie ich das haben möchte. Aber wie bekomme ich diese nun in den Frequenzbereich bzw. ohne fehler meldung. Beide Programme (zeitbereich und Frequenzbereich signalerzeugung) funktionieren unabhängig von einander aber wenn ic hsie kombiniere kommt nur kacke raus, why??

Gauß-skript

Code:

clear all; close all; clc;
A_gauss = 1;
Ac=1;
t=-5:0.0001:5;
fc = 10000;        
pointStep =1/0.0001;
xc=Ac*sind(2*pi*fc*t);


%------------------- gauss --------------
fc=1;
bw = 0.132;
yi=gauspuls(t,fc,bw);
[gauss_x,gauss_y]=gauspuls(t,bw,fc);
for i=1:length(gauss_x)
    gauss_x2(i)=A_gauss*(gauss_x(i)+0.45)/1.45;  %generit offset
end
hold on;
grid on;
subplot(1,3,1);
plot(t,gauss_x2,'r')
grid on;

%---------------------rect --------------------
subplot(1,3,2);
grid on;
yrec=rectpuls(t,6);
plot(t,yrec,'.')
grid on;

%---------------plotten der gauß funktion-------------------
subplot(1,3,3);
xgauss = yrec.*gauss_x2;
plot(t,xgauss,'m ')
grid on;

figure(2)
xmod = xc.*xgauss;
xVerschiebung = 6;
k = pointStep *xVerschiebung;
 
xmod=[zeros(1,k),xmod];
hold on;
grid on;
t=(-xVerschiebung/2-5):0.0001:(5+xVerschiebung/2);
plot(t,xmod);



 


und hier das FFT script

Code:


clear all; clc; close all;


A1 = 0.2; %amplitude of x1 (first signal)
A2 = 1.0; %amplitude of x2 (second signal)
f1 = 100;   %frequency of x1
f2 = 900;  %frequency of x2

aufrunden = 10*log(f2)/10;
aufrunden = floor(aufrunden)+1;


fs = 2^(aufrunden+7);         %sample frequency in Hz
T  = 1/fs;        %sample period in s
L  = 2^20;        %signal length
t  = (0:L-1) * T; %time vector

x1 = A1*sin(2*pi*f1 * t); %sinusoid 1
x2 = A2*sin(2*pi*f2 * t); %sinusoid 2
y  = x1.*x2;
%y= x2;
k=1e6;
%Plot signal
subplot(1,2,1);
set(gcf,'Color','w'); %Make the figure background white
plot(fs*t(1:k), y(1:k));
set(gca,'Box','off'); %Axes on left and bottom only
str = sprintf('Signal with %dHz and %dHz components',f1,f2);
title(str);
xlabel('time (milliseconds)');
ylabel('Amplitude');

%Calculate spectrum
Y = fft(y)/L;
ampY = 2*abs(Y(1:L/2+1));
f = fs/2*linspace(0,1,L/2-0.288);
i = L/fs * (max(f1,f2)) +fs; %show only part of the spectrum


%Calculate spectrum for fc
Y2 = fft(x2)/L;
ampY2 = abs(Y2(1:L/2+1))/6;
%Calculate spectrum for fb
Y3 = fft(x1)/L;
ampY3 = abs(Y3(1:L/2+1));

%Plot spectrum.
subplot(1,2,2);
set(gcf,'Color','w');  %Make the figure background white
plot(f(1:i), ampY(1:i));
hold on;
plot(f(1:i), ampY2(1:i),'r');
plot(f(1:i), ampY3(1:i),'g');

set(gca,'Box','off');  %Axes on left and bottom only
title('Single-Sided Amplitude Spectrum of y(t)');
xlabel('Frequency (Hz)');
ylabel('|Y(f)|');
 


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 30.07.2015, 20:19     Titel: Re: FFT
  Antworten mit Zitat      
Lutz123 hat Folgendes geschrieben:
...aber wenn ic hsie kombiniere kommt nur kacke raus, why??


Diese detailierte Fehlerbeschreibung hilft kein Stück weiter. Schildere dein Problem bitte so genau wie möglich. Gibt es Fehlermeldungen beim Ausführen deiner Skripte etc?

Außerdem ist die Amplitude deines Spektrum so nicht korrekt. Siehe folgendes Skript:

http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Lutz123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2015, 20:31     Titel:
  Antworten mit Zitat      
Also, sorry für die Umstände

Ich erzeuge mir mit dem ersten Programm eine Gauss funktion die von 0<t<6 geht.
Diese möchte ich jetzt in den Frequenzbereich transformieren. Nur leider fehlt mir der Ansatz.

ich habe das soweit verstanden, wie ich einSinus signal in den Frequenzbereich transformiere und darstelle. (Programm 2)
Ich bekomme eine Fehlermeldung bezüglich des Zeitvektors. Wie muss ich den in Programm 2 umändern, dass die Werte von Programm 1 übernommen werden können.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.07.2015, 20:47     Titel:
  Antworten mit Zitat      
hallo ich kenn mich mit fft nicht aus aber ich kann dir den thread aus meiner signatur empfehlen.
Zitat:
Ich bekomme eine Fehlermeldung bezüglich des Zeitvektors.

fehlermeldungen werden nicht zufällig erzeugt sondern geben wichtige informationen. wenn du die fehlermeldung nicht postest ist es oft recht schwer sie zu erraten.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Lutz123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2015, 20:54     Titel:
  Antworten mit Zitat      
Dann formuliere ich es jetzt anders. Der Vektor t im Programm 2 muss so umgeändert werden, dass er die gleiche dimension aht wie in progamm an....

wie mache ich das ?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 30.07.2015, 21:05     Titel:
  Antworten mit Zitat      
Damit passt du den Zeitvektor an die Gaussfunktion.

Code:

L  = length(xgauss);        %signal length
t  = (0:L-1) * T; %time vector
 


Das geht aber auch alles viel einfacher mit dem wintool. Du kannst dir damit verschiedene Fenstertypen beliebiger Länge erzeugen und bekommst die Zeit- und Frequenzdarstellung.

http://de.mathworks.com/help/signal/ref/wintool.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2015, 21:25     Titel:
  Antworten mit Zitat      
Vielen Dank.
jetzt habe ich nur noch folgende Fehlermeldung für Zeile 95 und 85, das sind diese hier :
85: ampY = 2*abs(Y(1:L/2+1));

definition von i :
95: plot(f(1:i), ampY(1:i));

Hier ist das ganze Programm noch einmal

Code:

clear all; close all; clc;
A_gauss = 3;
Ac=1;
deltat= 0.0001;
t=-5:deltat:5;
fc = 20;        
pointStep =1/deltat;
xc=Ac*sind(2*pi*fc*t);


%------------------- gauss --------------
fc=1;
bw = 0.132;
yi=gauspuls(t,fc,bw);
[gauss_x,gauss_y]=gauspuls(t,bw,fc);
for i=1:length(gauss_x)
    gauss_x2(i)=A_gauss*(gauss_x(i)+0.45)/1.45;  %generit offset
end
hold on;
grid on;
subplot(1,3,1);
plot(t,gauss_x2,'r')
grid on;

%---------------------rect --------------------
subplot(1,3,2);
grid on;
yrec=rectpuls(t,6);
plot(t,yrec,'.')
grid on;

%---------------plotten der gauß funktion-------------------
subplot(1,3,3);
xgauss = yrec.*gauss_x2;
plot(t,xgauss,'m ')
grid on;

figure(2)
xmod = xc.*xgauss;
xVerschiebung = 6;
k = pointStep *xVerschiebung;
xmod=[zeros(1,k),xmod];

hold on;
grid on;
t=(-xVerschiebung/2-5):deltat:(5+xVerschiebung/2);
zero = find(t==0);

xmod2=xmod(zero:length(xmod)); % hier wird die funktion nur von t>0 betrachtet
t2=t(zero:length(xmod));
for i=1:length(t2)
    t2(i)=t2(i)*0.1/6;
end
plot(t2,xmod2)

%---------------------------------------------------------

A1 = 0.2; %amplitude of x1 (first signal)
A2 = 1.0; %amplitude of x2 (second signal)
f1 = 100;   %frequency of x1
f2 = 900;  %frequency of x2

aufrunden = 10*log(f2)/10;
aufrunden = floor(aufrunden)+1;


fs = 2^(aufrunden+7);         %sample frequency in Hz
T  = 1/fs;        %sample period in s
L  = length(t2);        %signal length
t  = (0:L-1) * T; %time vector
y=xmod2;
k=length(t);
%Plot signal
subplot(1,2,1);
set(gcf,'Color','w'); %Make the figure background white
plot(fs*t(1:k), y(1:k));
set(gca,'Box','off'); %Axes on left and bottom only
str = sprintf('Signal with %dHz and %dHz components',f1,f2);
title(str);
xlabel('time (milliseconds)');
ylabel('Amplitude');

%Calculate spectrum
Y = fft(y)/L;
ampY = 2*abs(Y(1:L/2+1));
f = fs/2*linspace(0,1,L/2-0.288);
i = L/fs * (max(f1,f2)) +1; %show only part of the spectrum




%Plot spectrum.
subplot(1,2,2);
set(gcf,'Color','w');  %Make the figure background white
plot(f(1:i), ampY(1:i));
hold on;


set(gca,'Box','off');  %Axes on left and bottom only
title('Single-Sided Amplitude Spectrum of y(t)');
xlabel('Frequency (Hz)');
ylabel('|Y(f)|');


 
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2015, 21:28     Titel:
  Antworten mit Zitat      
und was auch noch das problem ist, es wird nichts angezeigt im plot
 
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.