MATLAB Answers

frequency response of time series data

11 views (last 30 days)
Yannick Tabot Njami
Yannick Tabot Njami on 11 Sep 2019
Answered: Jyotish Kumar on 30 Dec 2019
Hello veryone.
i have a time series data of 10 seconds attached and i would like to make Psd vs frequency plot.
below is my code: attached also is my result for data which is also attached a .txt file.
I would like to have it llok better and vsible as shown in the eample plot expected.png so i cant clearly see the natural frequency, and harmonics.
Many thanks in advance
function filecontent = importfile(filename, startRow, endRow)
%IMPORTFILE Import numeric data from a text file as a matrix.
% DCLAIB9CM5CM50MS0090DEG = IMPORTFILE(FILENAME) Reads data from text
% file FILENAME for the default selection.
%
% DCLAIB9CM5CM50MS0090DEG = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads
% data from rows STARTROW through ENDROW of text file FILENAME.
%
% Example:
% Dclaib9cm5cm50ms0090deg = importfile('2Dclaib_9cm_5cm_50ms_0090deg.txt', 1, 3000);
%
% See also TEXTSCAN.
% Auto-generated by MATLAB on 2019/08/08 17:30:42
%% Initialize variables.
delimiter = '\t';
if nargin<=2
startRow = 1;
endRow = inf;
end
%% Format for each line of text:
% column1: double (%f)
% column2: double (%f)
% column3: double (%f)
% column4: double (%f)
% column5: double (%f)
% column6: double (%f)
% column7: double (%f)
% column8: double (%f)
% column9: double (%f)
% column10: double (%f)
% column11: double (%f)
% For more information, see the TEXTSCAN documentation.
formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to the format.
% This call is based on the structure of the file used to generate this
% code. If an error occurs for a different file, try regenerating the code
% from the Import Tool.
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, 'TextType', 'string', 'EmptyValue', NaN, 'HeaderLines', startRow(1)-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
for block=2:length(startRow)
frewind(fileID);
dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-startRow(block)+1, 'Delimiter', delimiter, 'TextType', 'string', 'EmptyValue', NaN, 'HeaderLines', startRow(block)-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
for col=1:length(dataArray)
dataArray{col} = [dataArray{col};dataArrayBlock{col}];
end
end
%% Close the text file.
fclose(fileID);
%% Post processing for unimportable data.
% No unimportable data rules were applied during the import, so no post
% processing code is included. To generate code which works for
% unimportable data, select unimportable cells in a file and regenerate the
% script.
%% Create output variable
filecontent = [dataArray{1:end-1}];
timestep = filecontent(:,1);
x=zeros(length(timestep),1);
y=zeros(length(timestep),1);
z=zeros(length(timestep),1);
for j =1:length(timestep)
x(j) =((filecontent(j,5)+filecontent(j,6))-(filecontent(j,4)+filecontent(j,7)))/sum(filecontent(j,4:7));
y(j) =((filecontent(j,6)+filecontent(j,7))-(filecontent(j,4)+filecontent(j,6)))/sum(filecontent(j,4:7));
z(j)= abs(x(j)+y(j)*1i);
end
TimserisData =[x y z];
Data =TimserisData(:,3); % Taking the magnitude of the calculate sigmnal
Fs =1000;%sampling frequecy
T=1/Fs; %sampling period
N =length(TimserisData(:,3)); %length of signal
t=(0:N-1)*T;%Time vector
NFFT=2^nextpow2(N);%length of fft
X=fft(Data,NFFT)/N;%Taking the FFT of the signal
f = Fs/2*linspace(0,1,NFFT/2+1); %frequency vector
%Plotting signal and axes labeling
figure
loglog(f,2*abs(X(1:NFFT/2+1)))
xlabel('Frequency (Hz)')
ylabel('|p(f)|[a.u]')

  0 Comments

Sign in to comment.

Answers (1)

Jyotish Kumar
Jyotish Kumar on 30 Dec 2019
Hi,
To calculate PSD, i would suggest you to try "pwelch" function in MATLAB.
Go through the link below for more detals

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products