不同于傅里葉變換,變量只有頻率ω,小波變換有兩個(gè)變量:尺度a和平移量 b。尺度a控制小波函數(shù)的伸縮,平移量?b控制小波函數(shù)的平移。尺度就對(duì)應(yīng)于頻率(反比),平移量?b就對(duì)應(yīng)于時(shí)間。
離散小波變換(Discrete Wavelet Transform,DWT)1.對(duì)于一般的時(shí)間序列來說,不是連續(xù)變換,而是一種離散信號(hào),這就需要用到離散小波變換,離散小波變換就只是將尺度參數(shù)a和平移參數(shù)b離散化。小波變換很大程度上彌補(bǔ)了傅立葉分解在非平穩(wěn)時(shí)間序列上的不足,通過將傅立葉分解的正余弦波替換為一組可衰減的正交基,能較好地表達(dá)出序列中的突變和非平穩(wěn)部分。
2.離散小波變換的核心:用不同頻率的濾波器分析不同頻率的信號(hào),主要是高通濾波器和低通濾波器。
DWT用小波基函數(shù)(wavelet fuction)和尺度函數(shù)(scale function)來分別分析高頻信號(hào)和低頻信號(hào),也即高通濾波器和低通濾波器。
3.離散小波變換步驟:
經(jīng)過上述操作,保留了頻率的時(shí)間位置信息。
注意:傅里葉變換在處理突變信號(hào),需要利用大量的三角波去擬合信號(hào),也會(huì)導(dǎo)致計(jì)算復(fù)雜,信號(hào)特征提取效果降低;而小波變換是一種自適應(yīng)的三角波,就是一個(gè)三角波不斷進(jìn)行平移、伸縮,就可以契合信號(hào)的變換,從而更好提取特征。 小波變換python示例:# 小波
sampling_rate = 1024
t = np.arange(0, 1.0, 1.0 / sampling_rate)
f1 = 100
f2 = 200
f3 = 300
f4 = 400
data = np.piecewise(t, [t< 1, t< 0.8, t< 0.5, t< 0.3],
[lambda t: 400*np.sin(2 * np.pi * f4 * t),
lambda t: 300*np.sin(2 * np.pi * f3 * t),
lambda t: 200*np.sin(2 * np.pi * f2 * t),
lambda t: 100*np.sin(2 * np.pi * f1 * t)])
wavename = 'cgau8'
totalscal = 256
fc = pywt.central_frequency(wavename)
cparam = 2 * fc * totalscal
scales = cparam / np.arange(totalscal, 1, -1)
[cwtmatr, frequencies] = pywt.cwt(data, scales, wavename, 1.0 / sampling_rate)
plt.figure(figsize=(8, 4))
plt.subplot(211)
plt.plot(t, data)
plt.xlabel("t(s)")
plt.title('shipinpu', fontsize=20)
plt.subplot(212)
plt.contourf(t, frequencies, abs(cwtmatr))
plt.ylabel(u"prinv(Hz)")
plt.xlabel(u"t(s)")
plt.subplots_adjust(hspace=0.4)
plt.show()
離散小波變換python示例:
?import pywt
import matplotlib.pyplot as plt
import numpy as np
fs = 1000
N = 200
k = np.arange(200)
frq = k*fs/N
frq1 = frq[range(int(N/2))]
aa = []
for i in range(200):
aa.append(np.sin(0.3*np.pi*i))
for i in range(200):
aa.append(np.sin(0.13*np.pi*i))
for i in range(200):
aa.append(np.sin(0.05*np.pi*i))
y = aa
wavename = 'db5'
cA, cD = pywt.dwt(y, wavename)
ya = pywt.idwt(cA, None, wavename, 'smooth') # approximated component
yd = pywt.idwt(None, cD, wavename, 'smooth') # detailed component
x = range(len(y))
plt.figure(figsize=(12, 9))
plt.subplot(311)
plt.plot(x, y)
plt.title('original signal')
plt.subplot(312)
plt.plot(x, ya)
plt.title('approximated component')
plt.subplot(313)
plt.plot(x, yd)
plt.title('detailed component')
plt.tight_layout()
plt.show()
# 圖像單邊譜
plt.figure(figsize=(12, 9))
plt.subplot(311)
data_f = abs(np.fft.fft(cA))/N
data_f1 = data_f[range(int(N/2))]
plt.plot(frq1, data_f1, 'red')
plt.subplot(312)
data_ff = abs(np.fft.fft(cD))/N
data_f2 = data_ff[range(int(N/2))]
plt.plot(frq1, data_f2, 'k')
plt.xlabel('pinlv(hz)')
plt.ylabel('amplitude')
plt.show()
離散小波變換把信號(hào)分成了低頻近似和高頻細(xì)節(jié),分離信號(hào)高低頻效果還可以??梢栽O(shè)置閾值就可將信號(hào)高頻分離出來。
以上僅是個(gè)人理解?。?!可以一起多多交流。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧