예제 #1
0
def load_red_csv():
    test = ProcessSignal('191001')
    types = test.read_type_file()
    csv_signals = types['signal_files']
    for signal in csv_signals:
        open_dict = test.open_file(signal, reduced=True)
        t = open_dict['time']
        u = open_dict['voltage']
        plt.plot(t, u)
        plt.show()


#load_red_csv()
예제 #2
0
def peak_graph(exp, plot_type='peak'):
    test = ProcessSignal(str(exp))
    peak_dicts = max_freq_plasma(exp)
    keys = peak_dicts.keys()
    peaks = []
    freq_peaks = []
    delta_fs = []
    signal_nums = []
    pl_ds = []
    fig = plt.figure(num=1, dpi=300)
    ax = fig.add_subplot(111)
    for key in keys:
        peak_dict = peak_dicts[key]
        signal_nums.append(key)
        peaks.append(peak_dict['peak'])
        freq_peaks.append(peak_dict['freq_peak'])
        delta_fs.append(peak_dict['delta_f'])
        pl_ds.append(peak_dict['pl_d'])
    peaks = np.array(peaks)
    freq_peaks = np.array(freq_peaks)
    delta_fs = np.array(delta_fs)
    signal_nums = np.array(signal_nums)
    pl_ds = np.array(pl_ds)
    inds = np.argsort(pl_ds)

    peaks = peaks[inds]
    freq_peaks = freq_peaks[inds]
    delta_fs = delta_fs[inds]
    signal_nums = signal_nums[inds]
    pl_ds = pl_ds[inds]

    if plot_type is 'peak':
        ax.plot(pl_ds, peaks, marker='^', linewidth=0.9, ms=3)
        ax.set_ylabel('Амплитуда пика', fontsize=12)
        png_name = test.pics_path / 'Peak'
    if plot_type is 'peak_freq':
        ax.plot(pl_ds, freq_peaks, marker='^', linewidth=0.9, ms=3)
        ax.set_ylabel('Частота пика, ГГц', fontsize=12)
        png_name = test.pics_path / 'Peak_frequency'
    if plot_type is 'delta':
        ax.plot(pl_ds, delta_fs, marker='^', linewidth=0.9, ms=3)
        ax.set_ylabel('Ширина пика, МГц', fontsize=12)
        png_name = test.pics_path / 'delta_f'

    ax.set_xlabel('Плотность плазмы, отн.ед.', fontsize=12)
    #ax.set_xlim(right=11)
    ax.set_title('{}, поглотители №2, 3, А'.format(exp))
    ax.grid(which='both', axis='both')
    fig.savefig(png_name)
예제 #3
0
def max_freq_plasma(exp):
    test = ProcessSignal(str(exp))
    csv_types = test.read_type_file()
    csv_signals = csv_types['signal_files']
    csv_signal_nums = csv_types['signal_nums']
    print(csv_signals)
    excel_dicts = test.read_excel(csv_signal_nums)['numbers']
    magnetron_nums = excel_dicts['magnetron']
    pl_densities = np.zeros(len(magnetron_nums))
    magnetron_dicts = {}
    for i, num in enumerate(magnetron_nums):
        for csv_signal in csv_signals:
            csv_num = csv_signal[3:6]
            if csv_num == num and int(num) >= 126:
                magnetron_nums[i] = int(num)
                print('I am working on {} signal'.format(csv_num))
                pl_density = test.read_excel(
                    csv_signal_nums)['dicts'][num]['Ток плазмы, А']
                pl_densities[i] = pl_density
                file = test.open_file(csv_signal, reduced=True)
                time = file['time']
                voltage = file['voltage']
                dt = file['time_resolution']

                fft_dict = test.fft_amplitude(time, voltage, dt)
                ampls = fft_dict['amplitude']
                freqs = fft_dict['frequency']
                # peak
                peak = max(ampls)
                max_ind = np.argmax(ampls)
                freq_peak = freqs[max_ind]
                # half_peak_lvl
                half_peak = peak / 2

                f_1_ind_bottom = np.logical_and(ampls <= half_peak,
                                                freqs < freq_peak)
                f_1_bottom = freqs[f_1_ind_bottom][-1]
                amp_1_bottom = ampls[f_1_ind_bottom][-1]

                f_1_ind_top = ampls >= half_peak
                f_1_top = freqs[f_1_ind_top][0]
                amp_1_top = ampls[f_1_ind_top][0]

                x_1 = np.array([f_1_bottom, f_1_top])
                y_1 = np.array([amp_1_bottom, amp_1_top])
                k_1, b_1, r_value_1, p_value_1, std_err_1 = linregress(
                    x_1, y_1)
                freq_interp_1 = np.linspace(f_1_bottom, f_1_top, num=200)
                amp_interp_1 = k_1 * freq_interp_1 + b_1
                linreg_inds_1 = amp_interp_1 <= half_peak
                linreg_freq_1 = freq_interp_1[linreg_inds_1][-1]

                f_2_top = freqs[f_1_ind_top][-1]
                amp_2_top = ampls[f_1_ind_top][-1]

                f_2_ind_bottom = np.logical_and(ampls <= half_peak,
                                                freqs > freq_peak)
                f_2_bottom = freqs[f_2_ind_bottom][0]
                amp_2_bottom = ampls[f_2_ind_bottom][0]

                x_2 = np.array([f_2_bottom, f_2_top])
                y_2 = np.array([amp_2_bottom, amp_2_top])
                k_2, b_2, r_value_2, p_value_2, std_err_2 = linregress(
                    x_2, y_2)
                freq_interp_2 = np.linspace(f_2_bottom, f_2_top, num=200)
                amp_interp_2 = k_2 * freq_interp_2 + b_2
                linreg_inds_2 = amp_interp_2 <= half_peak
                linreg_freq_2 = freq_interp_2[linreg_inds_2][-1]

                delta_f = linreg_freq_2 - linreg_freq_1

                magnetron_dicts[csv_num] = {
                    'peak': peak,
                    'freq_peak': np.round((freq_peak / 1e9), 3),
                    'delta_f': np.round((delta_f / 1e6), 3),
                    'pl_d': pl_density
                }
    return (magnetron_dicts)
예제 #4
0
def load_text():
    fft_test = ProcessSignal('190925')
    txt_path = fft_test.exp_file_path / 'types.txt'
    csv_types = fft_test.read_type_file()
    print(csv_types)
예제 #5
0
def write_file():
    fft_test = ProcessSignal('191126')
    fft_test.files_classification()
예제 #6
0
def write_csv():
    test = ProcessSignal('191120')
    test.reduce_files()
#write_csv()
예제 #7
0
def load_text():
    fft_test = ProcessSignal('190925')
    csv_types = fft_test.read_type_file()
    print(csv_types)
예제 #8
0
def max_freq(exp):
    test = ProcessSignal(str(exp))
    csv_files = test.csv_files()
    signal_dict = {}
    for csv_file in csv_files:
        csv_num = int(csv_file[3:6])
        if csv_num % 2 == 0 and csv_num > 2:
            file = test.open_file(csv_file)
            t = file['time']
            v = file['voltage']
            dt = file['time_resolution']
            t_0 = t[0]
            if csv_num in [4, 6]:
                t_1 = t_0 + 150e-9
                t_step = 29e-9
            else:
                t_1 = t_0 + 80e-9
                t_step = 40e-9
            part_dict = {}
            for i in range(12):
                t_2 = t_1 + 262e-9
                part_inds = np.logical_and(t > t_1, t < t_2)
                t_part = t[part_inds]
                v_part = v[part_inds]

                fft_dict = test.fft_amplitude(t_part, v_part, dt)
                ampls = fft_dict['amplitude']
                freqs = fft_dict['frequency']
                #peak
                peak = max(ampls)
                max_ind = np.argmax(ampls)
                freq_peak = freqs[max_ind]
                #half_peak_lvl
                half_peak = peak / 2

                f_1_ind_bottom = np.logical_and(ampls <= half_peak,
                                                freqs < freq_peak)
                f_1_bottom = freqs[f_1_ind_bottom][-1]
                amp_1_bottom = ampls[f_1_ind_bottom][-1]

                f_1_ind_top = ampls >= half_peak
                f_1_top = freqs[f_1_ind_top][0]
                amp_1_top = ampls[f_1_ind_top][0]

                x_1 = np.array([f_1_bottom, f_1_top])
                y_1 = np.array([amp_1_bottom, amp_1_top])
                k_1, b_1, r_value_1, p_value_1, std_err_1 = linregress(
                    x_1, y_1)
                freq_interp_1 = np.linspace(f_1_bottom, f_1_top, num=200)
                amp_interp_1 = k_1 * freq_interp_1 + b_1
                linreg_inds_1 = amp_interp_1 <= half_peak
                linreg_freq_1 = freq_interp_1[linreg_inds_1][-1]

                f_2_top = freqs[f_1_ind_top][-1]
                amp_2_top = ampls[f_1_ind_top][-1]

                f_2_ind_bottom = np.logical_and(ampls <= half_peak,
                                                freqs > freq_peak)
                f_2_bottom = freqs[f_2_ind_bottom][0]
                amp_2_bottom = ampls[f_2_ind_bottom][0]

                x_2 = np.array([f_2_bottom, f_2_top])
                y_2 = np.array([amp_2_bottom, amp_2_top])
                k_2, b_2, r_value_2, p_value_2, std_err_2 = linregress(
                    x_2, y_2)
                freq_interp_2 = np.linspace(f_2_bottom, f_2_top, num=200)
                amp_interp_2 = k_2 * freq_interp_2 + b_2
                linreg_inds_2 = amp_interp_2 <= half_peak
                linreg_freq_2 = freq_interp_2[linreg_inds_2][-1]

                delta_f = linreg_freq_2 - linreg_freq_1
                '''
                plt.plot(freqs, ampls)
                plt.xlim(left=2.73e9, right=2.75e9)
                plt.hlines(half_peak, xmin=0, xmax=4e9)
                plt.hlines(peak, xmin=0, xmax=4e9)
                plt.plot(freq_interp_1, amp_interp_1, marker='.', color='red', ms=0.5)
                plt.vlines(linreg_freq_1, ymin=0, ymax=peak)
                plt.plot(freq_interp_2, amp_interp_2, marker='.', color='green', ms=0.5)
                plt.vlines(linreg_freq_2, ymin=0, ymax=peak)
                plt.title('num = {}, peak = {}, delta = {}, freq = {}'.format(csv_num, np.round(peak, 3), np.round(delta_f / 1e6, 3), np.round(freq_peak / 1e9, 4)))
                plt.show()
                '''
                part_dict[i + 1] = {
                    't_1': np.round((t_1 / 1e-9), 5),
                    't_2': t_2,
                    'd_t': t_2 - t_1,
                    't_step': t_step,
                    'peak': peak,
                    'freq_peak': np.round((freq_peak / 1e9), 3),
                    'delta_f': np.round((delta_f / 1e6), 3)
                }
                print('t_1 =', np.round((t_1 / 1e-9), 5))

                t_1 = t_1 + t_step
            signal_dict[csv_num] = part_dict
    return signal_dict
예제 #9
0
def peak_table(exp, plot_type='peak'):
    test = ProcessSignal(str(exp))
    peak_dict = max_freq(exp)
    keys = peak_dict.keys()
    fig = plt.figure(num=1, dpi=300)
    ax = fig.add_subplot(111)
    for key in keys:
        part_dicts = peak_dict[key]
        part_keys = part_dicts.keys()
        t = []
        peaks = []
        freq_peaks = []
        delta_fs = []
        signal_nums = []
        for part_key in part_keys:
            signal_nums.append(key)
            file = part_dicts[part_key]
            time = file['t_1']
            if time not in t:
                t.append(time)
                peaks.append(file['peak'])
                freq_peaks.append(file['freq_peak'])
                delta_fs.append(file['delta_f'])
        sorted_inds = np.argsort(np.array(t))
        t = np.array(t)
        peaks = np.array(peaks)
        delta_fs = np.array(delta_fs)
        freq_peaks = np.array(freq_peaks)
        signal_nums = np.array(signal_nums)
        t_sorted = t[sorted_inds]
        peak_sorted = peaks[sorted_inds]
        delta_f_sorted = delta_fs[sorted_inds]
        freq_peaks = freq_peaks[sorted_inds]
        signal_nums_sorted = signal_nums[sorted_inds]

        if plot_type is 'peak':
            line, = ax.plot(t_sorted,
                            peak_sorted,
                            marker='^',
                            linewidth=0.9,
                            ms=3)
            line.set_label('{}'.format(key))
            ax.set_ylabel('Peak amplitude', fontsize=12)
            png_name = test.pics_path / 'Peak'
        if plot_type is 'peak_freq':
            line, = ax.plot(t_sorted,
                            freq_peaks,
                            marker='^',
                            linewidth=0.9,
                            ms=3)
            line.set_label('{}'.format(key))
            ax.set_ylabel('Peak frequency', fontsize=12)
            ax.set_ylim(bottom=2.735, top=2.745)
            png_name = test.pics_path / 'Peak_frequency'
        if plot_type is 'delta':
            line, = ax.plot(t_sorted,
                            delta_f_sorted,
                            marker='^',
                            linewidth=0.9,
                            ms=3)
            line.set_label('{}'.format(key))
            ax.set_ylabel('Peak width, MHz', fontsize=12)
            png_name = test.pics_path / 'delta_f'
    ax.set_xlabel('Time, ns', fontsize=12)
    ax.set_title('{}. Magnetron'.format(exp))
    ax.legend(loc='best')
    ax.grid(which='both', axis='both')
    fig.savefig(png_name)