[Monitoring System] 4. UDP ํ†ต์‹ ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ง„๋™ ๋ฐ์ดํ„ฐ FFT / STFT์‹œ๊ฐํ™”(numpy, tensorflow, pytorch)

2023. 4. 25. 11:18ยท๐ŸŽผ Project/๐ŸงŠ Monitoring System
728x90

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด stft๋Š” ๋ถ€ํ•˜๊ฐ€ ๋„ˆ๋ฌด ์‹ฌํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ๋ฌด๋ฆฌ๋ฌด๋ฆฌ์ด๋‹ค. ์ผ๋‹จ matplotlib ์ž์ฒด์—์„œ ๋‹จ์ˆœ ์‹œ๊ฐํ™”๋ฅผ ํ•˜๊ธฐ์—๋„ ๋ฐ์ดํ„ฐ ์–‘์ด ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ข…์˜ ๋…นํ™”๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์„œ ์›ํ•˜๋Š” ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ fft / stft ์ฒ˜๋ฆฌํ•ด์„œ ๋”ฐ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค. ๊ทธ๋ž˜๋„ FFT ์ •๋„๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์•„์„œ gpu accelerator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.  ๊ทธ๋Ÿฌ๋‚˜ CUDA ํ™˜๊ฒฝ์ด ์•„๋‹Œ ๊ณณ์—์„œ๋„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก numpy๋กœ๋„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

์ด์ „๊นŒ์ง€ ์ฝ”๋“œ๋Š” ์š”๊ธฐ์— ์žˆ๋‹ค. https://dnai-deny.tistory.com/65

 

[Monitoring System] 3. UDP ํ†ต์‹ ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ง„๋™ ๋ฐ์ดํ„ฐ Plotting(feat. matplotlib)

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด์ „ mqtt์—์„œ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ ๋ฐ์ดํ„ฐ๋ณด๋‹ค 2๋งŒ ๋ฐฐ ์ •๋„ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ DAQ์—์„œ ๋ฐ›์•„์˜ค๋Š” UDP ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์›น ์„œ๋น„์Šค์— ์˜จ๋„ ๋ฐ์ดํ„ฐ ๋ง๊ณ  ์ง„๋™ ๋ฐ์ดํ„ฐ๋„ ๋„ฃ์–ด๋ณด

dnai-deny.tistory.com

- PyTorch๋กœ ๊ตฌํ˜„ํ•œ ๋ฒ„์ „

import torch
import matplotlib.pyplot as plt
import matplotlib.animation as animation

class RealTimeAnimation:
    """
    Animate original voltage signal graph and fft result.
    """
    def __init__(self):
        # define plot
        self.fig = plt.figure(figsize=(20, 10))
        self.fig.suptitle('Vibration Data', fontsize=20)
        plt.subplots_adjust(hspace=0.3)

        self.original = self.fig.add_subplot(211)
        self.original.title.set_text('Signal Graph')
        self.original.set(xlabel="samples", ylabel="mV")

        self.fft_graph = self.fig.add_subplot(212)
        self.fft_graph.title.set_text('FFT Graph')
        self.fft_graph.set(xlabel="frequency", ylabel="amplitude")

        # connect animation method
        self.animation = animation.FuncAnimation(self.fig, self.update, interval=50)

    def update():
    ...
        # update fft graph
        Fs = 25600.0
        Ts = 1/Fs
        n = len(graph_data)

        # pytorch fft
        graph_data = torch.Tensor(graph_data)
        graph_data.to("cuda:0")
        fft_data = torch.fft.rfft(graph_data)
        frequency = torch.arange(0.0, Fs/2.0, Fs/n)


        self.fft_graph.clear()
        self.fft_graph.plot(frequency[:len(fft_data)//2], np.abs(fft_data[:len(fft_data)//2]))
        self.fft_graph.title.set_text('FFT Graph')
        self.fft_graph.set(xlabel="frequency", ylabel="amplitude")

__init__ ํ•จ์ˆ˜์— fft graph๋ฅผ ๊ทธ๋ฆด ๋ถ€๋ถ„์„ ์ƒˆ๋กœ ๋„ฃ์–ด์ฃผ๊ณ , update ํ•จ์ˆ˜์—์„œ fft๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. FFT ์ž์ฒด๋Š” ์‹ ํ˜ธ๋ฐ์ดํ„ฐ๋งŒ ์žˆ์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— rfft(์Œ์ˆ˜ ์ฃผํŒŒ์ˆ˜๋ฅผ ๋‚ ๋ ค์ฃผ๋Š” ๋ฒ„์ „์˜ fft, ์›ํ•˜์ง€ ์•Š์œผ๋ฉด fft๋กœ ํ•˜๋ฉด ๋œ๋‹ค)๋ฅผ ์ ์šฉํ•ด graph data์— ๋Œ€ํ•œ fft data๋ฅผ ์–ป์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹นํ•˜๋Š” frequency ๊ณ„์‚ฐ์„ ์œ„ํ•ด์„œ Fs(Sampling rate)์˜ ์ ˆ๋ฐ˜์œผ๋กœ ์žก๊ณ  ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ x์ขŒํ‘œ์ธ frequency๋ฅผ ๊ณ„์‚ฐํ•˜์˜€๋‹ค.

Sampling rate๋Š” ์‹ค์ œ ์ธก์ •ํ•˜๊ณ  ์‹ถ์€ ์ฃผํŒŒ์ˆ˜ ๋ฒ”์œ„์˜ ์ ์–ด๋„ ๋‘ ๋ฐฐ๋ฅผ ์žก์•„์ค˜์•ผํ•œ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‚˜์ดํ€ด์ŠคํŠธ ์ฃผํŒŒ์ˆ˜์™€ ์—˜๋ฆฌ์–ด์‹ฑ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด๋ฉด ๋” ์ž์„ธํ•˜๊ณ  ์ „๋ฌธ์ ์ธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

FFT๋Š” ์ขŒ์šฐ๊ฐ€ ๋Œ€์นญ์ ์œผ๋กœ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ•œ์ชฝ(๋ฐ˜)๋งŒ ๋ณด๋ฉด ๋œ๋‹ค๋‹ค. ๋”ฐ๋ผ์„œ plottingํ•  ๋•Œ fft_data์˜ ์ ˆ๋ฐ˜๋งŒ ์‹œ๊ฐํ™”ํ•˜์˜€๋‹ค. ์ ˆ๋Œ€๊ฐ’ ํ•จ์ˆ˜๋ฅผ ์ทจํ•ด์ฃผ๋Š” ์ด์œ ๋Š”, ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋ณต์†Œ์ˆ˜์ธ ๊ฒฝ์šฐ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

์งœ์ž”! ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ž˜ ๋‚˜์˜จ๋‹ค. ์•„๋ž˜ ๋‘ ๋ธ”๋Ÿญ์€ ๊ฐ๊ฐ numpy๋ฒ„์ „, tensorflow ๋ฒ„์ „์ด๋‹ค.

from numpy.fft import rfft, rfftfreq
frequency = rfftfreq(n, Ts)[:-1]
fft_data = (rfft(graph_data)/n)[:-1] * 2
import tensorflow as tf

with tf.device("/device:GPU:0"):
    fft_data = tf.signal.rfft(input_tensor=tf.cast(graph_data, tf.float32))
    frequency = tf.range(0.0, tf.divide(Fs,2.0), tf.divide(Fs, tf.cast(n, tf.float32)))

 

2. ๋…นํ™” ๋ฐ ์ผ์‹œ์ •์ง€ ๋ฒ„ํŠผ ์ถ”๊ฐ€

class RealTimeAnimation:
    """
    Animate original voltage signal graph and fft result.
    """
    def __init__(self):
        ...

        # define buttons
        self.paused = False
        ax = plt.axes([0.8, 0.025, 0.1, 0.04])
        ax2 = plt.axes([0.68, 0.025, 0.1, 0.04])
        ax3 = plt.axes([0.56, 0.025, 0.1, 0.04])
        ax4 = plt.axes([0.44, 0.025, 0.1, 0.04])

        # plot control button
        self.pause_button = Button(ax, "Pause/Restart")
        self.pause_button.on_clicked(self.toggle_event)

        # start record button
        self.pos = 0
        self.record_button = Button(ax2, "Start Recording")
        self.record_button.on_clicked(self.start_recording)

        # data save button
        self.save_button = Button(ax3, "Save Data")
        self.save_button.on_clicked(self.save_data)

        # show entire data analysis button
        self.show_button = Button(ax4, "Show Analysis")
        self.show_button.on_clicked(show_result)

    def update(self, i) -> None:
        ...

    def toggle_event(self, *args, **kwargs) -> None:
        """
        On click event function of pause button.
        Stop / Restart plotting graphs.
        """

        if self.paused:
            self.animation.event_source.start()
        else:
            self.animation.event_source.stop()

        self.paused = not self.paused

    def start_recording(self, *args, **kwargs) -> None:
        data_lock.acquire()
        self.pos = len(entire_data) - 1
        data_lock.release()
        print("Recording started.")

    def save_data(self, *args, **kwargs) -> None:
        """
        Save entire voltage data in csv.
        During save data, graph plotting will be paused.
        Using lock.
        """

        self.animation.event_source.stop()
        print("Saving...")

        data_lock.acquire()
        f = open("data.csv", "w")
        target = csv.writer(f)
        target.writerow(entire_data[self.pos:])
        data_lock.release()

        print("Saved {0} Data. Restart plotting.".format(len(entire_data)))
        self.animation.event_source.start()

๋ฒ„ํŠผ ์ถ”๊ฐ€๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  on click ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. recording start ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ data์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๊ณ , save data ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ €์žฅ๋œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ˜„์žฌ ์ธ๋ฑ์Šค๊นŒ์ง€๋ฅผ csv ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด์ค€๋‹ค. ๋ถ€ํ•˜๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ์ €์žฅ ์ค‘์—๋Š” plotting์„ ์ž ์‹œ ๋ฉˆ์ถ”๋„๋ก ํ•˜์˜€๋‹ค.

pause/restart์€ plotting์„ ์ž ๊น ๋ฉˆ์ถ”๊ณ  ์žฌ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฒ„ํŠผ์ด๋‹ค.

show result ๋ฒ„ํŠผ์€ ๋‹ค์Œ ๋‹จ๋ฝ์— ๊ตฌํ˜„ํ•œ๋‹ค.

 

3. ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ FFT / STFT ๋ถ„์„ํ•˜๊ธฐ

ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“  ํ›„ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ณธ / FFT / STFT ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ์„ธ ๊ฐ€์ง€๋กœ plotting ํ•œ๋‹ค. ๋ชจ๋“ˆ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ๋“ฑ๋กํ•ด๋‘์—ˆ๋‹ค.

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
import torch
import csv

def show_result(e) -> None:
    """
    Show original signal graph, fft and stft result of saved data.

    Args:
        e: event
    """

    # read data
    data_file = open("data.csv", "r")
    reader = csv.reader(data_file, delimiter=',', quoting=csv.QUOTE_NONNUMERIC)
    entire_data = []
    for row in reader:
        entire_data = row
        print(entire_data[:10])
        break

    if len(entire_data) <= 1:
        print("No data saved. Please try after save data.")
        return 

    gs = gridspec.GridSpec(3, 1)

    # define graph
    fig = plt.figure(figsize=(20, 12))
    fig.suptitle("Data Analysis Result", fontsize=20)

    original = plt.subplot(gs[0, 0])
    original.set_title("Original Signal")
    original.set(xlabel="Samples", ylabel="mV")

    stft = plt.subplot(gs[1, 0])
    stft.set_title("Short-Term FFT")
    stft.set(xlabel="Time(sec)", ylabel="Frequency")

    fft_graph = plt.subplot(gs[2, 0])
    fft_graph.set_title("FFT")
    fft_graph.set(xlabel="Frequency", ylabel="Amplitude")

    plt.subplots_adjust(hspace=0.5)

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ณ , plot๋“ค์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. 

3.1. FFT

    # plot fft
    Fs = 25600.0
    Ts = 1/Fs
    n = len(entire_data)

    # pytorch fft
    graph_data = torch.Tensor(entire_data)
    graph_data.to("cuda:0")
    fft_data = torch.fft.rfft(graph_data) / n

    frequency = torch.arange(0.0, Fs/2.0, Fs/n)
    fft_graph.clear()
    fft_graph.plot(frequency[1:len(fft_data)//2], np.abs(fft_data[1:len(fft_data)//2]))

fft๋Š” ์œ„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ์ฝ”๋“œ๊ฐ€ ๊ฐ™๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žต...

3.2. STFT

    # pytorch stft
    graph_data = graph_data.unsqueeze(0)
    stft_ = torch.stft(graph_data, 25600)
    stft_data = torch.sqrt(stft_[:,:,:,0] ** 2 + stft_[:,:,:,1]**2)
    stft.pcolormesh(stft_data[0])
    # scipy stft
    f, t, Zxx = signal.stft(entire_data, fs=Fs, nperseg=len(entire_data)//100)
    stft.pcolormesh(t, f, np.abs(Zxx), shading="gouraud"

STFT๋„ PyTorch ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ๋”ฐ๋ผํ–ˆ๋‹ค. PyTorch์˜ STFT๋Š” ๋ฐ์ดํ„ฐ์™€ sampling rate๋ฅผ ์š”๊ตฌํ•œ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ plotํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‚˜์„œ pcolormesh๋กœ ์‹œ๊ฐํ™”ํ•˜์˜€๋‹ค.

scipy์˜ STFT๋Š” ๋ฐ์ดํ„ฐ, sampling rate, ๊ทธ๋ฆฌ๊ณ  window๋ฅผ ์š”๊ตฌํ•œ๋‹ค. window๋ฅผ ์ž˜ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์•„์ง ์ž˜...๋ชจ๋ฅด๊ฒ ๋‹ค. ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šตํ•  ๋•Œ hyperparameter ์กฐ์ •์„ ํ•˜๋Š” ๊ธฐ๋ถ„์ด๋ผ๊ณ  ํ•ด์•ผํ•˜๋‚˜...  window๋ฅผ ๋„“๊ฒŒ ์žก์œผ๋ฉด ์ฃผํŒŒ์ˆ˜ ์˜์—ญ์— ๋Œ€ํ•œ ํ•ด์ƒ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๋Œ€์‹  ์‹œ๊ฐ„์˜์—ญ์— ๋Œ€ํ•œ ํ•ด์ƒ๋„๊ฐ€ ๋–จ์–ด์ง€๊ณ , ์ข๊ฒŒ ์žก์œผ๋ฉด ์‹œ๊ฐ„ ์˜์—ญ์— ๋Œ€ํ•œ ํ•ด์ƒ๋„๊ฐ€ ๊ฐœ์„ ๋˜๋Š” ๋Œ€์‹  ์ฃผํŒŒ์ˆ˜ ์˜์—ญ์— ๋Œ€ํ•œ ํ•ด์ƒ๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค.

 ์™„์„ฑ! ์ „์ฒด ์ฝ”๋“œ๋Š” ์•„๋ž˜ ๊นƒํ—™์˜ udp_server.py์™€ stft.py ์ฝ”๋“œ์— ์ž์„ธํžˆ ๋‚˜์™€์žˆ๋‹ค!  

 

GitHub - melli0505/monitoring_system: FastAPI/PostgreSQL/MQTT ๊ธฐ๋ฐ˜ ์„ผ์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ

FastAPI/PostgreSQL/MQTT ๊ธฐ๋ฐ˜ ์„ผ์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ. Contribute to melli0505/monitoring_system development by creating an account on GitHub.

github.com

์—ฌ๋‹ด์œผ๋กœ gpu๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ ์—ฐ์‚ฐํ•˜๊ธฐ ์œ„ํ•ด torch๋‚˜ tensorflow์˜ ์ ์šฉ์„ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋กœ์จ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ gpu ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์‹œ๊ฐ„์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒด๊ฐ๋˜๋Š” ์†๋„ ์ฐจ์ด๋Š” ๋ณ„๋กœ ์—†์—ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์œผ๋‹ˆ ๋” ๊ทธ๋Ÿฐ ๋“ฏ. ๊ทธ๋ƒฅ numpy์™€ scipy๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ฒ ๋‹ค. 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€

'๐ŸŽผ Project > ๐ŸงŠ Monitoring System' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Monitoring System] 5. Fast API ๋กœ ์ดํ‹€๋งŒ์— ๋ฐฑ์—”๋“œ ๊ตฌ์ถ•ํ•˜๊ธฐ(feat. SQLAlchemy, PostgreSQL) (1)  (0) 2023.06.13
[Monitoring System] 4.1 ์„ธ์ƒ์— ๋” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด - pyqtgraph  (2) 2023.04.27
[Monitoring System] 3. UDP ํ†ต์‹ ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ง„๋™ ๋ฐ์ดํ„ฐ Plotting(feat. matplotlib)  (0) 2023.04.19
[Monitoring System] 2. MQTT ํ†ต์‹   (0) 2023.04.06
[Monitoring System] 1. ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ๋ฐ ๋ชฉํ‘œ  (1) 2023.04.06
'๐ŸŽผ Project/๐ŸงŠ Monitoring System' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Monitoring System] 5. Fast API ๋กœ ์ดํ‹€๋งŒ์— ๋ฐฑ์—”๋“œ ๊ตฌ์ถ•ํ•˜๊ธฐ(feat. SQLAlchemy, PostgreSQL) (1)
  • [Monitoring System] 4.1 ์„ธ์ƒ์— ๋” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด - pyqtgraph
  • [Monitoring System] 3. UDP ํ†ต์‹ ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ง„๋™ ๋ฐ์ดํ„ฐ Plotting(feat. matplotlib)
  • [Monitoring System] 2. MQTT ํ†ต์‹ 
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
      • ๐Ÿฌ ML & Data (50)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (12)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐Ÿณ Docker & Kubernetes (3)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (8)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[Monitoring System] 4. UDP ํ†ต์‹ ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ง„๋™ ๋ฐ์ดํ„ฐ FFT / STFT์‹œ๊ฐํ™”(numpy, tensorflow, pytorch)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”