[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- fft filtering problem revisited,
babelproofreader <=