Hi everyone,

After about a week of playing around with the phaser board, I've managed to get it to generate carrier signals between 300MHz and 3GHZ and multiple signals up to 5 using the oscillator class within +-10MHz of the carrier signal, so that for example we can generate simultaneously 110,112,114,116,118MHz but not 110,120,130,140,150MHz.

For the purposes of our experiment we would like to be able to do the latter case, specifically we would like to be able to generate simultaneously within +-40MHz of the carrier signal, (example: output 300MHz, 320MHz, 340MHz simultaneously).

One way I've attempted to get around this was to loop the set_duc_frequency function to two different carrier signals in order to expand the oscillator range, but after some playing around with it turns out I can only get a minimum of 6 milliseconds delay between each duc frequency setting, which is way too high for our needs.

Here is the code to implement the above solution incase it was of interest:

from artiq.experiment import *

class Phaser(EnvExperiment):
    """Phaser Test 1"""
    def build(self):
        self.setattr_device("core")
        self.setattr_device("phaser0")
    
    

    @kernel
    def run(self):
        
        #Parameters
        duc=10*MHz
        duc2=duc+20e6
        preosc = [0., 1., 2., 3., 4.]
        osc = [0.*MHz, 1.*MHz, 2.*MHz, 3.*MHz, 4.*MHz]
        amp=.2
        atten=0

        #Initialising
        self.core.reset()
        self.phaser0.init()
        self.core.break_realtime()
        delay(1*ms)



        for j in range(500):
            self.phaser0.channel[0].set_duc_frequency(17e6)
            self.phaser0.channel[0].set_duc_cfg()
            self.phaser0.channel[0].set_att(atten*dB)
            self.phaser0.duc_stb() 
            delay(1*ms)
            for i in range(5):
                self.phaser0.channel[0].oscillator[i].set_frequency(osc[i])
                self.phaser0.channel[0].oscillator[i].set_amplitude_phase(amp)
                delay(1 *ms)
            
            delay(10*us)

            self.phaser0.channel[0].set_duc_frequency(33e6)
            self.phaser0.channel[0].set_duc_cfg()
            self.phaser0.channel[0].set_att(atten*dB)
            self.phaser0.duc_stb() 
            delay(1*ms)
            for i in range(5):
                self.phaser0.channel[0].oscillator[i].set_frequency(osc[i])
                self.phaser0.channel[0].oscillator[i].set_amplitude_phase(amp)
                delay(1 *ms)

            delay(10*us) 

Could this functionality be realisable with some of the other modules of the card? (NCO, Miqro). Is this even possible to do on this card? Any ideas are much appreciated!

Just saw an error in my code and realised there was another line of delay I forgot to account for, and we got it down to 2.7 microseconds between each pulse, which is workable with.

Although I would still be interested in if there was any other methods to achieve this with the card.

Classic phaser oscillators are 5 tones +- 10 MHz around the common carrier. https://m-labs.hk/artiq/manual/core_drivers_reference.html#artiq.coredevice.phaser.PhaserOscillator

MIQRO gives you 16 tones +- 100 MHz around the carrier. https://m-labs.hk/artiq/manual/core_drivers_reference.html#artiq.coredevice.phaser.Miqro and
https://github.com/quartiq/miqro-sim We are looking for interested pilot users to evaluate its performance and features.