Azzera filtri
Azzera filtri

loading a .mat file and applying hilbert transform

1 visualizzazione (ultimi 30 giorni)
I have .mat fle in which data is saved in 4*4 uint8 struct format. when I try to apply Hilber Transform it is showing like below please help me solving this memory problem.(I am executing this in r2020a online matlab)
Error using fft
Requested 720x1280x3x200 (8.2GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long time and cause MATLAB to become unresponsive.
Error in hilbert>hilbert_ml (line 67)
x = fft(xr,n,1); % n-point FFT over columns.
Error in hilbert (line 41)
x = hilbert_ml(xr);
I need to load this file and apply hilbert transform for calculating instant phase and amplitude of 2 oscillators separately so that subsequently I can calculate relative phase by substracting them. please help me doing this
  2 Commenti
Walter Roberson
Walter Roberson il 6 Set 2020
What is the size() of your input? What is the class() of your input?
Is your input 720 x 1280 x 3 ? Did you request a hilbert size of 200 ?
THONTI BEERAIAH
THONTI BEERAIAH il 6 Set 2020
size(B)
ans =
720 1280 3 200
class(B)
ans =
'uint8'
yes exactly size is 200

Accedi per commentare.

Risposte (1)

Walter Roberson
Walter Roberson il 6 Set 2020
You appear to be asking for the hilbert transform of a 720 x 1280 RGB matrix, asking for 200 data points in the transform.
The first question I would ask is whether you should really be taking the hilbert transform of an RGB matrix. You talk about taking the phase and amplitude of two oscillators, but data for oscillators is much more likely to be a 2D array -- or possibly a 3D array with third dimension size 2, with one layer for each oscillator.
720 x 1280 x 3 is just too common of an image size to think the data is from anything other than an image.
Perhaps you need to identify data from the image, using one of the Digitizer programs in the File Exchange?
Secondly: When you ask to take the hilbert transform of a non-vector, then MATLAB will take the hilbert transform of each column independently. You can therefore avoid using a single large array by breaking the calculation up into pieces, such as doing 256 columns at a time (1280 = 256 * 5). However... you still need to store all of the results, so unless you can compact down 720 x 256 x 3 x 200 into a smaller matrix, you would still end up needing 720 x 1280 x 3 x 200 memory... even if you have just split that memory into several arrays.
  2 Commenti
THONTI BEERAIAH
THONTI BEERAIAH il 6 Set 2020
yes sir you understand my problem exactly the primary thing is I only generated .mat file but I am not getting how to split the data 4*4 uint8 into a 2D matrix. could you please help me solving this
Walter Roberson
Walter Roberson il 6 Set 2020
I do not see any 4*4 uint8 data as yet? You have a 720 x 1280 x 3 uint8 matrix. Are you wanting to divide that into blocks that are 4 x 4 x 3 and do the hilbert() transform of those? If so then see blockproc()

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by