psychopy.org | Reference | Downloads | Github

Understanding GratingStim: convert frequency to phase

According to the GratingStim documentation it is written:

NB phase has modulus 1 (rather than 360 or 2 pi) This is a little unconventional but has the nice effect that setting phase=t n drifts a stimulus at n Hz

Key question : How to convert frequency into phase value?

I know incrementing higher value for phase would result in higher frequency, while lower will result in a slower animation. Can someone help me to understand how this phase is measured? In particular, I would like to have several stimuli on the screen, where each stimulus has different phase defined by a frequency value. For instance, defining 1 Hz would animate the stimulus to shift 1 cycle per second ( 2 Hz = 2 cycle per second). Note also that the size of each “section” is defined by the sf when declaring visual.GratingStim .

Sample code :

from psychopy import visual, core, event

mywin = visual.Window([800,600],monitor="testMonitor", units="deg",color='black', )
grating = visual.GratingStim(win=mywin, mask='circle', size=3, pos=[0,0], sf=1)

def freq_to_phase(freq):
    phase = 0.05 # TODO: convert freq to phase
    return phase

phase = freq_to_phase(10) # <-- how to calculate the phase if desired to have 10hz?

while True:
    grating.phase += phase
    grating.draw()
    mywin.flip()

    if len(event.getKeys())>0:
        break
    event.clearEvents()

mywin.close()
core.quit()