help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

fft filtering problem revisited


From: babelproofreader
Subject: fft filtering problem revisited
Date: Tue, 4 Aug 2009 17:46:34 -0700 (PDT)

As a follow up to a query I posted earlier,
http://www.nabble.com/Problem-with-using-fft-and-ifft-functions-td24588890.html,
and after more reading on the subject I now have the code below, which is
not quite working

typprice=(high.+low.+close)./3;

% check to see if there are negative prices due to backadjusted continuous
prices  
 if(min(min(typprice))<=0)
 backadj=(abs(min(min(typprice)))+tick); % if so, calculate an adjustment
factor
 else 
 backadj=0; % otherwise set adjustment factor to zero
 endif

adjtypprice=typprice.+backadj;
detrendedprice=adjtypprice; 

% First, detrend the data using logs
logchange=log10(adjtypprice./shift(adjtypprice,1));
avelogchange=mean(logchange(2:end));
adjlogchange=logchange.-avelogchange;
adjlogchange(1,1)=0.0;

 for i=2:n
 detrendedprice(i,1)=detrendedprice(i-1,1)*(10^adjlogchange(i,1));
 endfor

% raise length to the next power of two and pad with zeros as preparation
for the fft
l=2^(nextpow2(rows(detrendedprice)));
diff=l-rows(detrendedprice);
pad=zeros(diff,1);
padded_detrendedprice=[detrendedprice;pad];

% The actual filtering in the frequency domain
fouriertran=fft(padded_detrendedprice);
[b,a]=butter(2,0.96);
[h,w]=freqz(b,a,l,"whole");
invfouriertran=real(ifft(h.*fouriertran));

% Remove "padding"
unpadded_invfouriertran=invfouriertran(1:n);

% retrend
fft_logchange=log10(unpadded_invfouriertran./shift(unpadded_invfouriertran,1));
adj_fft_logchange=fft_logchange.+avelogchange;
adj_fft_logchange(1,1)=0.0;
retrendedprice=zeros(n,1);
retrendedprice(1,1)=adjtypprice(1,1);

 for i=2:n
 retrendedprice(i,1)=retrendedprice(i-1,1)*(10^adj_fft_logchange(i,1));
 endfor

recon_price=retrendedprice.-backadj;

x=(1:n)';
A=[x,typprice,recon_price];
dlmwrite("fftchart",A)

The problem is that the smoothed price, recon_price, is either above or
below typprice when plotted, the difference varying depending on the second
value of the function butter(2,???). Of course what I would like is for
recon_price to be a smoothed version of typpprice. Can someone point out the
error(s) in my code, or indeed, my approach?
-- 
View this message in context: 
http://www.nabble.com/fft-filtering-problem-revisited-tp24818893p24818893.html
Sent from the Octave - General mailing list archive at Nabble.com.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]