Original Signal from fft - without using ifft
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Minas Emiris
el 12 de Abr. de 2020
Respondida: Peng Li
el 12 de Abr. de 2020
Hi all, I am analysing a signal stored in an matrix (Data), usign fft as follows:
FFT_Data = fft(Data);
magnitude_Data = abs(FFT_Data);
phase_Data = angle(FFT_Data);
Each element of 'Data.mat' is a function of position, hence the equal sizes of Data.mat and Position.mat; I am trying to plot the individual harmonics of the original signal and I am usign:
points = 1024; % points used to analyze the signal Data
L = max(Position); % Distance measured - use it to find Fs hence deduce frequency_matrix to find wavelength
Fs = points/L; % Sampling frequency - equivalent to points per wavelength
frequency_matrix = Fs*linspace(0,1,points)'; % Frequency in Hz
harmonics = magnitude_Data.*cos(phase_Data + 2*pi*reshape(Position,1,1,[]).*frequency_matrix); % Yields 3D matrix of modeshapes - 3D used since 'Data.mat' may be 1024xn, n = iterations.
My question is, does the line of 'harmonics' correctly provide the harmonics of the signal? It essentially suggests that, e.g. Harmonic = Acos(2πfx + φ) (A,f,φ being amplitude,frequency, phase of that particular harmonic). I raised this question, because when I summed my harmonics as follows:
tested_harmonics = 400; % number of harmonics
A = []; % create empy matrix to store the sum of the harmonics there
for i = 1:tested_harmonics
B = squeeze(harmonics(i,1,:));
A = A+B; % sum the tested harmonics
end
plot(A,Position);
The plot generated a correct looking waveform, with correct frequency values, but with clearly larger amplitude than the correct signal. I thus assuming that I am calculating the amplitude of my signal incorrectly?
0 comentarios
Respuesta aceptada
Peng Li
el 12 de Abr. de 2020
Matlab fft results are without the 1/N term. If you plot the amplitude spectrum you will find out that the peak amplitude is clearly larger what you expect to see with a simulated sin/cos wave for example. Try to divide your amplitude term by length(Data) and see.
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Transforms 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!