小波包分解python代碼(小波包分解算法)

  • 1、python如何實現類似matlab的小波濾波?
  • 2、急求用matlab編小波包3級分解及輸出其係數的程序,那位高手幫助我一下,將不勝感激,先謝謝啦!
  • 3、最佳小波包分解層數的獲取
  • 4、怎麼用matlab小波包分解
  • 5、小波包分解
  • 6、matlab中獲得小波樹的末層結點

T=wpdec(y,5,’db40′);

%信號y進行波包解層數5T波樹plot看

a10=wprcoef(T,[1,0]);

%a10節點[1,0]進行重構信號貌似沒層重構說吧能某層某節點進行重構節點編號波樹

%以下為濾波程序(主要調節參數c的大小)

c=10;

wn=0.1;

fs=50000; %採樣頻率;

b=fir1(c,wn/(fs/2),hamming(c+1));

y1=filtfilt(b,1,y);%對y濾波。

load ir; %將信號裝入MATLAB工作環境

s=X106_BA_time(1:1000); %取採樣信號的前1~1000個採樣點

is=length(s); %計算採樣序列長度

subplot(321);plot(s);title(‘原始信號’);%畫出原始信號波形

xlabel(‘樣本序列號’);

ylabel(‘幅值A’);

wpt=wpdec(s,3,’db1′,’shannon’);% 用db1小波包對信號x3層分解,用shannon熵作為熵標準

plot(wpt);%繪製小波包樹

N=allnodes(wpt);% 計算小波包分解樹的結點

%提取各節點的小波包係數

for i=1:length(N)

X=wpcoef(wpt,i-1);

subplot(floor((length(N)+1)/2),2,i);plot(X);

title([‘節點’,num2str(i) ‘的小波包係數’]);

end

figure;

%各節點小波包重構係數

for i=1:length(N)

rcfs=wprcoef(wpt,i-1);

subplot(floor((length(N)+1)/2),2,i);plot(rcfs);

title([‘重構節點’,num2str(i) ‘小波包係數’]);

end

因為小波包分解高頻係數的奇異值在每一分解層都不同,即分解層數的變化會引起奇異值的變化,因此,可以通過分析奇異值變化規律來確定分解層數。定義一個判定函數C(r,k),用其函數值的變化來表徵小波包分解每層信息的變化,設C(r,k)函數為

高光譜遙感影像信息提取技術

式中:r為特徵矩陣維數;k為正整數。

通過大量的實驗分析,表明小波包的分解層數與各層數對應C(r,k)函數值的變化存在一定的內在聯繫。隨着各層C(r,k)函數值的變化,有用信號和噪聲的比值也發生着顯著的變化。當在某分解層處C(r,k)的函數值到達某一程度時,這就使目標地物更好地分離出來,而使噪聲減弱,這樣就可以確定最佳分解層數。

在AVIRIS實驗數據1~9層的小波包分解中,根據高頻係數矩陣分別計算出各層處C(r,k)函數值。隨着分解層數的增加,其C(r,k)函數值在不斷減小,其變化率也發生着顯著變化。圖4.6顯示了各分解層數下的C(r,k)函數值的實際變化趨勢和這種趨勢變化所反演的回歸函數曲線,其回歸曲線方程採用接近C(r,k)函數值變化趨勢的最低次多項式函數來表示。從圖4.6上可以看出,兩條曲線非常接近地重合在一起,說明了回歸函數曲線能很好地表徵C(r,k)的變化特徵。

根據各分解層下離散的C(r,k)函數值,找出最接近其變化趨勢的最低次多項式回歸函數方程y(x):

高光譜遙感影像信息提取技術

然後求解方程y(x)的二階導數y″(x),即找出曲線拐點的位置,此點位置就代表着小波包分解的最佳分解層數。在表4.1中,可以看到在分解層數達到5層時,y″(x)的值開始從負值變為正值,說明y″(x)在第4層和第5層之間有拐點,從而確認第四層為最佳分解層數。

圖4.6 基於影像AVIRIS的判定函數C(r,k)值變化曲線和回歸函數曲線

表4.1 高光譜影像AVIRIS不同小波包分解層的SVD特徵值分析

小波圖像去噪的方法大概分為3類

1:基於小波變換摸極大值原理

2:基於小波變換係數的相關性

3:基於小波閾值的去噪。

基於小波閾值的去噪方法3個步驟:

1:

計算含噪聲圖像的小波變換。選擇合適的小波基和小波分解層數j,運用matlab

分解算法將含有噪聲圖像進行j層小波分解,得到相應的小波分解係數。

2:對分解後的高頻係數進行閾值量化,對於從1

到j的每一層,選擇一個適當的閾值和合適的閾值函數,將分解得到的高頻係數進行閾值量化,得到估計小波係數。

3:進行小波逆變化,根據圖像小波分解後的第j層,低頻

係數(尺度係數)和經過閾值量化處理的各層高頻係數(小波係數),運用matlab重構算法進行小波重構,得到去噪後的圖像。

1.裝載信號

在MATLAB命令行中輸入

load noisbloc

s=noisbloc(1:1024);

ls=length(s);

plot(s);

2.完成信號的單尺度一維離散小波分解

採用db4基本小波分解信號

在命令窗口中輸入

[cA1,cD1]=dwt(s,’db4′);

這就產生了低頻係數cA1和高頻係數cD1。

可以通過whos命令查看cA1和cD1的長度:

whos

Name Size Bytes Class

cA1 1×515 4120 double array

cD1 1×515 4120 double array

ls 1×1 8 double array

noisbloc 1×1024 8192 double array

s 1×1024 8192 double array

Grand total is 3079 elements using 24632 bytes

3.從係數中重構低頻部分和高頻部分

從第二步產生的係數cA1和cD1構造第一層的低頻和高頻(A1和D1)係數;

A1=upcoef(‘a’,cA1,’db4′,1,ls);

D1=upcoef(‘a’,cD1,’db4′,1,ls);

或用下面兩個函數:

A1=idwt(cA1,[],’db4′,ls);

D1=idwt(cD1,[],’db4′,ls);

4.顯示高頻和低頻部分

為了顯示第一層分解結果,輸入

subplot(211); plot(A1); title(‘低頻A1’);

subplot(212); plot(D1); title(‘低頻D1’);

5.由小波逆變換恢複信號

使用idwt函數很容易實現,在命令窗口輸入

subplot(211); plot(s); title(‘原始信號’);

subplot(212); plot(A0); title(‘重構信號’);

6.多層一維分解

為了完成一個5層的分解,輸入:

[C,L]=wavedec(s,5,’db4′);

7.提取係數的低頻和高頻部分

為了從上面的C中提取第3層的低頻係數,輸入:

cA3=appcoef(C,L,’db4′,3);

8.重構第3層的低頻係數

為了從上面的C中重構第3層的低頻係數,輸入:

A3=wrcoef(‘a’,C,L,’db4′,3);

9.重構第1、2、3、4、5層的高頻信號

其方法是:

cA5=appcoef(C,L,’db4′,5);

A5=wrcoef(‘a’,C,L,’db4′,5);

D1=wrcoef(‘d’,C,L,’db4′,1);

D2=wrcoef(‘d’,C,L,’db4′,2);

D3=wrcoef(‘d’,C,L,’db4′,3);

D4=wrcoef(‘d’,C,L,’db4′,4);

D5=wrcoef(‘d’,C,L,’db4′,5);

下面顯示多尺度一維分解的結果:

subplot(322); plot(D1); title(‘低頻D1’);

subplot(323); plot(D2); title(‘低頻D2’);

subplot(323); plot(D3); title(‘低頻D3’);

subplot(325); plot(A5); title(‘低頻D4’);

subplot(326); plot(A5); title(‘低頻D5’);

10.重構原始信號並顯示

A0=waverec(C,L,’db4′);

subplot(311); plot(s); title(‘原始信號’);

subplot(312); plot(A0); title(‘重構信號’);

subplot(313); plot(s-A0); title(‘誤差信號’);

第一行:將wave 用 meyr小波進行3層小波包分解,獲得一個小波包樹 t

第二行:將小波包樹的第二行的四個節點收起來,也就是讓第二行的節點變為樹的最底層節點。因為第一行中小 波包樹的節點個數是 第一層2個,第二層4個,第三層8個。現在將t2就是將第三層的節點再聚合回第二 層。

第三行:讀取第二層四個節點係數的size

第四~七行:將所有四個節點的小波包係數變為0

第八行:將四個節點的係數重組到t3小波樹中。

第九行:對t3小波樹進行重構,獲得信號wave2

原創文章,作者:M25A1,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/126994.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
M25A1的頭像M25A1
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29

發表回復

登錄後才能評論