by using white noise effect in the three level discrete F T:
clear all; close all; clcfs=200; %sampling freq.
dt =1/fs;N0=fs/50; %number of samples/cycle
m=3; %no. of cycles
t = dt*(0:200); %data window
fi=50; %Frequency test
ww=wgn(201,1,-40);size(transpose(ww))v=@(t) sin(2*pi*fi*t + 0.3)+transpose(ww);tmax=1;% v : as function of time
% fs : sampling frequency (Hz)
% tmax : time of final estimation
% to test: [t,f]=ZC(@(t)(220*sin(2*pi*50.1*t+pi/2)),50*512,1)
% to test: [t,f]=ZC(@(t)(220*sin(2*pi*50.1*t+pi/2)+randn(1)*.1),50*512,1)
n=N0-1:-1:0;f0=50;f=50.88;Hc=2/N0*cos(2*pi*n/N0+pi/N0);Hs=-2/N0*sin(2*pi*n/N0+pi/N0);t_est=[];f_est=[];j_max=tmax*fs;for j=1:j_max+1 x=v((200:j+N0-2).*dt); c(j)=x*Hc'; s(j)=x*Hs'; if(j>N0) Ac(j-N0)=sqrt(sum(c(end-N0+1:end).^2)/N0); As(j-N0)=sqrt(sum(s(end-N0+1:end).^2)/N0); cc(j-N0)=c(end-N0+1:end)*Hc'; ss(j-N0)=c(end-N0+1:end)*Hs'; if(j>2*N0) Acc(j-2*N0)=sqrt(sum(cc(end-N0+1:end).^2)/N0); Ass(j-2*N0)=sqrt(sum(ss(end-N0+1:end).^2)/N0); ccc(j-2*N0)=cc(end-N0+1:end)*Hc'; ccs(j-2*N0)=cc(end-N0+1:end)*Hs'; ssc(j-2*N0)=ss(end-N0+1:end)*Hc'; sss(j-2*N0)=ss(end-N0+1:end)*Hs'; ff=f0*N0/pi*atan(tan(pi/N0)*((ccc(j-2*N0).^2+ccs(j-2*N0).^2)./(ssc(j-2*N0).^2+sss(j-2*N0).^2)).^.25); t_est=[t_est;(j-1)*dt]; f_est=[f_est;ff]; end endendt_estf_estplot(t_est,f_est,'red')o=rms(fi)c=rms(f_est)RMSE = sqrt(mean(c - o).^2)t_est;f_estplot(t_est, f_est,'red')hold onRMSE = sqrt(mean((f_est-fi).^2))xlabel('time')ylabel('frequency')title('three LDFT white noise') plot (t_est,fi*ones(size(t_est)))hold off
the error is :
Error using +
Matrix dimensions must agree.
Error in @(t)sin(2*pi*fi*t+0.3)+transpose(ww)
Error in threeDFT (line 33)
x=v((200:j+N0-2).*dt);
Best Answer