is my fft code is correct ?

조회 수: 1 (최근 30일)
tomer polsky
tomer polsky 2020년 1월 1일
댓글: David Goodmanson 2020년 1월 4일
I am trying to find the dominent ferquincy of my current data .
so this is the plot of my current via time :
clc;clear all;
ADC_data_lim17_GAIN25=load('Data_Lim_17_GAIN_25');
dec_limit=17 %% decimal limit
f_RD_not=892.858e3; %% ferquincy of the RD_not
normalization_coffient=(19.6e-3)/(25*15e-3) %% normalization coffient ,that is used to transfer from decimal limit to real current.
real_data_ADC=ADC_data_lim17_GAIN25.real_data_ADC; %% dicmal value of the I_1 current (ADC data).
I_real=real_data_ADC*normalization_coffient; %%real current after considartion of the normalization_coffient.
real_data_comperator_output=ADC_data_lim17_GAIN25.real_data_IN_driver; %% output of the comperator in the FPGA .
t=(1/f_RD_not)*(1:length(real_data_comperator_output)); %% time after normalization using the normalization_coffient.
figure(52);
plot(t,I_real,' red -- d ','linewidth',1); %% plot--> of I_real
hold on ;
plot(t,1*dec_limit*normalization_coffient*ones(size(t)),' black ','linewidth',3); %% plot--> of boundery limit
hold on ;
min_y_of_switch=min(real_data_ADC(length(t)/2:end)); %% used to normal the switch in the steady state.
max_y_of_switch=max(real_data_ADC(length(t)/2:end));%% used to normal the switch in the steady state.
line=(max_y_of_switch-min_y_of_switch); %% coffient for the normlaztion of the comperator output.
% plot(t,min(I_real(length(t)/2:end))+line*normalization_coffient*real_data_comperator_output,' blue -- O ','linewidth',1);%% plot--> comperator output
title([' I_1(t) from ADC , Boundery Limit Current=' num2str(dec_limit*normalization_coffient) '[A]']);
ylabel('I[A]');xlabel('time[ mSec]');grid on;grid minor;
legend_1=legend ('I_{real}','boundery limit','comperator output'); %% legend
set(legend_1,'FontSize',16); %% set the font size of the legend xlim([ 0 t(end)]); %% limits of the x axis
xticks([0:0.0002:t(end)]); %% jumps of X axis
ylim([ 0 max(I_real)]); %% limits of the y axis
yticks([ 0:0.1:max(I_real)]); %% jumps of Y axis
I_real_6=I_real;
and this is my fft of this current code :
figure(2);
Fs = f_RD_not; % Sampling frequency
T = 1/Fs; % Sampling period
L = 2040; % Length of signal
t_fft = (0:L-1)*T; % Time vector
Y = fft(I_real_6);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
plot(f,P1);
title('Single-Sided Amplitude Spectrum of I_1(t) from ADC ')
xlabel('f (K Hz)');
ylabel('|P1(f)|') ;
set(gca,'FontSize',12);grid on; %% font size of the lablels
ax = gca; %% used to make xlabel as 10^-3
ax.XAxis.Exponent = +3; %% used to make xlabel as 10^-3
xticks([0:10e3:f(end)]); %% jumps of X axis
down belew I attached pics of the current in time domain and the same current in ferquncy domain, also I attached the data file .
Is my FFT code is right ? and my domiment ferquncy is 87.97[K Hz] ?
  댓글 수: 1
David Goodmanson
David Goodmanson 2020년 1월 4일
Hi tomer,
by eye, 17 cycles / 0.2 ms = 85 kHz ok
and the amplitude in the frequency domain also looks good.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Fourier Analysis and Filtering에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by