mirror of
				https://gitlab.science.ru.nl/mthesis-edeboone/m-thesis-introduction.git
				synced 2025-10-31 03:46:44 +01:00 
			
		
		
		
	ZH: use correct DTFT convention
Only affects phase determination. Introduces a minus sign for the s_k terms and changes arctan2 parameters
This commit is contained in:
		
							parent
							
								
									ecc79a8c91
								
							
						
					
					
						commit
						4c834ad8e7
					
				
					 3 changed files with 35 additions and 4 deletions
				
			
		| 
						 | 
					@ -12,7 +12,7 @@ def sine_beacon(f, t, t0=0, amplitude=1, baseline=0, phase=0):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Return a sine appropriate as a beacon
 | 
					    Return a sine appropriate as a beacon
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    return amplitude * np.sin(2*np.pi*f*(t+t0) + phase) + baseline
 | 
					    return amplitude * np.cos(2*np.pi*f*(t+t0) + phase) + baseline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def phase_mod(phase, low=np.pi):
 | 
					def phase_mod(phase, low=np.pi):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
| 
						 | 
					@ -62,8 +62,8 @@ def ft_corr_vectors(freqs, time):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    freqtime = np.outer(freqs, time)
 | 
					    freqtime = np.outer(freqs, time)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    c_k = np.cos(2*np.pi*freqtime)
 | 
					    c_k =    np.cos(2*np.pi*freqtime)
 | 
				
			||||||
    s_k = np.sin(2*np.pi*freqtime)
 | 
					    s_k = -1*np.sin(2*np.pi*freqtime)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return c_k, s_k
 | 
					    return c_k, s_k
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -197,7 +197,7 @@ def find_beacon_in_traces(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        real, imag = direct_fourier_transform(freq, t_trace, traces[i])
 | 
					        real, imag = direct_fourier_transform(freq, t_trace, traces[i])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        phases[i] = np.arctan2(real, imag)
 | 
					        phases[i] = np.arctan2(imag, real)
 | 
				
			||||||
        amplitudes[i] = 2/n_samples * (real**2 + imag**2)**0.5
 | 
					        amplitudes[i] = 2/n_samples * (real**2 + imag**2)**0.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return frequencies, phases, amplitudes
 | 
					    return frequencies, phases, amplitudes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								simulations/airshower_beacon_simulation/lib/tests/lib
									
										
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								simulations/airshower_beacon_simulation/lib/tests/lib
									
										
									
									
									
										Symbolic link
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					../
 | 
				
			||||||
							
								
								
									
										30
									
								
								simulations/airshower_beacon_simulation/lib/tests/test_beacon_fourier.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								simulations/airshower_beacon_simulation/lib/tests/test_beacon_fourier.py
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import matplotlib.pyplot as plt
 | 
				
			||||||
 | 
					import numpy as np
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					seed = 12345
 | 
				
			||||||
 | 
					dt = 1 # ns
 | 
				
			||||||
 | 
					t = np.arange(0, 10*int(1e3), dt)
 | 
				
			||||||
 | 
					frequency = 45e-3 # GHz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					N = 5e2
 | 
				
			||||||
 | 
					rng = np.random.default_rng(seed)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phase_res = np.zeros(int(N))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for i in range(int(N)):
 | 
				
			||||||
 | 
					    phase = lib.phase_mod(np.pi*(2*rng.uniform(size=1) -1)) # rad
 | 
				
			||||||
 | 
					    beacon = lib.sine_beacon(frequency, t, t0=0, phase=phase)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    measured = lib.find_beacon_in_traces([beacon], t, frequency, frequency_fit=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    phase_res[i] = lib.phase_mod(measured[1][0] - phase)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fig, ax = plt.subplots()
 | 
				
			||||||
 | 
					ax.set_xlabel("$\\varphi_{meas} - \\varphi_{true}$ [rad]")
 | 
				
			||||||
 | 
					ax.set_ylabel("#")
 | 
				
			||||||
 | 
					ax.hist(phase_res, bins='sqrt')
 | 
				
			||||||
 | 
					plt.show()
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue