Browse Source

postavitev z novim sukalnikom

master
lso hp 8540w 1 year ago
parent
commit
efa80b9db9
  1. 4096
      meritev-090321/5mhz-polinom-2048tock.csv
  2. 81
      meritev-090321/fazni-sum
  3. 20
      meritev-090321/plot
  4. 4091
      meritev-090321/rezultat.csv
  5. 0
      meritev-090321/rezultat.csv.pdf
  6. BIN
      meritev-090321/rezultat.pdf
  7. 4096
      meritev-280721/10mhz-polinom-2048tock.csv
  8. 4096
      meritev-280721/5mhz-polinom-2048tock.csv
  9. 81
      meritev-280721/fazni-sum
  10. 48
      meritev-280721/meritev+popravek
  11. 45
      meritev-280721/meritev-odziva
  12. 45
      meritev-280721/meritev-odziva-live
  13. 17
      meritev-280721/popravek
  14. 4091
      meritev-280721/popravljena-meritev-2202.csv
  15. 4091
      meritev-280721/rezultat.csv
  16. 69
      meritev-280721/t-fazni-sum
  17. 2048
      meritev-280721/tcos-5mhz-polinom-2048tock.csv
  18. 47
      meritev-280721/tmeritev+popravek
  19. 47
      meritev-280721/tmeritev-odziva

4096
meritev-090321/5mhz-polinom-2048tock.csv
File diff suppressed because it is too large
View File

81
meritev-090321/fazni-sum

@ -0,0 +1,81 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
print('*** popravek odziva za EliteBook 8540w - Andrej 11.2.2012 ***')
print('*** meritev faznega suma (interpolacija in povprecenje v frekvenci-sai) - Andrej 15.2.2012 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
import matplotlib.animation as animation
sd.default.device = 0
fskala=np.linspace(0,fs/2,2*pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
### podatki za kalibracijo sistema
dSB = -54.90+7.56 #dB
L = 1256 #metrov
tau = L*1.4676/3e8
### popravek odziva
odziv = np.loadtxt("5mhz-polinom-2048tock.csv", delimiter=',')
a = odziv[:,1]
popravek = np.max(a[4:-1])-a[4:-1]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(2*pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts],n=4*pts)[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s[4:-1])),'dB @',"%.1f"%(fskala[np.argmax(s[4:-1])]),'Hz')
return s[4:-1]+popravek
### izris z animacijo
f=fskala[4:-1]
rbw = np.diff(f)[0]
print(rbw)
initsum = spekter(fs,pts,avg,fskala)
fig,ax = plt.subplots()
raw,pn, = ax.plot(f,initsum,f,initsum)
ax.set_xlim(100, 100000)
ax.set_ylim(-130,-30)
ax.set_ylabel("Fazni šum [dBc/Hz]")
ax.set_xlabel("Frekvenčni odmik [Hz]")
plt.yticks(np.arange(-130,-29,10))
plt.xscale('log')
ax.grid(True)
def meritev(nic):
s = spekter(fs,pts,avg,fskala)
Pcal = np.amax(s)
K = Pcal - 3 - dSB
fsum = s - K - 3 - 6 - 20*np.log10(np.sin(f*np.pi*tau)) -10*np.log10(rbw)
raw.set_data(f,s)
pn.set_data(f,fsum)
ax.figure.canvas.draw()
return raw,pn
ani = animation.FuncAnimation(fig,meritev,interval=50)
plt.show()
#shrani csv file
s = spekter(fs,pts,avg,fskala)
Pcal = np.amax(s)
K = Pcal - 3 - dSB
fsum = s - K - 3 - 6 - 20*np.log10(np.sin(f*np.pi*tau)) -10*np.log10(rbw)
data = np.column_stack((f,fsum,s))
np.savetxt('rezultat.csv',data,delimiter=',')
print('*** Konec ***')

20
meritev-090321/plot

@ -0,0 +1,20 @@
#!/usr/bin/gnuplot -c
n = ARG1
set datafile separator ","
set terminal pdf monochrome
set xlabel "Frekvenčni odmik (Hz)"
set ylabel "Fazni šum (dBc/Hz)"
set xrange [100:100000]
set yrange [-150:-50]
set key off #bottom left
set grid
set grid mxtics
set logscale x
set format x '10^{%T}'
set output n.".pdf"
set title "Meritev faznega šuma"
plot n.".csv" u 1:2 w lines

4091
meritev-090321/rezultat.csv
File diff suppressed because it is too large
View File

0
meritev-090321/rezultat.csv.pdf

BIN
meritev-090321/rezultat.pdf

4096
meritev-280721/10mhz-polinom-2048tock.csv
File diff suppressed because it is too large
View File

4096
meritev-280721/5mhz-polinom-2048tock.csv
File diff suppressed because it is too large
View File

81
meritev-280721/fazni-sum

@ -0,0 +1,81 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
print('*** popravek odziva za EliteBook 8540w - Andrej 11.2.2012 ***')
print('*** meritev faznega suma (interpolacija in povprecenje v frekvenci-sai) - Andrej 15.2.2012 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
import matplotlib.animation as animation
sd.default.device = 0
fskala=np.linspace(0,fs/2,2*pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
### podatki za kalibracijo sistema
dSB = -62.86+15.83 #dB
L = 1256 #metrov
tau = L*1.4676/3e8
### popravek odziva
odziv = np.loadtxt("5mhz-polinom-2048tock.csv", delimiter=',')
a = odziv[:,1]
popravek = np.max(a[4:-1])-a[4:-1]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(2*pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts],n=4*pts)[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s[4:-1])),'dB @',"%.1f"%(fskala[np.argmax(s[4:-1])]),'Hz')
return s[4:-1]+popravek
### izris z animacijo
f=fskala[4:-1]
rbw = np.diff(f)[0]
print(rbw)
initsum = spekter(fs,pts,avg,fskala)
fig,ax = plt.subplots()
raw,pn, = ax.plot(f,initsum,f,initsum)
ax.set_xlim(100, 100000)
ax.set_ylim(-130,-30)
ax.set_ylabel("Fazni šum [dBc/Hz]")
ax.set_xlabel("Frekvenčni odmik [Hz]")
plt.yticks(np.arange(-130,-29,10))
plt.xscale('log')
ax.grid(True)
def meritev(nic):
s = spekter(fs,pts,avg,fskala)
Pcal = np.amax(s)
K = Pcal - 3 - dSB
fsum = s - K - 3 - 6 - 20*np.log10(np.sin(f*np.pi*tau)) -10*np.log10(rbw)
raw.set_data(f,s)
pn.set_data(f,fsum)
ax.figure.canvas.draw()
return raw,pn
ani = animation.FuncAnimation(fig,meritev,interval=50)
plt.show()
#shrani csv file
s = spekter(fs,pts,avg,fskala)
Pcal = np.amax(s)
K = Pcal - 3 - dSB
fsum = s - K - 3 - 6 - 20*np.log10(np.sin(f*np.pi*tau)) -10*np.log10(rbw)
data = np.column_stack((f,fsum,s))
np.savetxt('rezultat.csv',data,delimiter=',')
print('*** Konec ***')

48
meritev-280721/meritev+popravek

@ -0,0 +1,48 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
print('*** popravek odziva za EliteBook 8540w - Andrej 11.2.2012 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
sd.default.device = 0
fskala=np.linspace(0,fs/2,2*pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
### popravek odziva
odziv = np.loadtxt("5mhz-polinom-2048tock.csv", delimiter=',')
a = odziv[:,1]
popravek = np.max(a[4:-1])-a[4:-1]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(2*pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts],n=4*pts)[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s)),'dB @',"%.1f"%(fskala[np.argmax(s)]),'Hz')
return s[4:-1]+popravek
wfbp=None
while wfbp!=True: #Prvo risanje spektra z normalizacijo, ponovi s klikom miške
fig,ax=plt.subplots()
line,=ax.plot(fskala[4:-1],spekter(fs,pts,avg,fskala))
wfbp=plt.waitforbuttonpress(0.01)
while wfbp==None: #Zanka risanja spektra, izhod=pritisk tipke ali miške
line.set_ydata(spekter(fs,pts,avg,fskala))
fig.canvas.draw()
wfbp=plt.waitforbuttonpress(0.01)
plt.close()
print('*** Konec ***') #pritisk tipke na tipkovnici

45
meritev-280721/meritev-odziva

@ -0,0 +1,45 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
sd.default.device = 0
fskala=np.linspace(0,fs/2,2*pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(2*pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts],n=4*pts)[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s)),'dB @',"%.1f"%(fskala[np.argmax(s)]),'Hz')
return s
meritev = spekter(fs,pts,avg,fskala)
#print(meritev)
#print(fskala)
data = np.column_stack((fskala, meritev))
np.savetxt('5mhz-polinom-2048tock.csv', data, delimiter=',')
#wfbp=None
#while wfbp!=True: #Prvo risanje spektra z normalizacijo, ponovi s klikom miške
# fig,ax=plt.subplots()
# line,=ax.plot(fskala,spekter(fs,pts,avg,fskala))
# wfbp=plt.waitforbuttonpress(0.01)
# while wfbp==None: #Zanka risanja spektra, izhod=pritisk tipke ali miške
# line.set_ydata(spekter(fs,pts,avg,fskala))
# fig.canvas.draw()
# wfbp=plt.waitforbuttonpress(0.01)
# plt.close()
#print('*** Konec ***') #pritisk tipke na tipkovnici

45
meritev-280721/meritev-odziva-live

@ -0,0 +1,45 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
sd.default.device = 0
fskala=np.linspace(0,fs/2,2*pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(2*pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts],n=4*pts)[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s)),'dB @',"%.1f"%(fskala[np.argmax(s)]),'Hz')
return s
meritev = spekter(fs,pts,avg,fskala)
#print(meritev)
#print(fskala)
#data = np.column_stack((fskala, meritev))
#np.savetxt('10mhz-polinom-2048tock.csv', data, delimiter=',')
wfbp=None
while wfbp!=True: #Prvo risanje spektra z normalizacijo, ponovi s klikom miške
fig,ax=plt.subplots()
line,=ax.plot(fskala,spekter(fs,pts,avg,fskala))
wfbp=plt.waitforbuttonpress(0.01)
while wfbp==None: #Zanka risanja spektra, izhod=pritisk tipke ali miške
line.set_ydata(spekter(fs,pts,avg,fskala))
fig.canvas.draw()
wfbp=plt.waitforbuttonpress(0.01)
plt.close()
print('*** Konec ***') #pritisk tipke na tipkovnici

17
meritev-280721/popravek

@ -0,0 +1,17 @@
#!/usr/bin/python3
# brezvezno risanje popravka
import numpy as np
import matplotlib.pyplot as plt
sum = np.loadtxt("5mhz-polinom-2048tock.csv", delimiter=',')
print(sum)
f = sum[:,0]
a = sum[:,1]
print(f[4:9])
print(a[4:9])
popravek = np.max(a[4:-1])-a[4:-1]
plt.plot(f[4:-1],popravek)
plt.show()

4091
meritev-280721/popravljena-meritev-2202.csv
File diff suppressed because it is too large
View File

4091
meritev-280721/rezultat.csv
File diff suppressed because it is too large
View File

69
meritev-280721/t-fazni-sum

@ -0,0 +1,69 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
import matplotlib.animation as animation
sd.default.device = 0
fskala=np.linspace(0,fs/2,pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
### podatki za kalibracijo sistema
dSB = -61.95+15.53 #dB
L = 1256 #metrov
tau = L*1.4676/3e8
### popravek odziva
odziv = np.loadtxt("tcos-5mhz-polinom-2048tock.csv", delimiter=',')
a = odziv[:,1]
popravek = np.max(a[4:-1])-a[4:-1]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts])[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s[4:-1])),'dB @',"%.1f"%(fskala[np.argmax(s[4:-1])]),'Hz')
return s[4:-1]+popravek
### izris z animacijo
f=fskala[4:-1]
initsum = spekter(fs,pts,avg,fskala)
fig,ax = plt.subplots()
raw,pn, = ax.plot(f,initsum,f,initsum)
ax.set_xlim(100, 100000)
ax.set_ylim(-130,-30)
ax.set_ylabel("Fazni šum [dBc/Hz]")
ax.set_xlabel("Frekvenčni odmik [Hz]")
plt.yticks(np.arange(-130,-29,10))
plt.xscale('log')
ax.grid(True)
def meritev(nic):
s = spekter(fs,pts,avg,fskala)
Pcal = np.amax(s)
K = Pcal - 3 - dSB
fsum = s - K - 3 - 6 - 20*np.log10(np.sin(f*np.pi*tau))
raw.set_data(f,s)
pn.set_data(f,fsum)
ax.figure.canvas.draw()
return raw,pn
ani = animation.FuncAnimation(fig,meritev,interval=50)
plt.show()
print('*** Konec ***') #pritisk tipke na tipkovnici

2048
meritev-280721/tcos-5mhz-polinom-2048tock.csv
File diff suppressed because it is too large
View File

47
meritev-280721/tmeritev+popravek

@ -0,0 +1,47 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
sd.default.device = 0
fskala=np.linspace(0,fs/2,pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
### popravek odziva
odziv = np.loadtxt("tcos-5mhz-polinom-2048tock.csv", delimiter=',')
a = odziv[:,1]
popravek = np.max(a[4:-1])-a[4:-1]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts])[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s)),'dB @',"%.1f"%(fskala[np.argmax(s)]),'Hz')
return s[4:-1]+popravek
wfbp=None
while wfbp!=True: #Prvo risanje spektra z normalizacijo, ponovi s klikom miške
fig,ax=plt.subplots()
line,=ax.plot(fskala[4:-1],spekter(fs,pts,avg,fskala))
wfbp=plt.waitforbuttonpress(0.01)
while wfbp==None: #Zanka risanja spektra, izhod=pritisk tipke ali miške
line.set_ydata(spekter(fs,pts,avg,fskala))
fig.canvas.draw()
wfbp=plt.waitforbuttonpress(0.01)
plt.close()
print('*** Konec ***') #pritisk tipke na tipkovnici

47
meritev-280721/tmeritev-odziva

@ -0,0 +1,47 @@
#!/usr/bin/python3
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
print('*** Preprost zvočni spektralni analizator - S53MV 28.09.2020 ***')
fs=192000 #Frekvenca vzročenja zvočnega signala (max 192000Hz)
pts=2048 #Število točk spektra 0...fs/2 (potenca 2 za učinkovit FFT)
avg=128 #Število povprečenj spektra
import sounddevice as sd #Poiskati na spletu in naložiti s pip3!
import numpy as np #Uporaba učinkovitih funkcij numpy
import matplotlib.pyplot as plt #Risanje rezultata z matplotlib
sd.default.device = 0
fskala=np.linspace(0,fs/2,pts+1)[:-1] #Izračunaj frekvenčno skalo [Hz]
def spekter(fs,pts,avg,fskala): #Zajem signala z zvočno kartico in povprečenje spektra [dB]
s=sd.rec(pts*(1+avg),samplerate=fs,channels=1) #Vzorčenje ADC zvočne kartice, 2D polje!
sd.wait() #Počakaj do konca vzorčenja
nz=1.e-12 #Dodatek za neničelni argument logaritma
s2=np.square(s) #Izpis jakosti/max [dB]
print('Jakost:',"%.1f"%(10*np.log10(nz+np.mean(s2))),'dB Vrh:',"%.1f"%(10*np.log10(nz+np.amax(s2))),'dB',end=' ')
o=1+np.cos(np.linspace(-np.pi,np.pi,2*pts)) #Okno dvignjeni kosinus
k=0
s2=np.zeros(pts)
while k<pts*avg: #Seštevanje moči FFT
s2=s2+np.square(np.abs(np.fft.rfft(o*s.reshape(-1)[k:k+2*pts])[:-1]))
k+=pts
s=10*np.log10(nz+0.5*s2/pts/pts/avg) #Povprečje [dB]
print(' Max:',"%.1f"%(np.amax(s)),'dB @',"%.1f"%(fskala[np.argmax(s)]),'Hz')
return s
meritev = spekter(fs,pts,avg,fskala)
#print(meritev)
#print(fskala)
data = np.column_stack((fskala, meritev))
np.savetxt('tcos-5mhz-polinom-2048tock.csv', data, delimiter=',')
wfbp=None
while wfbp!=True: #Prvo risanje spektra z normalizacijo, ponovi s klikom miške
fig,ax=plt.subplots()
line,=ax.plot(fskala,spekter(fs,pts,avg,fskala))
wfbp=plt.waitforbuttonpress(0.01)
while wfbp==None: #Zanka risanja spektra, izhod=pritisk tipke ali miške
line.set_ydata(spekter(fs,pts,avg,fskala))
fig.canvas.draw()
wfbp=plt.waitforbuttonpress(0.01)
plt.close()
print('*** Konec ***') #pritisk tipke na tipkovnici
Loading…
Cancel
Save