Esempio n. 1
0
    def przedzial_char(self):

        try:
            f1 = float(self.f1in.get())
            f2 = float(self.f2in.get())
            [self.i1, self.i2] = zakres(f1, f2, self.x)
            self.refreshFigure(self.x[self.i1:self.i2],
                               np.abs(self.y[self.i1:self.i2]),
                               self.koherencja[self.i1:self.i2])

        except Exception as e:
            self.popupmsg(
                "Bład",
                f"Sprawdź częstotliwości, musza się zwierać w <F_min, F_max>\n{e}"
            )
Esempio n. 2
0
kanal_3 = przeliczenie(kanal_3,S_acc,W_acc)

kanal_1 = okno_wykl(kanal_1 ,L, H_pr)
kanal_1 = tichonow(kanal_1 ,L, H_pr)
kanal_2 = okno_wykl(kanal_2, L, H_pr)
kanal_3 = okno_wykl(kanal_3, L, H_pr)


nfft=3**(nextpow2(dl_syg))
print(f'nfft to : {nfft}')

#wyznaczenie widmowej gestosci mocy

[S11, S12, S13, S22, S33, freq] = WGM(kanal_1, kanal_2, kanal_3, H_pr, nfft, typ ='fft')
w = freq * 2.0 * np.pi
[i_min, i_max] = zakres(fmin, fmax, freq)
freq=freq[i_min:i_max]
w=w[i_min:i_max]

kanal_est = int(input('Podaj dla ktorego kanalu chcesz wyznaczyc odpowiedz (2 lub 3): '))
V = np.zeros(np.shape(freq), dtype='complex')
A = np.copy(V)
FRF = np.copy(V)

if kanal_est == 2:
    FRF = S12[i_min:i_max] / S11[i_min:i_max]
    Cxy = np.abs(S12[i_min:i_max]**2 / (S11[i_min:i_max] * S22[i_min:i_max]))
    V = FRF / (1j * w)
    A = V / (1j * w)
elif kanal_est == 3:
    FRF = S13[i_min:i_max] / S11[i_min:i_max]
Esempio n. 3
0
    def jakosc(self):

        try:
            self.nazwapliku = self.filename
            dane = np.loadtxt(self.nazwapliku)
            L = float(self.l_sygin.get())
            H_pr = float(self.h_prin.get())
            Fzero = 0
            Fmin = float(self.fminin.get())
            Fmax = float(self.fmaxin.get())
            S_ham = float(self.s_hamin.get())
            W_ham = float(self.w_hamin.get())
            S_acc = float(self.s_accin.get())
            W_acc = float(self.w_accin.get())

            dl_syg = int(L * H_pr)
            delay = int(dl_syg * 0.01)

            [kanal_1, kanal_2,
             kanal_3] = wyodrebnienie(dane, delay, self.prog, dl_syg,
                                      self.Vmax)
            kanal_1 = przeliczenie(kanal_1, S_ham, W_ham)
            kanal_2 = przeliczenie(kanal_2, S_acc, W_acc)
            kanal_3 = przeliczenie(kanal_3, S_acc, W_acc)

            kanal_1 = okno_wykl(kanal_1, L, H_pr)
            kanal_1 = tichonow(kanal_1, L, H_pr)
            kanal_2 = okno_wykl(kanal_2, L, H_pr)
            kanal_3 = okno_wykl(kanal_3, L, H_pr)

            nfft = 3**(nextpow2(dl_syg))

            [S11, S12, S13, S22, S33, freq] = WGM(kanal_1,
                                                  kanal_2,
                                                  kanal_3,
                                                  H_pr,
                                                  nfft,
                                                  typ='fft')
            w = freq * 2.0 * np.pi
            [i_min, i_max] = zakres(Fmin, Fmax, freq)
            freq = freq[i_min:i_max]
            w = w[i_min:i_max]

            if self.kan_wym.get() == '1' and self.kan_odp.get() == '2':
                FRF = S12[i_min:i_max] / S11[i_min:i_max]

            elif self.kan_wym.get() == '1' and self.kan_odp.get() == '3':
                FRF = S13[i_min:i_max] / S11[i_min:i_max]

            elif self.kan_wym.get() != '1' or self.kan_odp.get(
            ) != '2' or self.kan_odp.get() != '3':
                self.popupmsg(
                    "Błąd",
                    'Kanał wymuszenia musi być 1\n Kanał odpowiedzi musi mieć numer 1 lub 2'
                )

            self.w = w
            self.x = freq
            self.y = FRF

            self.nazwapliku2 = self.filename2
            a = np.loadtxt(self.nazwapliku2)
            [r, c] = np.shape(a)
            resi = []
            pole = []
            for rs in range(int(r)):
                resi.append(a[rs, 9] + 1j * a[rs, 10])
                pole.append(a[rs, 1] + 1j * a[rs, 3])

            [Hs, H] = tran_widm(pole, resi, self.w)

            A_est = Hs / ((1j * w)**2)
            A_estbieg = np.zeros(np.shape(H), dtype='complex')
            for rs in range(int(r)):
                A_estbieg[:, rs] = H[:, rs] / ((1j * w)**2)
            A = FRF / ((1j * w)**2)
            #kryterium oceny fdac dla inertnacji
            self.FDAC_frf = ((np.abs(FRF.conj() @ Hs))**2 /
                             ((FRF.conj() @ FRF) * (Hs.conj() @ Hs))).real
            self.labelfdac_frf_Wyn.delete(0, END)
            self.labelfdac_frf_Wyn.insert(END, f'{self.FDAC_frf:.4f}')
            #kryterium oceny fdac dla podatnosci
            self.FDAC = (np.abs(A.conj() @ A_est)**2 /
                         ((A.conj() @ A) * (A_est.conj() @ A_est))).real
            self.labelfdac_Wyn.delete(0, END)
            self.labelfdac_Wyn.insert(END, f'{self.FDAC:.4f}')
            #blad srednio kwadratowy dla inertancji
            self.blad_sr_kwad_frf = sum((np.abs(FRF) - np.abs(Hs))**2)
            self.label_blad_srednio_kwad_frf_Wyn.delete(0, END)
            self.label_blad_srednio_kwad_frf_Wyn.insert(
                END, f'{self.blad_sr_kwad_frf:.4f}')
            #blad srednio kwadratowy dla podatnosci
            self.blad_sr_kwad_pod = sum((np.abs(A) - np.abs(A_est))**2)
            self.label_blad_srednio_kwad_Wyn.delete(0, END)
            self.label_blad_srednio_kwad_Wyn.insert(
                END, f'{self.blad_sr_kwad_pod:.2e}')
            #bład srednio procentowy dla inertancji
            self.blad_sr_proc_frf = (sum((np.abs(np.abs(FRF) - np.abs(Hs))) /
                                         np.abs(FRF))) / len(FRF) * 100
            self.label_blad_srednio_proc_frf_Wyn.delete(0, END)
            self.label_blad_srednio_proc_frf_Wyn.insert(
                END, f'{self.blad_sr_proc_frf:.4f}%')
            #bład srednio-procentowy dla podatnosci
            #self.blad_sr_proc_pod = (sum((np.abs(np.abs(A) - np.abs(A_est))) / np.abs(A))) / len(A) * 100
            #self.label_blad_srednio_proc_Wyn.delete(0, END)
            #self.label_blad_srednio_proc_Wyn.insert(END, f'{self.blad_sr_proc_pod:.4f}%')

            if self.typ.get() == 'Inertancja':
                if self.typ2.get() == 'Sumaryczna':
                    self.refreshFiguretab2(self.x,
                                           np.abs(self.y),
                                           self.x,
                                           np.abs(Hs),
                                           text="inertancji",
                                           text2='sumaryczna')
                elif self.typ2.get() == 'Postacie drgań':
                    self.refreshFiguretab2(self.x,
                                           np.abs(self.y),
                                           self.x,
                                           np.abs(H),
                                           text="inertancji",
                                           text2='postacie drgań')

            elif self.typ.get() == 'Podatność dynamiczna':
                if self.typ2.get() == 'Sumaryczna':
                    self.refreshFiguretab2(self.x,
                                           np.abs(A),
                                           self.x,
                                           np.abs(A_est),
                                           text="podatności dynamicznej",
                                           text2='sumaryczna')
                elif self.typ2.get() == 'Postacie drgań':
                    self.refreshFiguretab2(self.x,
                                           np.abs(A),
                                           self.x,
                                           np.abs(A_estbieg),
                                           text="podatności dynamicznej",
                                           text2='postacie drgań')

        except:
            self.popupmsg(
                "Błąd",
                "Wystąpił błąd, sprawdz poprawność wprowadzonych danych.")
Esempio n. 4
0
    def charakterystyka(self):

        try:
            self.nazwapliku = self.filename
            dane = np.loadtxt(self.nazwapliku)
            L = float(self.l_sygin.get())
            H_pr = float(self.h_prin.get())
            Fzero = 0
            Fmin = float(self.fminin.get())
            Fmax = float(self.fmaxin.get())
            S_ham = float(self.s_hamin.get())
            W_ham = float(self.w_hamin.get())
            S_acc = float(self.s_accin.get())
            W_acc = float(self.w_accin.get())

            print(L, type(L), H_pr, type(H_pr), Fzero, Fmax, type(Fmax), Fmin)
            dl_syg = int(L * H_pr)
            delay = int(dl_syg * 0.01)

            [kanal_1, kanal_2,
             kanal_3] = wyodrebnienie(dane, delay, self.prog, dl_syg,
                                      self.Vmax)
            kanal_1 = przeliczenie(kanal_1, S_ham, W_ham)
            kanal_2 = przeliczenie(kanal_2, S_acc, W_acc)
            kanal_3 = przeliczenie(kanal_3, S_acc, W_acc)

            kanal_1 = okno_wykl(kanal_1, L, H_pr)
            kanal_1 = tichonow(kanal_1, L, H_pr)
            kanal_2 = okno_wykl(kanal_2, L, H_pr)
            kanal_3 = okno_wykl(kanal_3, L, H_pr)

            nfft = 3**(nextpow2(dl_syg))

            [S11, S12, S13, S22, S33, freq] = WGM(kanal_1,
                                                  kanal_2,
                                                  kanal_3,
                                                  H_pr,
                                                  nfft,
                                                  typ='fft')
            w = freq * 2.0 * np.pi
            [i_min, i_max] = zakres(Fmin, Fmax, freq)
            freq = freq[i_min:i_max]
            w = w[i_min:i_max]

            if self.kan_wym.get() == '1' and self.kan_odp.get() == '2':
                FRF = S12[i_min:i_max] / S11[i_min:i_max]
                Cxy = np.abs(S12[i_min:i_max]**2 /
                             (S11[i_min:i_max] * S22[i_min:i_max]))
            elif self.kan_wym.get() == '1' and self.kan_odp.get() == '3':
                FRF = S13[i_min:i_max] / S11[i_min:i_max]
                Cxy = np.abs(S13[i_min:i_max]**2 /
                             (S11[i_min:i_max] * S33[i_min:i_max]))
            elif self.kan_wym.get() != '1' or self.kan_odp.get(
            ) != '2' or self.kan_odp.get() != '3':
                self.popupmsg(
                    "Błąd",
                    'Kanał wymuszenia musi być 1\n Kanał odpowiedzi musi mieć numer 1 lub 2'
                )

            A = FRF / ((1j * w)**2)

            self.w = w
            self.x = freq
            self.y = FRF
            self.ypodatnosc = A
            self.koherencja = Cxy
            self.refreshFigure(self.x, np.abs(self.y), self.koherencja)

        except Exception as e:
            self.popupmsg(
                "Błąd",
                f"Sprawdź kanały, parametry, przedział częstotliwości\n{e}")