compute time series weighted average - matlab

I have a 8760x1 vector with the 1-hour average ambient temperature time series.
I want to calculate the weighted average temperature weighted by the percentage of operating
hours at each temperature level.
What i thought is divide the temperature range with:
ceil(Tmax-Tmin)
and then use hist.
Are there any other suggestions?
Thank you in advance.

mean(temperatures) should do it.
Since you have hourly measurements, the frequency of a given value will be reflecting the operating hours at that temperature level. A value that occurs frequently will therefore automatically have more weight in the average.

Let's say you have two vectors that are the same length, one is the temperature (temp), and the other is the amount of time at that temperature (time_at_temp). The weighted average formula is this:
wt_avg_temp = sum(temp .* time_at_temp) / sum(time_at_temp);

Related

Finding the time or rate weighted average between peaks in Matlab?

I have some data, that basically looks like a sine wave. I run that through the peak detection function to find the peaks and mins of the data:
[Maxima,MaxIdx] = findpeaks(Peak,'MinPeakHeight',mean(Peak),'MinPeakDistance',10);
Mins=1.01*max(Peak)-Peak;
[Minima,MinIdx] = findpeaks(Mins,'MinPeakHeight',mean(Mins),'MinPeakDistance',10);
Minima = Peak(MinIdx);
What I would like to do is calculate the slope between each peak and trough, and then use that slope to calculate a time weighted average minimum value and see how that method compares to the minimum value. How would I go about this?
was asked to show some data:-

Finding lapse rate (value for dT/dh)

I have a temperature dataset with surface temperatures and a second dataset with the corresponding elevation at which these temperatures are measured. How can I find the aprroximate lapse rate between those 2 datasets? I can use MatLab but I don't know what to do.
So dT/dh = ...?
Thanks!

Estimated lambda exponential distribution

I'm trying to calculate lambda that is the rate of exponential distribution. For example if I have an interval of 5 seconds and I have 4 objects (on average) how is lambda calculated? I need formulas to calculate it. Can anyone help me?
The rate is the number of occurrences per time unit (total number of occurrences / total time). For your case, 4 per 5 time units or a rate of 0.8 per time unit. The mean time between occurrences will be the inverse of this, or 1.25 time units.
You're asking about Exponential_distribution
the exponential distribution is the probability distribution that
describes the time between events in [...] a process in which events
occur continuously and independently at a constant average rate

analyse time series at a specific frequency

I have a long data set of water temperature:
t = 1/24:1/24:365;
y = 1 + (30-1).*rand(1,length(t));
plot(t,y)
The series extends for one year and the number of measurements per day is 24 (i.e. hourly). I expect the water temperature to follow a diurnal pattern (i.e. have a period of 24 hours), therefore I would like to evaluate how the 24 hour cycle varies throughout the year. Is there a method for only looking at specific frequencies when analyzing a signal? If so, I would like to draw a plot showing how the 24 hour periodicity in the data varies through the year (showing for example if it is greater in the summer and less in the winter). How could I do this?
You could use reshape to transform your data to a 24x365 matrix. In the new matrix every column is a day and every row a time of day.
temperature=reshape(y,24,365);
time=(1:size(temperature,1))-1;
day=(1:size(temperature,2))-1;
[day,time]=meshgrid(day,time);
surf(time,day,temperature)
My first thought would be fourier transformation. This will give you a frequency spectrum.
At high frequencies (> 1/d) you would have the pattern for a day, at low frequencies the patter over longer times. (see lowpass and highpass filter)
Also you could go for a frequency/time visualization that will show how the frequencies change over a year.
A bit more work - but you could write a simple model and create a Kalman filter for it.

Find measurement which fits corresponds to same variable at other locations

If I have wind speed measurements for 4 different locations within a geographical radius of approximately 400km for one year, is there a method for determining which wind speed measurement best fits all of the location i.e. does one of the locations have a similar wind speed to all other locations? Can this be achieved?
I suppose you could find the one that provides minimum e.g. quadratic loss from all the others:
speeds is an N-by-4 matrix, with N windspeed measurements for each location
%Loss will find the squared loss for location i. It subtracts column i from each column in speeds, and squares this difference (for column i, this will always be 0). Then average over all rows and the 3 non-zero columns.
loss = #(i)sum(mean((speeds - repmat(speeds(:, i), 1, 4)).^2)) ./ 3;
%Apply loss to each of the 4 locations, find the minimum.
[v i] = min(arrayfun(loss, 1:4));
The loss function takes the average squared difference between each windspeed and the speeds at all other locations. Then we use arrayfun to calculate this loss for each location.