Perform a FFT of the seismic waves, multiply the amplitude by a function, and IFFT.

34 visualizaciones (últimos 30 días)
I succeeded in Fourier transform using the time history of seismic waves.
The code was entered as follows.
Time = [0, 0.01, 0.02, 0.03, .... 99.99] % 0sec ~ 99.99 sec . It was briefly expressed as .... and actually entered a value.
Acceleration = [0.000024, 0.000325, .... 0.00068] % Seismic wave acceleration corresponding to time above
n = length(Acceleration);
Ts = Time(2)-Time(1);
Fs = 1/Ts;
NFFT = 2^nextpow2(n);
Y = fft(Acceleration,NFFT)/n;
f = Fs/2*linspace(0,1,NFFT/2+1);
Iv = 1:length(f);
figure;
semilogx(f,abs(Y(Iv)));
xlabel('Frequency (Hz)');
ylabel('Amplitude (m)');
title('Fourier spectrum')
The Fourier amplitude obtained by the Fourier transform is multiplied by a value (filter).
Filter to reduce high frequency amplitude :
exp(-pi*0.011.*f)
test1=abs(Y(Iv)).*exp(-pi*0.011.*f); %f=frequency
Graphing showed that the high-frequency amplitude decreased in the Fourier spectrum.
The problem is:
After multiplying the filter, I tried to inverse transform to the time domain, but it was not derived.
test1re=ifft(test1)
Here is a summary of my question:
After multiplying the filter, I want to inversely transform it back to the time domain (so that the seismic wave shape appears).
  1 comentario
Star Strider
Star Strider el 23 de Mzo. de 2020
Filtering in the complex frequency domain is not the best option because the Fourier transform contains ‘positive’ and ‘negative’ frequencies (visible as such after using the fftshift function). It is necessary to do the same operation on both the positive and negative frequencies to get the correct result.
The best solution is to convert your frequency domain filter:
exp(-pi*0.011.*f)
to the time domain, for example:
syms F f t
Fcnf(f) = exp(-pi*0.011.*f); % Frequency Domain
F = sym(100); % Choose A Frequency
Fcnt = int((Fcnf(-f) + Fcnf(f))*exp(-1i*2*pi*f*t), f, -F, F) % Inverse Fourier Transform
Fcnt = simplify(Fcnt, 'Steps', 500) % Collect Terms
figure
fplot(Fcnt, [-100 100])
and then filter in the time domain.
I leave the details to you.

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Seismology en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by