基于Pyqt5的正弦波信号分析界面

基于PyQt5的正弦波信号分析界面

简介

使用PyQt5界面生成一个正弦波 ,可以调整频率、振幅、采样频率、采样时间、还可以混合频率。

对正弦波可进行FFT傅里叶变换 ,STFT短时傅里叶变换分析 ,并能够显示对应的图形。

可当作一个简单的信号处理界面,后续还可以添加IIR滤波器、FIR滤波器等。

复制代码
功能:
1、生成正弦波
2、FFT频域分析
3、STFT频域分析

1、效果图

复制代码
需要主体代码可以联系
"""
@contact: 微信 1257309054
@file: main_windows.py
@time: 2024/3/30 8:40
@author: LDC
"""

2、生成正弦波

示例代码:

python 复制代码
# -*- coding: utf-8 -*-

"""
@contact: 微信 1257309054
@file: main_windows.py
@time: 2024/3/30 8:40
@author: LDC
"""
import numpy as np
import sys
import matplotlib
import pyqtgraph
from PyQt5.QtCore import QRegExp
from PyQt5.QtGui import QRegExpValidator, QFont
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout
from scipy import signal
from windows import Ui_MainWindow

matplotlib.use("Qt5Agg")  # 声明使用QT5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt

matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
matplotlib.rcParams['axes.unicode_minus'] = False  # 显示负号

def create_sin(self):
    # 生成正弦波
    # 设置采样率和持续时间
    sampling_rate = self.sampling_rate_edit_value  # 采样率 (每秒采样点数)
    duration = self.duration_edit_value  # 持续时间 (秒)

    # 设置正弦波的频率和振幅
    frequency = self.freq_edit_value  # 频率 (赫兹)
    amplitude = self.amp_edit_value  # 振幅

    # 生成时间序列
    t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)

    # 生成正弦波采样数据
    samples = amplitude * np.sin(2 * np.pi * frequency * t)
    if self.is_mix:
        # 使用混合频率
        samples_mix = amplitude * np.sin(2 * np.pi * self.mix_freq_edit_value * t)
        # 合并信号
        samples = np.concatenate((samples, samples_mix))
        # samples = samples + samples_mix

    return t, samples

3、FFT傅里叶变换

示例代码:

python 复制代码
X = np.fft.fft(samples)  # 计算信号的FFT
freq = np.fft.fftfreq(len(samples), 1 / self.sampling_rate_edit_value)  # 计算对应的频率数组
mid = len(X) // 2  # 取正值
self.fft_p_show.setData(freq[:mid], np.abs(X)[:mid])  # 绘制FFT

4、STFT 短信傅里叶变换

python 复制代码
# 计算并绘制STFT的大小
fs = self.sampling_rate_edit_value
f, t, spectrum  = signal.stft(data, fs, nperseg=256, noverlap=128)

self.stft_canvas.figure.clear()  # 清空画布
ax = self.stft_fig.add_subplot(111)
self.stft_fig.subplots_adjust(left=None, bottom=0.2, right=None, top=None, wspace=None, hspace=None)
ax.cla()  # 删除原图,让画布上只有新的一次的图
ax.pcolormesh(t, f, np.abs(spectrum), vmin=0, vmax=0.1, shading='gouraud')
ax.set_title('STFT Magnitude')
ax.set_xlabel('time [sec]')
ax.set_ylabel('frequency [Hz]')
self.stft_canvas.draw()
相关推荐
阿里嘎多学长4 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
happylifetree4 小时前
Python67:核心语法-函数进阶-参数类型(函数作为参数)
python
布吉岛的石头4 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
小羊没烦恼!5 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
quantdash_cc6 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
镜子AI6 小时前
镜子AI工程实践:用 Python 做 GEO 实体一致性审计,并自动生成 JSON-LD 结构化数据
人工智能·python·json
昂好的day6 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
努力实干7 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者9 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
Pin_Qing10 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能