19 changed files with 27109 additions and 0 deletions
-
4096meritev-090321/5mhz-polinom-2048tock.csv
-
81meritev-090321/fazni-sum
-
20meritev-090321/plot
-
4091meritev-090321/rezultat.csv
-
0meritev-090321/rezultat.csv.pdf
-
BINmeritev-090321/rezultat.pdf
-
4096meritev-280721/10mhz-polinom-2048tock.csv
-
4096meritev-280721/5mhz-polinom-2048tock.csv
-
81meritev-280721/fazni-sum
-
48meritev-280721/meritev+popravek
-
45meritev-280721/meritev-odziva
-
45meritev-280721/meritev-odziva-live
-
17meritev-280721/popravek
-
4091meritev-280721/popravljena-meritev-2202.csv
-
4091meritev-280721/rezultat.csv
-
69meritev-280721/t-fazni-sum
-
2048meritev-280721/tcos-5mhz-polinom-2048tock.csv
-
47meritev-280721/tmeritev+popravek
-
47meritev-280721/tmeritev-odziva
4096
meritev-090321/5mhz-polinom-2048tock.csv
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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 ***') |
@ -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
File diff suppressed because it is too large
View File
4096
meritev-280721/10mhz-polinom-2048tock.csv
File diff suppressed because it is too large
View File
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
File diff suppressed because it is too large
View File
@ -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 ***') |
@ -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 |
@ -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 |
@ -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 |
@ -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
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
File diff suppressed because it is too large
View File
@ -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
File diff suppressed because it is too large
View File
@ -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 |
@ -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 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue