Azzera filtri
Azzera filtri

Downsample and reconstruct a subsection of a vector?

8 visualizzazioni (ultimi 30 giorni)
Ben
Ben il 18 Gen 2023
Modificato: dpb il 19 Gen 2023
Hi all,
I have vectors of lonitude and latitude (and other equally sized metadata vectors) from some geospatial data over a region at a uniform resolution. Within this I have defined an area of interest using a bounding box (geo.FineSamplingBox) defining top left and bottom left coordinates of the area of interest. I have used this to index the points inside and outside this box. The points inside the box I would like to retain the original sampling rate, and the points outside the box I would like to downsample by a factor of 10 (geo.SS_Factor).
I have managed to extract the respective points, but I am unsure how to re-insert them into the original matrix without losing the original order. I have attempted to solve it by appending the fine matrix with the coarse matrix and then sorting them but I am not sure the best way of doing this.
Any thoughts, answers or comments would be greatly appreciated, thank you! Apologies I cannot provide any data - the fine sampled vectors are 1888x1, and the coarse sampled vectors are 1370x1.
Code extract below:
%% ADDED - APPLY COARSE/FINE SUBSAMPLING BASED ON BOUNDING BOX
if geo.BB ==1
FineSampLon = loadedData.Lon > geo.FineSamplingBox(1) & loadedData.Lon < geo.FineSamplingBox(3);
FineSampLat = loadedData.Lat < geo.FineSamplingBox(2) & loadedData.Lat > geo.FineSamplingBox(4);
FineSamp = FineSampLon & FineSampLat;
CoarseSamp = find(loadedData.Lon < geo.FineSamplingBox(1) | loadedData.Lon > geo.FineSamplingBox(3) | loadedData.Lat > geo.FineSamplingBox(2) | loadedData.Lat < geo.FineSamplingBox(4));
if sum(CoarseSamp)>0
PhaseCoarse= downsample(loadedData.Phase(CoarseSamp),geo.SS_Factor);
LatCoarse = downsample(loadedData.Lat(CoarseSamp),geo.SS_Factor);
LonCoarse = downsample(loadedData.Lon(CoarseSamp),geo.SS_Factor);
HeadCoarse = downsample(loadedData.Heading(CoarseSamp),geo.SS_Factor);
IncCoarse = downsample(loadedData.Inc(CoarseSamp),geo.SS_Factor);
PhaseFine = loadedData.Phase(FineSamp);
LatFine = loadedData.Lat(FineSamp);
LonFine = loadedData.Lon(FineSamp);
HeadFine = loadedData.Heading(FineSamp);
IncFine = loadedData.Inc(FineSamp);
end
end
%Reorder lat and lon matrix and apply that to the other matricies?
%Find when lat is above or below the thresholds of the bounding box and
%add coarse sampled data back in??

Risposte (1)

dpb
dpb il 18 Gen 2023
Modificato: dpb il 19 Gen 2023
If they're just vectors, I think the simplest is probably the best and likely the quickest...
LO=geo.FineSamplingBox(1); HI=geo.FineSamplingBox(3); % convenient shorthand names
N=geo.SS_Factor;
dataPrime=[decimate(data(:,1:LO),N) data(:,LO+1:HI-1) decimate(data(:,HI:end),N)]; % columns of 2D
dataPrime=[decimate(dataPrime(1:LO,:),N) dataPrime(LO+1:HI-1,:) decimate(dataPrime(HI:end,:),N)]; % rows of 2D
I didn't try to construct it, an alternative would be to create a 2D logical addressing array that matches the areas and uses it as a logical address expression.

Categorie

Scopri di più su Crystals in Help Center e File Exchange

Prodotti


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by