Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "ΔΕΥΤΕΡΟ ΕΡΩΤΗΜΑ @ΚΒΑΝΤΙΣΤΗΣ"
- t = np.linspace(0, 1/fm, 500) # δημιουργία άξονα χρόνου για το σήμα μας με 4 περιόδους
- # όταν το σήμα τετραγωνίζεται διπλασιάζεται τόσο το πλάτος όσο και η συχνότητα οπότε κάτω έχουμε
- # συχνότητα fm/2
- triangle = 2*signal.sawtooth(2*np.pi*fm/2*t, 0.5) # δημιουργία τριγωνικής περιοδικής παλμοσειράς
- sq_triangle = triangle * triangle # δημιουργία του τετρα΄γώνου της τριγωνικής παλμοσειράς
- samples_fs1_y = 45*1 # 45 δείγματα ανα περίοδο ( επι 4 αφού έχουμε 4 περι΄όδους )
- t1 = np.linspace(0, 1/fm, samples_fs1_y) # δημ. του άξονα χρόνου για την πρώτη δειγματοληψία
- sq_triangle_fs1_y = signal.resample(sq_triangle,samples_fs1_y) # πρώτο δειγματοληπτημένο σήμα
- A = 4
- # Αν fm άρτιο n = 4 αλλίως n = 6 (κβάντιση με 4 bits και 5 bits αντίστοιχα)
- if sum_am % 2 == 0:
- num=4
- else:
- num=5
- L = 2**num
- d=(2*A)/(L) # βήματα κβάντισης
- ks1=d*np.floor(sq_triangle_fs1_y/d)+d/2 #εξίσωση mid-riser κβαντιστή
- def gray_code(n):
- if n <= 0:
- return []
- if n == 1:
- return ['0', '1']
- res = gray_code(n-1)
- return ['0'+s for s in res] + ['1'+s for s in res[::-1]]
- g = gray_code(num)
- plt.figure(figsize=(9,9)) # κβαντισμένο δειγματοληπτημένο σήμα με fs1
- plt.yticks(np.arange(0.0,4.0,d),g[1:L])
- plt.xlabel('Time (s)')
- plt.ylabel('Δυαδικοί αριθμοί με κωδικοποίηση Gray')
- plt.title('Κβαντισμένη Έξοδος')
- plt.plot(t1,ks1,'g-');
- plt.show()
- #Υπολογισμός τυπικής απόκλισης του σφάλματος κβάντισης
- #Για τα 10 πρώτα δείγματα
- ks1_10s = ks1[0:10]
- sq_triangle_fs1_y_10s = sq_triangle_fs1_y[0:10]
- noise_10 = ks1_10s - sq_triangle_fs1_y_10s
- #Τυπική Απόκλιση
- st_deviation=np.var(noise_10)
- st_deviation=math.sqrt(st_deviation)
- print('Απόκλιση σφαλμάτων κβάντισης για τα 10 πρώτα samples: \n' ,st_deviation)
- #Υπολογισμός τυπικής απόκλισης του σφάλματος κβάντισης
- #Για τα 20 πρώτα δείγματα
- ks1_20s = ks1[0:20]
- sq_triangle_fs1_y_20s = sq_triangle_fs1_y[0:20]
- noise_20 = ks1_20s - sq_triangle_fs1_y_20s
- #Τυπική Απόκλιση
- st_deviation=np.var(noise_20)
- st_deviation=math.sqrt(st_deviation)
- print('Απόκλιση σφαλμάτων κβάντισης για τα 20 πρώτα samples: \n' ,st_deviation)
- SNR1 = 10*np.log10((np.var(sq_triangle_fs1_y_10s)/np.var(noise_10))) #SNR gia to (i)
- print('SNR1 = %f in dB' %SNR1)
- SNR2 = 10*np.log10((np.var(sq_triangle_fs1_y_20s)/np.var(noise_20))) #SNR gia to (ii)
- print('SNR2 = %f in dB' %SNR2)
- #BIPOLAR RZ
- c=''.join(g)
- bitstream=list(c)
- Amplitude = sum_am
- i=0
- counter = 0
- m=np.empty(160)
- end = len(bitstream)
- t = np.arange(0.0,end/1000,0.001)
- for a in bitstream :
- if(a == '0'):
- m[i]=0
- else:
- counter += 1
- if(counter % 2 == 1):
- m[i] = Amplitude
- else:
- m[i] = -Amplitude
- i+=1
- plt.figure(figsize=(25,10))
- plt.step(t,m)
- plt.xlabel('Time (s)')
- plt.ylabel('V')
- plt.title('Bitstream')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement