Continuous Time Fourier Transform of a signal matrix
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Anubhav Rohatgi
il 28 Lug 2012
Risposto: Juhi Maraskole
il 16 Set 2020
I have a matrix of 100 rows and 2 columns. Column 1 consists of time signal at frequency 50Hz (0.02 0.04 0.06...) column 2 is signal whose fft is to be determined. I would like to have a function that determines the Fourier transform of the signal at the frequency determined by the 1st column of the matrix.
0 Commenti
Risposta accettata
Wayne King
il 28 Lug 2012
Modificato: Wayne King
il 28 Lug 2012
If the first column of your matrix is just the time vector with increments of 0.02 seconds, then just take the Fourier transform of the 2nd column
Let X be your matrix
xdft = fft(X(:,2));
If the signal is real-valued, you only need 1/2 the DFT to examine the amplitude spectrum.
The frequency vector can be formed as follows:
freq = 0:50/100:25;
For example:
t = 0:0.02:(100*0.02)-0.02;
x = cos(2*pi*10*t)+randn(size(t));
X(:,1) = t';
X(:,2) = x';
% Now X is your matrix
xdft = fft(X(:,2));
xdft = xdft(1:length(xdft)/2+1);
freq = 0:50/100:25;
plot(freq,abs(xdft))
xlabel('Hz'); ylabel('Magnitude')
Più risposte (3)
Wayne King
il 28 Lug 2012
Modificato: Wayne King
il 28 Lug 2012
You stated in your original post that your matrix had an even number of elements, 100x2. In fact your matrix is 9079x2. You data also has a mean which is nonzero so that will make the 0 frequency component very large, it's better to remove the mean first.
x = data(:,2);
x = detrend(x,0);
len = length(x)
t = 0:0.02:(len*0.02)-0.02;
xdft = fft(x);
xdft = xdft(1:(length(xdft)+1)/2);
freq = 0:50/len:25;
plot(freq,abs(xdft))
xlabel('Hz'); ylabel('Magnitude')
1 Commento
Vedere anche
Categorie
Scopri di più su Spectral Measurements 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!