% PROGRAM: highpass.m
%
% MATLAB program that filters two series for user-specified periodicities and
% then calculates the correlation between the two series at each of the
% periodicities.
% REQUIRED INPUTS (variables that must be defined before execution):
% forecastrange-- periodicities of interest (measured in months, quarters, etc.)
% truncparam-- truncation parameter for filtering (truncated at lead/lag K)
% vardat-- matrix of data (needs to be two columns, one column for each time-series)
% numvars-- number of variables in system (should be set=2)
% September 25, 2000
% Written by Steve Sumner, University of California, San Diego
% Support provided by Wouter den Haan's NSF grant is gratefully acknowledged.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Initialize the correlation storage vector
corr=zeros(size(forecastrange,2),1);
% Loop over the desired periodicities and calculate the correlations
for nn=1:size(forecastrange,2)
% Initialize the weighting coefficients vectors
b=zeros(2*truncparam+1,1);
a=zeros(2*truncparam+1,1);
% Define the frequency based on the periodicities
w=2*pi/forecastrange(nn);
% Define the weighting matrix
for i=1:truncparam
b(truncparam+1-i)=-sin(w*i)/(pi*i);
b(i+truncparam+1)=-sin(w*-i)/(pi*-i);
end
b(truncparam+1)=1-w/pi;
% Adjust the weighting matrix due to truncation
theta=-1*sum(b)/(2*truncparam+1);
a=b+theta;
% Pull off the individual unfiltered times-series
series1=vardat(:,1);
series2=vardat(:,2);
% Define the length of the original time-series (# of observations)
lvdat=(size(series1,1));
% Initialize the storage vectors for the filtered series
filterseries1=zeros(lvdat-2*truncparam,1);
filterseries2=zeros(lvdat-2*truncparam,1);
% Define the filtered series (Note 2K observations are lost)
for ii=truncparam+1:lvdat-truncparam
filterseries1(ii-truncparam)=a'*series1(ii-truncparam:ii+truncparam);
filterseries2(ii-truncparam)=a'*series2(ii-truncparam:ii+truncparam);
end
% Define the correlation for each periodicity
tempcorr=corrcoef(filterseries1,filterseries2);
corr(nn)=tempcorr(numvars,1);
end