Bizzare Issue with LCD Monitors

This is about an unusual flickering artefact with LCD monitors that I noticed while working on a visual stimulus. I am posting about this for reference and to share information about what can potentially have a big impact on psychophysics/electrophysiology experiments that use LCDs to render visual stimuli.

The effect can be induced by launching a PTB window and flashing it (painting min/max luminance at alternate cycles) for 30+ seconds. After closing the window, persistent flashing is observed in dark areas across the screen. What really struck me as weird is that this happens *after* closing the PTB window and would not go away after closing Matlab, shutting down the machine or even unplugging the DVI connector (in the latter case you can see the flickering on top of the “monitor idle” box that floats around when the monitor is disconnected). These observations rule out any software/driver/OS issues as the source of this issue and leave only the monitor itself.

Luckily one of the folks on PTB forums seems to know what’s causing this:

It’s the timing and content of your stimulus interfering with the panels LCD inverter cycle, causing a buildup in the liquid crystal, as they only like AC driving voltage over longer periods of time. A known problem in many (most?) LCD panels, due to the way the physics of liquid crystal displays works. Periodic strong contrast changes at video refresh rate like your stim and some other high frequency spatial patterns are especially effective at triggering it.

LCD’s – more ways to screw up your low level stimuli properties than your wildest dreams could imagine.

Thread :

The flickering goes away gradually over the course of ~10 minutes (on Dell U2412M) so there’s no permanent hardware damage, just another LCD quirk that you need to be aware when designing any visual stimuli involving persistent flashing!

This is a minimal Matlab script to reproduce this effect:

function testFlickerAfterEffect
duration = 30; % seconds
%% open PTB window
m = Screen(‘Windows’);
if (~isempty(m))

% exit if any PTB windows are already open


PsychImaging(‘AddTask’, ‘FinalFormatting’, ‘DisplayColorCorrection’, ‘SimpleGamma’);
PsychImaging(‘OpenWindow’, SCREEN_ID, 0.5, [], [], [], 0, 0);
m = Screen(‘Windows’);
window = m(1);
%% render
col = 0;
h = tic;
while toc(h) < duration

col = 1 – col; % toggle

Screen(window, ‘FillRect’ , [1 1 1] * col * 255, []);

Screen(‘Flip’, window);


Leave a Reply

Your email address will not be published. Required fields are marked *