Perform a FFT of the seismic waves, multiply the amplitude by a function, and IFFT.
21 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
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.
Risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!