MATLAB代做  | MATLAB代寫  | MATLAB有償編程
首 頁
當前位置:MATLAB代做|MATLAB代寫|MATLAB有償編程matlab源碼信號處理
小波信號分解與重構的Matlab程序        [↓跳到下載地址]
官方主頁:源碼共享網站:www.kggbzb.tw

聯系方式:客服QQ:1747812398 買代碼源碼軟件站,歡迎咨詢

運行環境:Win9X/2000/XP/2003/

源碼語言:簡體中文

源碼類型:源碼程序 - 信號處理

推薦星級:

更新時間:2088-08-03 22:42:33

源碼簡介

function [cA,cD] = mydwt(x,lpd,hpd,dim);
% 函數 [cA,cD]=MYDWT(X,LPD,HPD,DIM) 對輸入序列x進行一維離散小波分解,輸出分解序列[cA,cD]
% 輸入參數:x——輸入序列;
%          lpd——低通濾波器;
%          hpd——高通濾波器;
%          dim——小波分解級數。
% 輸出參數:cA——平均部分的小波分解系數;
%           cD——細節部分的小波分解系數。

cA=x;       % 初始化cA,cD
cD=[];
for i=1:dim
    cvl=conv(cA,lpd);   % 低通濾波,為了提高運行速度,調用MATLAB提供的卷積函數conv()
    dnl=downspl(cvl);   % 通過下抽樣求出平均部分的分解系數
    cvh=conv(cA,hpd);   % 高通濾波
    dnh=downspl(cvh);   % 通過下抽樣求出本層分解后的細節部分系數
    cA=dnl;             % 下抽樣后的平均部分系數進入下一層分解
    cD=[cD,dnh];        % 將本層分解所得的細節部分系數存入序列cD
end

function y=downspl(x);
% 函數 Y=DOWMSPL(X) 對輸入序列進行下抽樣,輸出序列 Y。
% 下抽樣是對輸入序列取其偶數位,舍棄奇數位。例如 x=[x1,x2,x3,x4,x5],則 y=[x2,x4].

N=length(x);        % 讀取輸入序列長度
M=floor(N/2);        % 輸出序列的長度是輸入序列長度的一半(帶小數時取整數部分)
i=1:M;
y(i)=x(2*i); function y = myidwt(cA,cD,lpr,hpr);
% 函數 MYIDWT() 對輸入的小波分解系數進行逆離散小波變換,重構出信號序列 y
% 輸入參數:cA —— 平均部分的小波分解系數;
%           cD —— 細節部分的小波分解系數;
%           lpr、hpr —— 重構所用的低通、高通濾波器。

lca=length(cA);             % 求出平均、細節部分分解系數的長度
lcd=length(cD);

while (lcd)>=(lca)          % 每一層重構中,cA 和 cD 的長度要相等,故每層重構后,
                            % 若lcd小于lca,則重構停止,這時的 cA 即為重構信號序列 y 。
    upl=upspl(cA);          % 對平均部分系數進行上抽樣
    cvl=conv(upl,lpr);      % 低通卷積
  
    cD_up=cD(lcd-lca+1:lcd);    % 取出本層重構所需的細節部分系數,長度與本層平均部分系數的長度相等
    uph=upspl(cD_up);       % 對細節部分系數進行上抽樣
    cvh=conv(uph,hpr);      % 高通卷積
  
    cA=cvl+cvh;             % 用本層重構的序列更新cA,以進行下一層重構
    cD=cD(1:lcd-lca);       % 舍棄本層重構用到的細節部分系數,更新cD
    lca=length(cA);         % 求出下一層重構所用的平均、細節部分系數的長度
    lcd=length(cD);
end                         % lcd < lca,重構完成,結束循環
y=cA;                       % 輸出的重構序列 y 等于重構完成后的平均部分系數序列 cA

function y=upspl(x);
% 函數 Y = UPSPL(X) 對輸入的一維序列x進行上抽樣,即對序列x每個元素之間
% 插零,例如 x=[x1,x2,x3,x4],上抽樣后為 y=[x1,0,x2,0,x3,0,x4];

N=length(x);        % 讀取輸入序列長度
M=2*N-1;            % 輸出序列的長度是輸入序列長度的2倍再減一
for i=1:M           % 輸出序列的偶數位為0,奇數位按次序等于相應位置的輸入序列元素
    if mod(i,2)
        y(i)=x((i+1)/2);
    else
        y(i)=0;
    end
end function [LL,HL,LH,HH]=mydwt2(x);
% 函數 MYDWT2() 對輸入的r*c維矩陣 x 進行二維小波分解,輸出四個分解系數子矩陣[LL,HL,LH,HH]
% 輸入參數:x —— 輸入矩陣,為r*c維矩陣。
% 輸出參數:LL,HL,LH,HH —— 是分解系數矩陣的四個相等大小的子矩陣,大小均為 r/2 * c/2 維
%               LL:低頻部分分解系數;    HL:垂直方向分解系數;
%               LH:水平方向分解系數;    HH:對角線方向分解系數。

lpd=[1/2 1/2];hpd=[-1/2 1/2];           % 默認的低通、高通濾波器
[row,col]=size(x);                      % 讀取輸入矩陣的大小

for j=1:row                             % 首先對輸入矩陣的每一行序列進行一維離散小波分解
    tmp1=x(j,:);
    [ca1,cd1]=mydwt(tmp1,lpd,hpd,1);
    x(j,:)=[ca1,cd1];                   % 將分解系數序列再存入矩陣x中,得到[L|H]
end
for k=1:col                             % 再對輸入矩陣的每一列序列進行一維離散小波分解
    tmp2=x(:,k);
    [ca2,cd2]=mydwt(tmp2,lpd,hpd,1);
    x(:,k)=[ca2,cd2];                   % 將分解所得系數存入矩陣x中,得到[LL,Hl;LH,HH]
end

LL=x(1:row/2,1:col/2);                  % LL是矩陣x的左上角部分
LH=x(row/2+1:row,1:col/2);              % LH是矩陣x的左下角部分
HL=x(1:row/2,col/2+1:col);              % HL是矩陣x的右上角部分
HH=x(row/2+1:row,col/2+1:col);          % HH是矩陣x的右下角部分

function y=myidwt2(LL,HL,LH,HH);
% 函數 MYIDWT2() 對輸入的子矩陣序列進行逆小波變換,重構出矩陣 y
% 輸入參數:LL,HL,LH,HH —— 是四個大小均為 r*c 維的矩陣
% 輸出參數:y —— 是一個大小為 2r*2c 維的矩陣

lpr=[1 1];hpr=[1 -1];           % 默認的低通、高通濾波器
tmp_mat=[LL,HL;LH,HH];          % 將輸入的四個矩陣組合為一個矩陣
[row,col]=size(tmp_mat);        % 求出組合矩陣的行列數

for k=1:col                     % 首先對組合矩陣tmp_mat的每一列,分開成上下兩半
    ca1=tmp_mat(1:row/2,k);     % 分開的兩部分分別作為平均系數序列ca1、細節系數序列cd1
    cd1=tmp_mat(row/2+1:row,k);
    tmp1=myidwt(ca1,cd1,lpr,hpr);   % 重構序列
    yt(:,k)=tmp1;                % 將重構序列存入待輸出矩陣 yt 的相應列,此時 y=[L|H]
end

for j=1:row                     % 將輸出矩陣 y 的每一行,分開成左右兩半
    ca2=yt(j,1:col/2);           % 分開的兩部分分別作為平均系數序列ca2、細節系數序列cd2
    cd2=yt(j,col/2+1:col);
    tmp2=myidwt(ca2,cd2,lpr,hpr);   % 重構序列
    yt(j,:)=tmp2;                % 將重構序列存入待輸出矩陣 yt 的相應行,得到最終的輸出矩陣 y=yt
end
y=yt;


 


提 示:本站所有源碼只提供瀏覽,需要定制的朋友可以聯系在線客服!
注意:價格根據項目的難易程度來定價格業務咨詢

小波信號分解與重構的Matlab程序 --下載地址

注意:為避免不必要的誤會,本站項目里的源碼只公開部分需要的聯系在線客服

本站長期招聘程序代寫高手,歡迎加入華南地區matlab團隊

想創業卻沒有經驗的人

無論你是否有過網上開店的經驗,都可以隨時聯系在線客服,建立自己獨立的網站
想開網店卻不知道如何入手

淘寶創業成本低而且風險小,如果想開淘寶店的朋友可以聯系在線客服。
想兼職創業,卻不擅長交際與服務的人

在家創業月入5000元。網站程序+百套群發工具+網賺資料+域名+空間+本站終身代理資格,這樣你網賺的條件全具備了。每天3小時管理、推廣、收錢。
缺乏能快速贏利型產品的人

導入多種最新流行營銷軟件+網賺教程,讓入駐者輕松加盟、復制有效成交技巧、快速賺錢。

源碼評論評論內容只代表網友觀點,與本站立場無關!

   評論摘要(共 0 條,得分 0 分,平均 0 分) 查看完整評論

瀏覽說明

* 本站所有源碼全部公開,隨時隨地瀏覽!
* MATLAB軟件如用于商業用途,請購買正版!
* 如果您發現下載鏈接錯誤,請點擊報告錯誤謝謝!
* 站內提供的所有軟件包含破解及注冊碼均是由網上搜集,若侵犯了你的版權利益,敬請來信通知我們!
Copyright © 2008-2014 www.kggbzb.tw. All Rights Reserved.
頁面執行時間:343.75000 毫秒
安微25选5开奖号