CEEMDAN

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from PyEMD import CEEMDAN

# 读取数据
df = pd.read_excel(r'D:\数据加室外天气.xlsx', index_col='采集时间')

# 选择目标列
target_column = '室内温度'

# 提取目标信号
signal = df[target_column].values

# 应用CEEMDAN分解
ceemdan = CEEMDAN()
imfs = ceemdan(signal)

# 创建一个DataFrame来存储IMFs
imfs_df = pd.DataFrame(index=df.index)
imfs_df[f'原始信号'] = signal

# 将每个IMF添加到DataFrame中
for i, imf in enumerate(imfs, start=1):
    imfs_df[f'IMF {i}'] = imf

# 保存到Excel
output_file = r'D:\CEEMDAN分解结果.xlsx'
with pd.ExcelWriter(output_file) as writer:
    imfs_df.to_excel(writer)

print(f"CEEMDAN分解结果已保存至: {output_file}")

# 如果还需要绘图部分,可以保留下面的代码
# 绘制原始信号和每个IMF
plt.rcParams['font.sans-serif'] = ['SimSun']
plt.rcParams['font.serif'] = ['Times New Roman']
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(16, 12))
plt.subplot(len(imfs) + 1, 1, 1)
plt.plot(signal, label='原始信号', color='blue')
plt.legend(loc='right')

for i, imf in enumerate(imfs):
    plt.subplot(len(imfs) + 1, 1, i + 2)
    plt.plot(imf, label=f'IMF {i + 1}', color='green')
    plt.legend(loc='right')

for ax in plt.gcf().axes:
    ax.tick_params(axis='y', labelsize=8)

plt.tight_layout(h_pad=2)
plt.show()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值