Loss_Effects.py (1382B)
1 import numpy as np 2 import matplotlib.pyplot as plt 3 import scipy.signal as signal 4 5 # Constants 6 N = 100 7 d = 1e-9 #Spacing between tape and head 8 g = 2e-6 #Head gap width 9 delta = 35e-6 #Tape thickness 10 v = 7.5 * 0.0254 11 12 #f = np.linspace (0, 24000, N/2) 13 f = np.linspace (0, 48000, N) 14 n = np.linspace (0, N, N) 15 #n = np.linspace (0, N/2, N/2) 16 17 # Calculate H(f) 18 H = np.zeros (N) 19 H[0] = 1 20 waveNum = 2 * np.pi * f[1:int (N/2)] / v 21 #H[1:int (N/2)] = np.e ** (- abs(waveNum) * d) # Spacing loss 22 #H[1:int (N/2)] = np.sin (waveNum * g / 2) / (waveNum * g / 2) #gap loss 23 #H[1:int (N/2)] = (1 - np.exp (-waveNum * delta))/(waveNum * delta) #Thickness loss 24 H[1:int (N/2)] = (np.e ** (- abs (waveNum) * d)) * (np.sin (waveNum * g / 2) / (waveNum * g / 2)) * ((1 - np.exp (-waveNum * delta)) / (waveNum * delta)) 25 H_flip = np.flip (H[0:int (N/2)], 0) 26 H[int (N/2):N] = H_flip 27 28 # "Roll your own" iDFT 29 h = np.zeros (N) 30 for n_k in range (N): 31 for k in range (N): 32 h[n_k] += H[k] * np.cos (2 * np.pi * k * n_k / N) 33 h[n_k] *= (1/N) 34 35 #h = np.fft.ifft (H) 36 H = np.fft.fft (h) 37 w, H_t = signal.freqz (h) 38 39 # Plotting output 40 #plt.plot(n, h) 41 #plt.plot (w * 22000 / np.pi, abs (H_t)) 42 plt.semilogx (f[0:int (N/2)], 10 * np.log10 (H[0:int (N/2)])) 43 plt.axvline (x=15000) 44 plt.axhline (y=-3) 45 plt.title ("Tape Loss Effects vs. Frequency") 46 plt.xlabel ("Frequency [Hz]") 47 plt.ylabel ("Amplitude [dB]") 48 plt.show()