alj alj / Mbed 2 deprecated PGSE_diffusion

Dependencies:   mbed

Committer:
alj
Date:
Mon Jan 27 15:17:09 2014 +0000
Revision:
4:d0f9015a90bf
Parent:
3:797df32f2344
Pulse programmer PGSE_diffusion

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alj 0:8fc9e66cbabb 1 /* *************************************************************************************
alj 0:8fc9e66cbabb 2 PGSE_diffusion Basic standard sequence, VERSION 1, October 24th 2012
alj 0:8fc9e66cbabb 3 PULSE GRADIENT SPIN ECHO diffusion sequence(or diff_se) to measure diffusion coefficient value.
alj 0:8fc9e66cbabb 4 ref : E.O. Stejskal and J.E. tanner, J. Chem. Phys. 42, 288 (1965)
alj 0:8fc9e66cbabb 5 THE PGSE SEQUENCE IS
alj 0:8fc9e66cbabb 6 1H ---> 90° - DELTA/2 - 180 - DELTA/2 - FID
alj 2:24f3bc487c01 7 Gz ---> -- - Gz(sdelta)- DELTA - Gz(sdelta)
alj 0:8fc9e66cbabb 8 *************************************************************************************
alj 0:8fc9e66cbabb 9 Gradient strength (or duration) must be increase to measure the diffusion coefficient (2D DOSY spectroscopy)
alj 0:8fc9e66cbabb 10 The maximum diffusion time (DELAT) is limited by T2 in PGSE.
alj 0:8fc9e66cbabb 11 For T1 = T2 the PGSE sequence is usualy the easiest et preferred sequence.
alj 0:8fc9e66cbabb 12 For T1 >> Té the PGSTE (PULSE GRADIENT with STIMULATED ECHO) is better, as during most of the diffusion
alj 0:8fc9e66cbabb 13 time the magetization evolve prinipaly under T1 relaxtion (magnetization is like stored on Z axis in conventionnal NMR). With PGSTE the maximum
alj 0:8fc9e66cbabb 14 diffusion time (DELTA) is limited by T1.
alj 0:8fc9e66cbabb 15 IN THIS VERSION THE GRADIENT PULSE DURATION IS USED
alj 0:8fc9e66cbabb 16 *************************************************************************************
alj 2:24f3bc487c01 17
alj 0:8fc9e66cbabb 18 DESIGN FOR NXPLPC1768 ARM CORTEX M3 MCU BOARD:
alj 0:8fc9e66cbabb 19 INPUT : NONE (reset on board)
alj 0:8fc9e66cbabb 20 OUTPUT : ACQU ---> P26 AND LED1
alj 0:8fc9e66cbabb 21 : PULSES P1 & P2 ---> P25
alj 0:8fc9e66cbabb 22 : Emmitter ---> P24, P23
alj 1:9c47e011f1bf 23 : Transmitter ---> P24, P23
alj 1:9c47e011f1bf 24 : gradient Z ---> P21
alj 0:8fc9e66cbabb 25 ***** IN THIS VERSION RECEIVER AND TRANSMITTER HAVE THE SAME PHASE CYCLE *****
alj 0:8fc9e66cbabb 26 *************************************************************************************
alj 4:d0f9015a90bf 27 Alain L-J
alj 4:d0f9015a90bf 28 France
alj 0:8fc9e66cbabb 29 *************************************************************************************
alj 2:24f3bc487c01 30 This program comes as is with its flaws and bugs.
alj 2:24f3bc487c01 31 NO WARRANTY IS PROVIDED.
alj 2:24f3bc487c01 32 This program is distributed in the hope that it will be useful,
alj 2:24f3bc487c01 33 but WITHOUT ANY WARRANTY; without even the implied warranty of
alj 2:24f3bc487c01 34 FITNESS FOR A PARTICULAR PURPOSE
alj 3:797df32f2344 35 This software is distributed on an "AS IS" BASIS,
alj 3:797df32f2344 36 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alj 2:24f3bc487c01 37 *************************************************************************************
alj 0:8fc9e66cbabb 38 UNLESS OTHERWISE SPECIFIED THE PARAMETERS OF THE PULSE SEQUENCE ARE SET :
alj 0:8fc9e66cbabb 39 D1 : relaxation delay ( ms to s)
alj 0:8fc9e66cbabb 40 DELTA : Diffusion time (ms to s)
alj 0:8fc9e66cbabb 41 sdelta : Gradient duration
alj 0:8fc9e66cbabb 42 D21 : delay of recovery
alj 0:8fc9e66cbabb 43 DE : fixed delay before acqusisition (not use)
alj 0:8fc9e66cbabb 44 DW : Dwell time period for sampled t2 acquisition time domain
alj 0:8fc9e66cbabb 45 D0 : incremenatble delay ( from 1us to s)(t1 time domain dimension for 2D experiment)
alj 0:8fc9e66cbabb 46 NS : Number of scan
alj 0:8fc9e66cbabb 47 NE : Number of experiment
alj 0:8fc9e66cbabb 48 VD : Variable delay using a file list
alj 0:8fc9e66cbabb 49 PW : Pulse length (us)
alj 0:8fc9e66cbabb 50 P90 : 90° transmitter or decoupler pulse length
alj 0:8fc9e66cbabb 51 P180 : 180° transmitter or decoupler pulse length
alj 0:8fc9e66cbabb 52 P3 P4 : 90°, 180°, X-nucleus pulses length
alj 0:8fc9e66cbabb 53 DO : Decoupler gated off or on
alj 0:8fc9e66cbabb 54 HD : HomoDecoupling in time sharing during acqusition
alj 0:8fc9e66cbabb 55 HG : HomoGating decoupling with receiver gated OFF
alj 0:8fc9e66cbabb 56 BB : Broadband modulation gate
alj 0:8fc9e66cbabb 57 CW : Continuous wave
alj 0:8fc9e66cbabb 58 FID : Free Induction Decay acquisition (data acquisition for time AQ
alj 0:8fc9e66cbabb 59 AQ : Acquisition time (physical t2 acquisition time domain dimension)
alj 0:8fc9e66cbabb 60 PHn : Phase for pulse number n (ie : PH1 for pulse P1)
alj 0:8fc9e66cbabb 61 PH0 : Receiver phase
alj 0:8fc9e66cbabb 62 *************************************************************************************
alj 2:24f3bc487c01 63
alj 0:8fc9e66cbabb 64 */
alj 0:8fc9e66cbabb 65
alj 0:8fc9e66cbabb 66 #include "mbed.h"
alj 0:8fc9e66cbabb 67
alj 0:8fc9e66cbabb 68 #define D1 0.1 /* Relaxation delay in second */
alj 0:8fc9e66cbabb 69 #define Fs 48000 /* Sample frequency in Hz */
alj 0:8fc9e66cbabb 70 #define DW 1 /* DW time period in us NOT USE */
alj 0:8fc9e66cbabb 71 #define NS 1.0 /* 8 accumulations */
alj 0:8fc9e66cbabb 72 #define DELTA 0.006 /* diffusion dealy in s */
alj 0:8fc9e66cbabb 73 #define NE 1.0 /* 8 accumulations */
alj 0:8fc9e66cbabb 74 #define sdelta 0.003 /* gradient duration */
alj 0:8fc9e66cbabb 75 #define D21 0.001 /* recovery time */
alj 0:8fc9e66cbabb 76 #define AQ 0.04 /* acquisition time in seconde */
alj 0:8fc9e66cbabb 77 #define P90 0.00005 /* hard 90° 1H */
alj 1:9c47e011f1bf 78 //#define IncGsdelta 0.0 /* gradient width increment */
alj 1:9c47e011f1bf 79 //#define stepG 0.0
alj 0:8fc9e66cbabb 80
alj 0:8fc9e66cbabb 81
alj 0:8fc9e66cbabb 82 DigitalOut Relaxation(LED1); /* Delay on pin 26 ??? and flash LED1 during relaxation delay */
alj 0:8fc9e66cbabb 83 BusOut Acqu(p26, LED2) ; /* Start acquisition */
alj 0:8fc9e66cbabb 84 DigitalOut p1(p25); // HARD PULSE
alj 0:8fc9e66cbabb 85 DigitalOut p2(p25); /* Only for reason of clarity P2 =2*P1 */
alj 0:8fc9e66cbabb 86 BusOut PH1PH2(p24, p23) ; // transmitter and receiver phases are the same
alj 0:8fc9e66cbabb 87 DigitalOut Gsdelta(p22) ; // Gradient Z
alj 0:8fc9e66cbabb 88
alj 0:8fc9e66cbabb 89 int main()
alj 0:8fc9e66cbabb 90 {
alj 0:8fc9e66cbabb 91
alj 0:8fc9e66cbabb 92 // while (1) {
alj 0:8fc9e66cbabb 93 p1 =0 ;
alj 0:8fc9e66cbabb 94 Relaxation = 0 ;
alj 0:8fc9e66cbabb 95 Acqu=0x00;
alj 0:8fc9e66cbabb 96 PH1PH2=0x00; //0 init
alj 0:8fc9e66cbabb 97
alj 0:8fc9e66cbabb 98 for (float i = 0.0f ; i < NS ; i += 1.0f) {
alj 2:24f3bc487c01 99
alj 0:8fc9e66cbabb 100 Relaxation = 1; /* LED1 light*/
alj 0:8fc9e66cbabb 101 wait(D1); // relaxation
alj 0:8fc9e66cbabb 102 Relaxation = 0; // turn off the led
alj 0:8fc9e66cbabb 103
alj 0:8fc9e66cbabb 104 p1=1;
alj 0:8fc9e66cbabb 105 wait(P90); // 90°
alj 0:8fc9e66cbabb 106 p1=0;
alj 2:24f3bc487c01 107
alj 0:8fc9e66cbabb 108 Gsdelta = 1;
alj 0:8fc9e66cbabb 109 wait(sdelta); //gradient Z;
alj 0:8fc9e66cbabb 110 Gsdelta = 0;
alj 2:24f3bc487c01 111
alj 2:24f3bc487c01 112 wait(DELTA - sdelta); // diffusion time
alj 0:8fc9e66cbabb 113
alj 0:8fc9e66cbabb 114 p2=1;
alj 0:8fc9e66cbabb 115 wait(2*P90); //180°
alj 0:8fc9e66cbabb 116 p2=0;
alj 2:24f3bc487c01 117
alj 0:8fc9e66cbabb 118 Gsdelta = 1;
alj 0:8fc9e66cbabb 119 wait(sdelta); //gradient Z;
alj 0:8fc9e66cbabb 120 Gsdelta = 0;
alj 2:24f3bc487c01 121
alj 2:24f3bc487c01 122
alj 0:8fc9e66cbabb 123 wait(D21) ; //recovery time
alj 0:8fc9e66cbabb 124
alj 0:8fc9e66cbabb 125 Acqu=0x11; // Acquire FID (we can write 3 in decimal)
alj 0:8fc9e66cbabb 126 wait(AQ);
alj 0:8fc9e66cbabb 127 Acqu=0x00;
alj 0:8fc9e66cbabb 128
alj 0:8fc9e66cbabb 129 PH1PH2=PH1PH2+1; //Phase cycling
alj 2:24f3bc487c01 130
alj 0:8fc9e66cbabb 131 //IncGsdelta += stepG ;
alj 0:8fc9e66cbabb 132
alj 0:8fc9e66cbabb 133 }
alj 2:24f3bc487c01 134
alj 2:24f3bc487c01 135 }
alj 0:8fc9e66cbabb 136 //}
alj 0:8fc9e66cbabb 137
alj 0:8fc9e66cbabb 138 /* INCREMENTATION DE LA DUREE D'ECLAIREMENT DE LED1 AVEC PwmOut
alj 0:8fc9e66cbabb 139 PwmOut led(LED1);
alj 0:8fc9e66cbabb 140
alj 0:8fc9e66cbabb 141 int main() {
alj 0:8fc9e66cbabb 142 while(1) {
alj 0:8fc9e66cbabb 143 for(float p = 0.0f; p < 1.0f; p += 0.1f) {
alj 0:8fc9e66cbabb 144 led = p;
alj 0:8fc9e66cbabb 145 wait(0.1);
alj 0:8fc9e66cbabb 146 }
alj 0:8fc9e66cbabb 147 }
alj 0:8fc9e66cbabb 148 } */
alj 0:8fc9e66cbabb 149
alj 0:8fc9e66cbabb 150 /* Digital I/O
alj 0:8fc9e66cbabb 151
alj 0:8fc9e66cbabb 152 DigitalOut - Configure and control a digital output pin.
alj 0:8fc9e66cbabb 153 DigitalIn - Configure and control a digital input pin.
alj 0:8fc9e66cbabb 154 DigitalInOut - Bi-directional digital pins
alj 0:8fc9e66cbabb 155
alj 0:8fc9e66cbabb 156 BusIn - Flexible way to read multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 157 BusOut - Flexible way to write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 158 BusInOut - Flexible way to read/write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 159
alj 0:8fc9e66cbabb 160 PortIn - Fast way to read multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 161 PortOut - Fast way to write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 162 PortInOut - Fast way to read/write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 163
alj 0:8fc9e66cbabb 164 PwmOut - Pulse-width modulated output */
alj 0:8fc9e66cbabb 165
alj 0:8fc9e66cbabb 166 /* Features
alj 0:8fc9e66cbabb 167
alj 4:d0f9015a90bf 168 NXP LPC1768 MCU
alj 0:8fc9e66cbabb 169 High performance ARM® Cortex™-M3 Core
alj 0:8fc9e66cbabb 170 96MHz, 32KB RAM, 512KB FLASH
alj 0:8fc9e66cbabb 171 Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO
alj 0:8fc9e66cbabb 172 Prototyping form-factor
alj 0:8fc9e66cbabb 173 40-pin 0.1" pitch DIP package, 54x26mm
alj 0:8fc9e66cbabb 174 5V USB or 4.5-9V supply
alj 0:8fc9e66cbabb 175 Built-in USB drag 'n' drop FLASH programmer
alj 0:8fc9e66cbabb 176 mbed.org Developer Website
alj 0:8fc9e66cbabb 177 Lightweight Online Compiler
alj 0:8fc9e66cbabb 178 High level C/C++ SDK
alj 0:8fc9e66cbabb 179 Cookbook of published libraries and projects
alj 0:8fc9e66cbabb 180 */