Verfasst am: 24.03.2017, 13:36
Titel: ÜF im Frequenzbereich und Signal im Zeitbereich
Hallo allerseits,
ich habe ein Eingangssignal x(t) im Zeitbereich und eine Funktion des Amplitudenganges H(f) im Frequenzbereich. Das zu ermittelnde Ausgangssignal y(t) ist eben um diese Amplitude verstärkt bzw. gedämpft. Am Ende will ich das Ausgangssignal im Zeitbereich darstellen. Dazu habe ich meiner Meinung nach 2 Optionen.
1. Konvertieren von x(t) in den Frequenzbereich, Multiplikation mit H(f) und anschließend wieder Rcktranformation mittels ifft in den Zeitbereich.
2. Transformation von H(f) in den Zeitbereich (Impulsantwort) und Faltung mit x(t).
y = x*h
Die 2. Option erscheint mir auf den ersten Blick der bessere weil einfachere Weg, da ich mir eine Transformation spare. Nichtsdestotrotz stehe ich auf dem oft zitierten Schlauch.
Um dem ganzen Vorhaben beizukommen habe ich mir zu Option 2 ein kleines Beispiel kreiert.
Code:
Fs = 2048; % Sampling frequency
N = Fs; % Number of samples
t = (0:(N-1))*1/Fs; % Time array
f1 = 20; % Frequency
x = 1.5 * sin(2*pi*1/lambda*1000*t); % Input signal
df = Fs/N; % Frequency resolution
f = -Fs/2:df:Fs/2-df; % Mirrored frequency array
% Symmetric transfer function with a Ppak at 20Hz
H_TransferFunction = zeros(1,2048);
H_TransferFunction(1,1045) = 0.5;
H_TransferFunction(1,1005) = 0.5;
h_TimeDomain sieht eigentlich so aus wie ich es mir erwartet habe. Eine Schwingung mit der Amplitude von 0,5. Die Erweiterung mit Fs/2 ist rein aus der 'Trial and Error' Methode entstanden, wird aber vom 1/N der ifft herrühren (?). Allerdings befinde ich mich nun in einer Sackgasse, denn ich wüsste nicht wie ich nun die Faltung durchführen sollte. Am Ende sollte sich eine Schwingung mit 0,75 Amplitude ergeben. Eventuell ist doch die 1. Option anzuwenden.
Vielleicht kann mir jemand sagen ob meine Herangehensweise überhaupt Sinn macht. Viele Stunden würden mir erspart bleiben.
Im Code im ersten Post muss anstatt 1/lambda --> f1 stehen. Ich weiß leider nicht wie ich den Beitrag editieren kann.
Weiters hab ich nun das Ganze mit der Variante 1 probiert, was auch halbwegs funktioniert, aber an der Rücktransformation hapert es noch. Hier mal der Code:
Code:
Fs = 2048; % Sampling frequency
N = 1*Fs; % Number of samples
x = (0:(N-1))*1/Fs; % x array
len = length(x); % Length x-Vector
% Create signal
z = sin(2*pi*1/0.08*x) + 0.7*sin(2*pi*1/0.05*x);
%z = z + 0.1*randn(size(t)); % Sinusoids plus noise
%% FFT
NFFT = 2^nextpow2(len); % Next power of 2 from length of x
Z = fft(z,NFFT)/len;
Z_Amplitude = 2*abs(Z(1:NFFT/2+1));
f = Fs/2*linspace(0,1,NFFT/2+1);
%% Transfer function
L = 36; % Chord length [mm]
alpha = 12/L; % Sensor distance ratio
% Inverse transfer function matrix
H_TransferFunctionInverse = 1./H_TransferFunction;
%% Multiply transfer function with Z_Amplitude % Only valid in desired wavelength (frequency), everywhere else = 0
H_TransferFunctionInverse(f<1/0.1 | f > 1/0.03) = 0;
Y = Z_Amplitude.*H_TransferFunctionInverse;
%% Transform to time domain
y_TimeDomain = ifft(Y,'symmetric')*Fs/2;
Genau genommen handelt es sich dabei eben um die Ortsfrequenz f=1/lambda. Die ÜF braucht euch nicht weiter zu interessieren, die kann man einfach mal so stehen lassen.
Wenn ich mit meinen Eingangsfrequenzen die 'frequency bins' treffe, dann erhalte ich nach der FFT wunderschöne Peaks und auch die IFFT funktioniert wunderbar.
z.B. für:
Bei einem stochastischen Signal sieht das aber etwas anders aus.
Gibt es diesbezüglich eine Möglichkeit das Verhalten und die Genauigkeit zu verbessern? Oder müsste man die Amplituden nach der FFT so bearbeiten, dass nur mehr diskrete Peaks auftreten?
Vielen Dank schon mal.
Oh siehe da, die Antwort kann ich editieren
Einstellungen und Berechtigungen
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
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.