Benchmark testing

  • 48 panels in a 48 panel arena, grayscale = 1, with (463 fps) and w/o row compression (191 fps)
  • 48 panels in a 48 panel arena, grayscale = 2, w/o row compression (108 fps)
  • 48 panels in a 48 panel arena, grayscale = 3, with (332 fps) and w/o row compression (72 fps)
  • 48 panels in a 48 panel arena, grayscale = 4, with (290 fps)

Frame dumping rate test

When we use the frame dumping mode to stream frame data from PC to controller directly (serial port baud rate 921600), we found the frame rate can reach the benchmark value. ie, for gs = 1, the maximum frame rate is 190 and when gs = 3, the maximum is 70. When we set the rate higher than the maximum, using timer function in matlab, the panel will freeze.

We increased the serial port baud rate from 115200 to 460800, the maximum frame rate increased linearly. When we set the baud rate to 921600, the system froze if we let the system ran as fast as it can. The reason is the I2C set a bottleneck to the maximum frame rate at which the system can run. That is why we don’t need to set a higher serial port baud rate although the maximum baud rate the XMega controller can reach is 1843200.

We also did the jitter testing for the frame dumping mode and the results are list as the following tables.

Test 1

Grayscale = 1, no row compression, sampling rate 10K

Frame Rate 10 20 30 40 50 60 70 80 90 100 110 120
Mean IFI 0.1000 0.0500 0.0330 0.0250 0.0200 0.0170 0.0140 0.0130 0.0110 0.0100 0.0090 0.0080
Standard deviation 0.2129e-3 0.2098-3 0.1894e-3 0.2049e-3 0.3416e-3 0.2750e-3 0.2622e-3 0.3126e-3 0.1770e-3 0.2711e-3 0.2312e-3 0.3226e-3
Min IFI 0.0985 0.0487 0.0321 0.0237 0.0150 0.0136 0.0120 0.0077 0.0100 0.0055 0.0066 0.0064
Max IFI 0.1008 0.0513 0.0338 0.0265 0.0253 0.0204 0.0155 0.0182 0.0116 0.0145 0.0108 0.0090

Test 2

Grayscale = 3, no row compression, sampling rate 10K

Frame Rate 10 20 30 40 50 60
Mean IFI 0.1000 0.0500 0.0330 0.0250 0.0200 0.0170
Standard deviation 0.3335e-3 0.2650e-3 0.3247e-3 0.4414e-3 0.3226e-3 0.2213e-3
Min IFI 0.0974 0.0475 0.0286 0.0167 0.0166 0.0164
Max IFI 0.1028 0.0524 0.0368 0.0332 0.0247 0.0178

Jitter Testing

We found the jitter testing results differs when we format the SD card with different allocation unit size. Allocation units are the granularity with which disk space will be allocated to files, so if you have a 4k allocation unit, a 1k file will be allocated 4k, and a 10k file will be allocated 12k. A smaller allocation size will give less “wasted” space, but will also be slower to access (actual data) due to increased MFT/FAT access. When we set the allocation units to 32K for FAT32 system, we had an acceptable jitter rate although we don’t find what the optimal allocation units size should be.

To format a SD card, we have two ways (supposing the SD disk drive is E)

  1. use dos command format E: /Q/FS:FAT32/A:32K
  2. use matlab command dos('format E: /Q/FS:FAT32/A:32K');

Note: In the case ‘Format’ is not recognized as a internal or external command, you need to add the path C:\Windows\System32 at the end of the windows environment variable PATH.

The jitter test results using a formatted SD using the above methods are list as follows:

Test 3

Grayscale = 1, no row compression, 4x4 check pattern, sampling rate 10K

Method one: continuously save pattern data frame after frame. Benchmark test result: 201.

Frame Rate 10 20 30 40 50 60 70 80 90 100 110 120
Mean IFI 0.1013 0.0506 0.0337 0.0253 0.0203 0.0169 0.0145 0.0126 0.0112 0.0101 0.0092 0.0084
Standard deviation 0.7098e-3 0.7046e-3 0.7189e-3 0.7135e-3 0.7120e-3 0.7056e-3 0.7065e-3 0.7351e-3 0.7121e-3 0.7336e-3 0.7093e-3 0.7065e-3
Min IFI 0.1002 0.0495 0.0325 0.0242 0.0191 0.0157 0.0133 0.0115 0.0101 0.0090 0.0081 0.0073
Max IFI 0.1024 0.0517 0.0349 0.0264 0.0214 0.0179 0.0156 0.0138 0.0124 0.0112 0.0104 0.0095

Method two: save each frame data starting from a new sector (512 byte each sector). Benchmark test result: 193.

Frame Rate 10 20 30 40 50 60 70 80 90 100 110 120
Mean IFI 0.1013 0.0506 0.0337 0.0253 0.0203 0.0169 0.0145 0.0126 0.0112 0.0101 0.0092 0.0084
Standard deviation 0.5588e-4 0.5272e-4 0.6415e-4 0.4680e-4 0.5350e-4 0.6145e-4 0.5832e-4 0.5062e-4 0.6256e-4 0.4816e-4 0.6019e-4 0.5934e-4
Min IFI 0.1011 0.0505 0.0336 0.0252 0.0201 0.0167 0.0143 0.0125 0.0111 0.0100 0.0090 0.0083
Max IFI 0.1014 0.0508 0.0339 0.0255 0.0204 0.0170 0.0146 0.0128 0.0114 0.0102 0.0094 0.0086

Test 4

Grayscale = 3, no row compression, pattern_lift_gs3.mat, sampling rate 10K

Method one: continuously save pattern data frame after frame. Benchmark test result: 78.

Frame Rate 10 20 30 40 50 60
Mean IFI 0.1013 0.0506 0.0337 0.0253 0.0203 0.0169
Standard deviation 0.0008 0.0008 0.0008 0.0008 0.0008 0.0008
Min IFI 0.0992 0.0487 0.0318 0.0234 0.0182 0.0148
Max IFI 0.1039 0.0532 0.0362 0.0278 0.0227 0.0194

Method two: save each frame data starting from a new sector (512 byte each sector). Benchmark test result: 75.

Frame Rate 10 20 30 40 50 60
Mean IFI 0.1013 0.0506 0.0337 0.0253 0.0203 0.0169
Standard deviation 0.0003 0.0003 0.0003 0.0003 0.0003 0.0004
Min IFI 0.1000 0.0492 0.0323 0.0237 0.0188 0.0155
Max IFI 0.1026 0.0522 0.0353 0.0270 0.0219 0.018

Pattern making

When making large patterns and previewing them with the PControl GUI, the data field of the pattern struct is not necessary. Commenting out the following line will allow you to view the pattern in the pattern player before taking the time to make them for writing to the SD card (which requires the data field): pattern.data = make_pattern_vector(pattern);

Gains over 127

For making the gain faster. This does not allow reaching the maximum speed, which could be reached having nonzero values for both gain and bias in a given channel, but just lets values greater than 127 be piped into a normal workflow. The conversion is gain = bias * 2.5.

% Deal with values over 127. Gains is the four
% element array with [gain_X bias_X gain_Y bias_Y]
% sent to Panel_com with 'send_gain_bias'
if abs(Gains(1))>127 % then set X bias
    Gains(2) = Gains(1)/2.5;
    Gains(1) = 0;  
end              
if abs(Gains(3))>127 % then set Y bias 
    Gains(4) = Gains(2)/2.5;
    Gains(3) = 0;  
end
Panel_com('send_gain_bias',Gains);