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

21 visualizzazioni (ultimi 30 giorni)
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 Commento
Star Strider
Star Strider il 23 Mar 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.

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Seismology in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by