320x100
무한히 반복되는 SIN파의 형태에 대하여 파이썬 - PyQt5로 구현했습니다.
주파수 : 2khz
진폭 : 5v
지속시간 : 0.001초
샘플링 주파수 : 80KHz
위 단위를 전제합니다.
목적은 그래프 반환되는 속도와 최적화에 대한 방향 설정입니다.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtChart import QChart, QChartView, QLineSeries
from PyQt5.QtCore import *
import numpy as np
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView, QGraphicsScene
from PyQt5.QtChart import QChart, QChartView, QLineSeries, QValueAxis
class SinWaveChart(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("2KHz Sin Wave Chart")
self.setGeometry(100, 100, 1900, 1300)
# 파라미터 설정
self.frequency = 2000 # 주파수 2kHz
self.amplitude = 5.0 # 진폭
self.duration = 0.001 # 파형의 지속 시간 (0.001초)
self.sampling_rate = 80000 # 샘플링 주파수 (80kHz)
self.t = np.linspace(0, self.duration, int(self.sampling_rate * self.duration), endpoint=False)
self.index = 0 # 현재 인덱스
self.sin_wave = self.amplitude * np.sin(2 * np.pi * self.frequency * self.t)
series = QLineSeries()
for i in range(len(self.t)):
series.append(self.t[i], self.sin_wave[i])
chart = QChart()
chart.setTitle("2KHz Sin Wave")
chart.addSeries(series)
self.axisX = QValueAxis( )
self.axisX.setMax(10)
self.axisX.setMin(0)
self.axisX.setLabelFormat("%.1f") # 눈금 레이블 형식 설정
self.axisX.setTickCount(11) # 눈금의 개수를 11로 설정
self.axisY = QValueAxis( )
self.axisY.setMax(10)
self.axisY.setMin(-10)
self.axisY.setLabelFormat("%.1f") # 눈금 레이블 형식 설정
self.axisY.setTickCount(11) # 눈금의 개수를 11로 설정
self.chartView = QChartView(chart)
self.chartView.setRenderHint(QPainter.Antialiasing)
chart.addAxis(self.axisX, Qt.AlignBottom) # x축을 아래에 추가
chart.addAxis(self.axisY, Qt.AlignLeft) # y축을 왼쪽에 추가
self.setCentralWidget(self.chartView)
self.timer = QBasicTimer()
self.timer.start(10, self) # 10ms마다 타이머 이벤트 발생
self.show()
def timerEvent(self, event):
if event.timerId() == self.timer.timerId():
# 새로운 데이터 포인트 생성
sin_wave = self.amplitude * np.sin(2 * np.pi * self.frequency * self.t - self.index * 0.1)
self.index += 1
# 데이터 포인트를 그래프에 추가
series = self.chartView.chart().series()[0]
series.clear()
for i in range(len(self.t)):
series.append(self.t[i], sin_wave[i])
else:
super().timerEvent(event)
def main():
app = QApplication(sys.argv)
window = SinWaveChart()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
속도에 대한 문제
1) X축과 Y축값을 프린트 할 경우에 소요 발생
2) Duration 값이 큰 영향을 발생
- visual studio 2022에서의 실행예시 입니다.
(영상 기준 : 4초)
728x90
'Programming Language > Python_library' 카테고리의 다른 글
파이썬_활용단계 ep.2 pandas를 써서 표 안의 원하는 것만 골라뽑기 (0) | 2022.12.18 |
---|---|
파이썬_활용단계 ep.1 Let's go pandas 월드 (2) | 2022.12.14 |
파이썬_응용단계 ep.8 난수와 샘플링, 데이터 카운팅! (2) | 2022.12.13 |
파이썬_응용단계 ep.7 정렬과 통계 (0) | 2022.12.11 |
파이썬_응용단계 ep.6 배열의 연산 (0) | 2022.12.11 |