利用小波滤波对数据集进行滤波

import pywt
import numpy as np
import pandas as pd
import matplotlib  
import matplotlib.pyplot as plt
import math
####################一些参数和函数############
def sgn(num):
    if(num > 0.0):
        return 1.0
    elif(num == 0.0):
        return 0.0
    else:
        return -1.0

###软硬阈值折衷法 a 参数
a=0.3
#read data
data = pd.read_csv('C:\\Users\\1701\Desktop\\wt06860_1.csv')
#y_value为原信号
x1 = np.array(data['WIND_SPEED'])
y_values = data['REAL_POWER']

plt.subplot(211)
plt.scatter(x1, y_values, s=10)
#小波基的选取
db  = pywt.Wavelet('db5')#选用db5小波
#[ca3, cd3, cd2, cd1] = pywt.wavedec(x1, db1)
maxlev = pywt.dwt_max_level(len(data), db.dec_len)#计算应该分几层
coeffs = pywt.wavedec(y_values, db, level=3)
recoeffs = pywt.waverec(coeffs, db)
print(recoeffs)
 #求通用阈值
thcoeffs =[]
for i in range(1, len(coeffs)):
    tmp = coeffs[i].copy()
    Sum = 0.0
    for j in coeffs[i]:
        Sum = Sum + abs(j)
    N = len(coeffs[i])
    Sum = (1.0 / float(N)) * Sum
    sigma = (1/0.6745)*Sum   
    lamda = sigma * math.sqrt(2.0 * math.log(float(N), math.e)) #采用通用的阈值
    for k in range(len(tmp)):
        if(abs(tmp[k]) >= lamda):
            tmp[k] = sgn(tmp[k]) * (abs(tmp[k]) - a * lamda)
        else:
            tmp[k] = 0.0
    thcoeffs.append(tmp)

#print(thcoeffs)
usecoeffs = []
usecoeffs.append(coeffs[0])
usecoeffs.extend(thcoeffs)
print(usecoeffs)
#recoeffs为去噪后信号
recoeffs = pywt.waverec(usecoeffs, db)

plt.subplot(212) 
plt.scatter(x1, recoeffs, s=5)
plt.show()

**加粗样式
**滤波完后发现效果不是很好,正在改进中。。。求大佬指导

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值