#!/usr/bin/env python
# coding: utf-8
# In[1]:
import numpy as np # 导入NumPy库,用于科学计算
import pandas as pd # 导入Pandas库,用于数据处理和分析
import matplotlib.pyplot as plt # 导入Matplotlib库,用于绘图
from vmdpy import VMD # 导入VMD库,用于VMD分解
from scipy.signal import welch # 导入welch函数,用于信号频谱分析
from datetime import datetime # 导入datetime模块,用于日期和时间处理
#更多模型咸鱼搜索机器学习之心,支持模型定制
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 设置图表字体为微软雅黑,用于显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示图表中的负号
# In[ ]:
# 从CSV文件读取数据
data = pd.read_csv("A.csv")
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 将时间列转换为秒级时间戳
t = data["time"].apply(lambda x: (datetime.strptime(x, '%Y/%m/%d %H:%M') - datetime(1970, 1, 1)).total_seconds()).values
# # 读取Excel文件
# data = pd.read_excel('A.xlsx')
# # 将“time”列转为字符串类型
# data["time"] = data["time"].astype(str)#使用csv文件时不需要
#
#
# t = data["time"].apply(lambda x: (datetime.strptime(x, '%Y-%m-%d %H:%M:%S') - datetime(1970, 1, 1)).total_seconds()).values#时间是用-分开的用这个
# In[3]:
# 获取"A"列的数值作为噪声信号
noisy_signal = data["A"].values
# In[4]:
# VMD参数
alpha = 2000
tau = 0
K = 8
DC = 0
init = 1
tol = 1e-6
# In[5]:
# 使用VMD进行降噪
u, u_hat, omega = VMD(noisy_signal, alpha, tau, K, DC, init, tol)
# 计算重构信号(降噪信号)
reconstructed_signal = u.sum(axis=0)
# In[6]:
# 创建一个图形窗口,设置图形大小为(15, 3)
plt.figure(figsize=(15, 3))
# 绘制原始数据的图像
plt.plot(t, noisy_signal, label="原始数据")
# 绘制降噪后的数据的图像
plt.plot(t, reconstructed_signal, label="降噪后的数据")
# 设置 x 轴和 y 轴的标签
plt.xlabel("Time")
plt.ylabel("A")
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 添加图例
plt.legend()
# 调整 x 轴刻度密度
x_ticks = np.linspace(t[0], t[-1], 10)
plt.xticks(x_ticks, [datetime.fromtimestamp(x).strftime('%Y/%m/%d %H:%M') for x in x_ticks], rotation=45)
# 显示图像
plt.show()
# In[7]:
# 创建一个图形窗口,并将图形划分为 K 行 2 列的子图,设置图形大小为(20, 2*K)
fig, axs = plt.subplots(K, 2, figsize=(20, 2*K), sharex='col')
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 绘制每个分解模态的图像
for i in range(K):
axs[i, 0].plot(t, u[i, :]) # 绘制时间序列图像
axs[i, 0].set_title(f"IMF {i+1}") # 设置子图标题
axs[i, 0].set_ylabel("A") # 设置 y 轴标签
if i == K - 1:
axs[i, 0].set_xlabel("Time") # 设置 x 轴标签(只在最后一行的子图上显示)
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 调整 x 轴刻度密度
x_ticks = np.linspace(t[0], t[-1], 10)
for ax in axs[:, 0]:
ax.set_xticks(x_ticks)
ax.set_xticklabels([datetime.fromtimestamp(x).strftime('%Y/%m/%d %H:%M') for x in x_ticks], rotation=45)
#更多模型咸鱼搜索机器学习之心,支持模型定制
# 计算每个分量的功率谱密度并绘制频谱图
for i in range(K):
f_imf, Pxx_imf = welch(u[i, :], nperseg=240) # 计算功率谱密度
axs[i, 1].semilogy(f_imf, Pxx_imf) # 绘制频谱图
axs[i, 1].set_title(f"Frequency Spectrum of IMF {i+1}") # 设置子图标题
axs[i, 1].set_ylabel("Power Spectral Density") # 设置 y 轴标签
if i == K - 1:
axs[i, 1].set_xlabel("Frequency [Hz]") # 设置 x 轴标签(只在最后一行的子图上显示)
plt.tight_layout() # 调整子图布局
plt.show() # 显示图像
# In[ ]:
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.Python实现VMD信号分解降噪(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+
资源推荐
资源详情
资源评论
收起资源包目录
VMD降噪.zip (3个子文件)
VMD降噪.py 4KB
A.xlsx 14KB
A.csv 5KB
共 3 条
- 1
资源评论
机器学习之心
- 粉丝: 1w+
- 资源: 698
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功