




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1. 10 快速傅氏變換和離散小波變換長(zhǎng)期以來(lái),快速傅氏變換(Fast Fourier Transform)和離散小波變換(Discrete Wavelet Transform)在數(shù)字信號(hào)處理、石油勘探、地震預(yù)報(bào)、醫(yī)學(xué)斷層診斷、編碼理論、量子物理及概率論等領(lǐng)域中都得到了廣泛的應(yīng)用。各種快速傅氏變換(FFT)和離散小波變換(DWT)算法不斷出現(xiàn),成為數(shù)值代數(shù)方面最活躍的一個(gè)研究領(lǐng)域,而其意義遠(yuǎn)遠(yuǎn)超過(guò)了算法研究的范圍,進(jìn)而為諸多科技領(lǐng)域的研究打開了一個(gè)嶄新的局面。本章分別對(duì)FFT和DWT的基本算法作了簡(jiǎn)單介紹,若需在此方面做進(jìn)一步研究,可參考文獻(xiàn)2。 1.1 快速傅里葉變換FFT離散傅里葉變換是2
2、0世紀(jì)60年代是計(jì)算復(fù)雜性研究的主要里程碑之一,1965年Cooley和Tukey所研究的計(jì)算離散傅里葉變換(Discrete Fourier Test)的快速傅氏變換(FFT)將計(jì)算量從(n2)下降至(nlogn),推進(jìn)了FFT更深層、更廣法的研究與應(yīng)用。FFT算法有很多版本,但大體上可分為兩類:迭代法和遞歸法,本節(jié)僅討論迭代法,遞歸法可參見文獻(xiàn)1、2。1.1.1 串行FFT迭代算法假定a0,a1, ,an-1 為一個(gè)有限長(zhǎng)的輸入序列,b0, b1, ,bn-1為離散傅里葉變換的結(jié)果序列,則有:,其中 W,實(shí)際上,上式可寫成矩陣W和向量a的乘積形式:一般的n階矩陣和n維向量相乘,計(jì)算時(shí)間復(fù)雜
3、度為n2,但由于W是一種特殊矩陣,故可以降低計(jì)算量。FFT的計(jì)算流圖如圖 22.1所示,其串行算法如下:算法22.1 單處理器上的FFT迭代算法輸入:a=(a0,a1, ,an-1)輸出:b=(b0,b1, ,bn-1)Begin(1)for k=0 to n-1 do ck=akend for(2)for h=logn-1 downto 0 do (2.1) p=2h(2.2) q=n/p(2.3) z=wq/2(2.4) for k=0 to n-1 doif (k mod p=k mod2p) then (i)ck = ck + ck +p(ii)ck +p=( ck - ck +p)z
4、 k modp /* ck不用(i)計(jì)算的新值 */end ifend forend for(3)for k=1 to n-1 do br(k) = ck /* r(k)為k的位反 */end forEnd圖 1.1 n=4時(shí)的FFT蝶式變換圖顯然, FFT算法的計(jì)算復(fù)雜度為O(nlogn)。1.1.2 并行FFT算法設(shè)P為處理器的個(gè)數(shù),一種并行FFT實(shí)現(xiàn)時(shí)是將n維向量a劃分成p個(gè)連續(xù)的m維子向量,這里,第i個(gè)子向量中下標(biāo)為i×m, , (i+1)×m-1,其元素被分配至第i號(hào)處理器(i=0,1, , p-1)。由圖 1.1可以看到,F(xiàn)FT算法由logn步構(gòu)成,依次以2lo
5、gn-1、2logn-2、2、1為下標(biāo)跨度做蝶式計(jì)算,我們稱下標(biāo)跨度為2h的計(jì)算為第h步(h=logn-1, logn-2, , 1, 0)。并行計(jì)算可分兩階段執(zhí)行:第一階段,第logn-1步至第logm步,由于下標(biāo)跨度h m,各處理器之間需要通信;第二階段,第logm-1步至第0步各處理器之間不需要通信。具體并行算法框架描述如下:算法22.2 FFT并行算法輸入:a=(a0,a1, ,an-1)輸出:b=(b0,b1, ,bn-1)Begin對(duì)所有處理器my_rank(my_rank=0, p-1)同時(shí)執(zhí)行如下的算法:(1)for h=logp-1 downto 0 do /* 第一階段,第
6、logn-1步至第logm步各處理器之間需要通信*/(1.1) t=2i, ,l=2(i+logm) ,q=n/l , z=wq/2 , j= j+1 ,v=2j /*開始j=0*/(1.2)if (my_rank mod t)=(my_rank mod 2t) then /*本處理器的數(shù)據(jù)作為變換的前項(xiàng)數(shù)據(jù)*/(i) tt= my_rank+p/v(ii)接收由tt 號(hào)處理器發(fā)來(lái)的數(shù)據(jù)塊,并將接收的數(shù)據(jù)塊存于cmy_rank*m+n/v到cmy_rank*m+n/v+m之中(iii)for k=0 to m-1 do ck=ck+ck+n/vck+n/v=( ck- ck+n/v)*z(my
7、_rank*m+k) mod lend for(iv)將存于cmy_rank*m+n/v到cmy_rank*m+n/v+m之中的數(shù)據(jù)塊發(fā)送到tt 號(hào)處理器else /*本處理器的數(shù)據(jù)作為變換的后項(xiàng)數(shù)據(jù)*/(v)將存于之中的數(shù)據(jù)塊發(fā)送到my_rank-p/v 號(hào)處理器(vi)接收由my_rank-p/v 號(hào)處理器發(fā)來(lái)的數(shù)據(jù)塊存于c中end if end for(2)for i=logm-1 downto 0 do /*第二階段,第logm-1步至第0步各處理器之間不需要通信*/(2.1) l=2i ,q=n/l , z=wq/2 (2.2)for k=0 to m-1 do if (k mod
8、l)=(k mod 2l) then ck=ck+ck+lck+l=( ck- ck+l)*z(my_rank*m+k) mod lend if end forend forEnd由于各處理器對(duì)其局部存儲(chǔ)器中的m維子向量做變換計(jì)算,計(jì)算時(shí)間為;點(diǎn)對(duì)點(diǎn)通信次,每次通信量為m,通信時(shí)間為,因此快速傅里葉變換的并行計(jì)算時(shí)間為。MPI源程序請(qǐng)參見章末附錄。1.2 離散小波變換DWT1.2.1 離散小波變換DWT及其串行算法先對(duì)一維小波變換作一簡(jiǎn)單介紹。設(shè)f(x)為一維輸入信號(hào),記,這里與分別稱為定標(biāo)函數(shù)與子波函數(shù),與為二個(gè)正交基函數(shù)的集合。記P0f=f,在第級(jí)上的一維離散小波變換DWT(Discret
9、e Wavelet Transform)通過(guò)正交投影Pjf與Qjf將Pj-1f分解為: 其中:, ,這里,h(n)與g(n)分別為低通與高通權(quán)系數(shù),它們由基函數(shù)與來(lái)確定,p為權(quán)系數(shù)的長(zhǎng)度。為信號(hào)的輸入數(shù)據(jù),N為輸入信號(hào)的長(zhǎng)度,L為所需的級(jí)數(shù)。由上式可見,每級(jí)一維DWT與一維卷積計(jì)算很相似。所不同的是:在DWT中,輸出數(shù)據(jù)下標(biāo)增加1時(shí),權(quán)系數(shù)在輸入數(shù)據(jù)的對(duì)應(yīng)點(diǎn)下標(biāo)增加2,這稱為“間隔取樣”。算法22.3 一維離散小波變換串行算法輸入:c0=d0(c00, c10, cN-10) h=(h0, h1, hL-1) g=(g0, g1, gL-1)輸出:cij , dij (i=0, 1, N/2j
10、-1, j0)Begin(1)j=0, n=N(2)While (n1) do(2.1)for i=0 to n-1 do(2.1.1)cij+1=0, dij+1=0(2.1.2)for k=0 to L-1 do end forend for(2.2)j=j+1, n=n/2 end whileEnd顯然,算法22.3的時(shí)間復(fù)雜度為O(N*L)。在實(shí)際應(yīng)用中,很多情況下采用緊支集小波(Compactly Supported Wavelets),這時(shí)相應(yīng)的尺度系數(shù)和小波系數(shù)都是有限長(zhǎng)度的,不失一般性設(shè)尺度系數(shù)只有有限個(gè)非零值:h1,hN,N為偶數(shù),同樣取小波使其只有有限個(gè)非零值:g1,gN。
11、為簡(jiǎn)單起見,設(shè)尺度系數(shù)與小波函數(shù)都是實(shí)數(shù)。對(duì)有限長(zhǎng)度的輸入數(shù)據(jù)序列:(其余點(diǎn)的值都看成0),它的離散小波變換為:其中J為實(shí)際中要求分解的步數(shù),最多不超過(guò)log2M,其逆變換為注意到尺度系數(shù)和輸入系列都是有限長(zhǎng)度的序列,上述和實(shí)際上都只有有限項(xiàng)。若完全按照上述公式計(jì)算,在經(jīng)過(guò)J步分解后,所得到的J+1個(gè)序列和的非零項(xiàng)的個(gè)數(shù)之和一般要大于M,究竟這個(gè)項(xiàng)目增加到了多少?下面來(lái)分析一下上述計(jì)算過(guò)程。j=0時(shí)計(jì)算過(guò)程為 不難看出,的非零值范圍為:即有個(gè)非零值。的非零值范圍相同。繼續(xù)往下分解時(shí),非零項(xiàng)出現(xiàn)的規(guī)律相似。分解多步后非零項(xiàng)的個(gè)數(shù)可能比輸入序列的長(zhǎng)度增加較多。例如,若輸入序列長(zhǎng)度為100,N=4,
12、則有51項(xiàng)非零,有27項(xiàng)非零,有15項(xiàng)非零,有9項(xiàng)非零,有6項(xiàng)非零,有4項(xiàng)非零,有4項(xiàng)非零。這樣分解到6步后得到的序列的非零項(xiàng)個(gè)數(shù)的總和為116,超過(guò)了輸入序列的長(zhǎng)度。在數(shù)據(jù)壓縮等應(yīng)用中,希望總的長(zhǎng)度基本不增加,這樣可以提高壓縮比、減少存儲(chǔ)量并減少實(shí)現(xiàn)的難度??梢圆捎蒙晕⒏淖冇?jì)算公式的方法,使輸出序列的非零項(xiàng)總和基本上和輸入序列的非零項(xiàng)數(shù)相等,并且可以完全重構(gòu)。這種方法也相當(dāng)于把輸入序列進(jìn)行延長(zhǎng)(增加非零項(xiàng)),因而稱為延拓法。只需考慮一步分解的情形,下面考慮第一步分解(j=1)。將輸入序列作延拓,若M為偶數(shù),直接將其按M為周期延拓;若M為奇數(shù),首先令。然后按M+1為周期延拓。作了這種延拓后再按
13、前述公式計(jì)算,相應(yīng)的變換矩陣已不再是H和G,事實(shí)上這時(shí)的變換矩陣類似于循環(huán)矩陣。例如,當(dāng)M=8,N=4時(shí)矩陣H變?yōu)椋寒?dāng)M=7,N=4時(shí)矩陣H變?yōu)椋簭纳鲜龅木仃嚤硎究梢钥闯?,兩種情況下的矩陣內(nèi)都有完全相同的行,這說(shuō)明作了重復(fù)計(jì)算,因而從矩陣中去掉重復(fù)的那一行不會(huì)減少任何信息量,也就是說(shuō),這時(shí)我們可以對(duì)矩陣進(jìn)行截短(即去掉一行),使得所得計(jì)算結(jié)果仍然可以完全恢復(fù)原輸入信號(hào)。當(dāng)M=8,N=4時(shí)截短后的矩陣為:當(dāng)M=7,N=4時(shí)截短后的矩陣為:這時(shí)的矩陣都只有行。分解過(guò)程成為:向量C1 和D1都只有個(gè)元素。重構(gòu)過(guò)程為:可以完全重構(gòu)。矩陣H,G有等式H*H+G*G=I一般情況下,按上述方式保留矩陣的行,
14、可以完全恢復(fù)原信號(hào)。這種方法的優(yōu)點(diǎn)是最后的序列的非0元素的個(gè)數(shù)基本上和輸入序列的非0元素個(gè)數(shù)相同,特別是若輸入序列長(zhǎng)度為2的冪,則完全相同,而且可以完全重構(gòu)輸入信號(hào)。其代價(jià)是得到的變換系數(shù)Dj中的一些元素已不再是輸入序列的離散小波變換系數(shù),對(duì)某些應(yīng)用可能是不適合的,但在數(shù)據(jù)壓縮等應(yīng)用領(lǐng)域,這種方法是可行的。1.2.2 離散小波變換并行算法下設(shè)輸入序列長(zhǎng)度N=2t,不失一般性設(shè)尺度系數(shù)只有有限個(gè)非零值:h0,hL-1,L為偶數(shù),同樣取小波使其只有有限個(gè)非零值:g0,gL-1。為簡(jiǎn)單起見,我們采用的延拓方法計(jì)算。即將有限尺度的序列按周期N延長(zhǎng),使他成為無(wú)限長(zhǎng)度的序列。這時(shí)變換公式也稱為周期小波變換
15、。變換公式為:其中<n+2k>表示n+2k對(duì)于模N/2j的最小非負(fù)剩余。注意這時(shí)和是周期為N/2j的周期序列。其逆變換為從變換公式中可以看出,計(jì)算輸出點(diǎn)和,需要輸入序列在n=2k附近的值(一般而言,L遠(yuǎn)遠(yuǎn)小于輸入序列的長(zhǎng)度)。設(shè)處理器臺(tái)數(shù)為p,將輸入數(shù)據(jù)按塊分配給p臺(tái)處理器,處理器i得到數(shù)據(jù),讓處理器i負(fù)責(zé)和的計(jì)算,則不難看出,處理器i 基本上只要用到局部數(shù)據(jù),只有L/2個(gè)點(diǎn)的計(jì)算要用到處理器i+1中的數(shù)據(jù),這時(shí)做一步并行數(shù)據(jù)發(fā)送:將處理器i+1中前L-1個(gè)數(shù)據(jù)發(fā)送給處理器i,則各處理器的計(jì)算不再需要數(shù)據(jù)交換,關(guān)于本算法其它描述可參見文獻(xiàn)1。算法22.4 離散小波變換并行算法輸入:
16、hi(i=0, L-1), gi(i=0, L-1), ci0(i=0, N-1) 輸出:cik (i=0, N/2k-1,k>0)Begin對(duì)所有處理器my_rank(my_rank=0, p-1)同時(shí)執(zhí)行如下的算法:(1)j=0;(2)while (j<r) do(2.1)將數(shù)據(jù)按塊分配給p臺(tái)處理器(2.2)將處理器i+1中前L-1個(gè)數(shù)據(jù)發(fā)送給處理器i(2.3)處理器i負(fù)責(zé)和的計(jì)算(2.4)j=j+1end whileEnd這里每一步分解后數(shù)據(jù)和已經(jīng)是按塊存儲(chǔ)在P臺(tái)處理器上,因此算法第一步中的數(shù)據(jù)分配除了j=0時(shí)需要數(shù)據(jù)傳送外,其余各步不需要數(shù)據(jù)傳送(數(shù)據(jù)已經(jīng)到位)。因此,按L
17、ogP模型,算法的總的通信時(shí)間為:2(Lmax(o,g)+l),遠(yuǎn)小于計(jì)算時(shí)間O(N)。MPI源程序請(qǐng)參見所附光盤。1.3 小結(jié) 本章主要討論一維FFT和DWT的簡(jiǎn)單串、并行算法,二維FFT和DWT在光學(xué)、地震以及圖象信號(hào)處理等方面起著重要的作用。限于篇幅,此處不再予以討論。同樣,F(xiàn)FT和DWT的并行算法的更為詳盡描述可參見文獻(xiàn)2和文獻(xiàn)3,專門介紹快速傅氏變換和卷積算法的著作可參見4。另外,二維小波變換的并行計(jì)算及相關(guān)算法可參見文獻(xiàn)5,LogP模型可參考文獻(xiàn)3。參考文獻(xiàn) 1. 王能超 著數(shù)值算法設(shè)計(jì)華中理工大學(xué)出版社,1988.92. 陳國(guó)良 編著并行計(jì)算結(jié)構(gòu)·算法·編程高
18、等教育出版社,1999.10 3. 陳國(guó)良 編著并行算法設(shè)計(jì)與分析(修訂版)高等教育出版社,2002.114. Nussbaumer H J. Fast Fourier Transform and Convolution Algorithms.2nded. Springer- Verlag,19825. 陳崚二維正交子波變換的VLSI并行計(jì)算電子學(xué)報(bào),1995,23(02):95-97 附錄 FFT并行算法的MPI源程序1. 源程序fft.c#include <stdio.h>#include <stdlib.h>#include <complex.h>#i
19、nclude <math.h>#include "mpi.h"#define MAX_PROCESSOR_NUM 12#define MAX_N 50#define PI 3.#define EPS 10E-8#define V_TAG 99#define P_TAG 100#define Q_TAG 101#define R_TAG 102#define S_TAG 103#define S_TAG2 104void evaluate(complex<double>* f, int beginPos, int endPos, const compl
20、ex<double>* x, complex<double> *y, int leftPos,int rightPos, int totalLength);void shuffle(complex<double>* f, int beginPos,int endPos);void print(const complex<double>* f, int fLength);void readDoubleComplex(FILE *f,complex<double> &z); int main(int argc, char *arg
21、v)complex<double> pMAX_N, qMAX_N, s2*MAX_N, r2*MAX_N;complex<double> w2*MAX_N;complex<double> temp;int variableNum;MPI_Status status;int rank, size;int i, j, k, n;int wLength;int everageLength;int moreLength;int startPos;int stopPos;FILE *fin;MPI_Init(&argc, &argv); MPI_Get
22、_rank(MPI_COMM_WORLD, &rank); MPI_Get_size(MPI_COMM_WORLD, &size);if(rank = 0) fin = fopen("dataIn.txt", "r"); if (fin = NULL) puts("Not find input data file"); puts("Please create a file "dataIn.txt""); puts("<example for dataIn.txt&
23、gt; "); puts("2"); puts("1.0 2"); puts("2.0 -1"); exit(-1);readDoubleComplex(fin, variableNum); if (variableNum < 1)|(variableNum > MAX_N) puts("variableNum out of range!"); exit(-1); for(i = 0; i < variableNum; i +) readDoubleComplex(fin, pi);fo
24、r(i = 0; i < variableNum; i +) readDoubleComplex(fin, qi); fclose(fin); puts("Read from data file "dataIn.txt""); printf("p(t) = "); print(p, variableNum); printf("q(t) = "); print(q, variableNum); for(i = 1; i < size; i +) MPI_Send(&variableNum,1,MP
25、I_INT,i, V_TAG,MPI_COMM_WORLD); MPI_Send(p,variableNum, MPI_DOUBLE_COMPLEX,i,P_TAG, PI_COMM_WORLD); MPI_Send(q,variableNum,MPI_DOUBLE_COMPLEX,i, Q_TAG,MPI_COMM_WORLD);elseMPI_Recv(&variableNum,1,MPI_INT,0, V_TAG,MPI_COMM_WORLD, &status); MPI_Recv(p,variableNum,MPI_DOUBLE_COMPLEX,0, P_TAG, PI
26、_COMM_WORLD, &status); MPI_Recv(q,variableNum,MPI_DOUBLE_COMPLEX,0, Q_TAG,MPI_COMM_WORLD,&status);wLength = 2*variableNum;for(i = 0; i < wLength; i +)wi= complex<double>(cos(i*2*PI/wLength),sin(i*2*PI/wLength);everageLength = wLength / size;moreLength = wLength % size;startPos = mor
27、eLength + rank * everageLength;stopPos = startPos + everageLength - 1;if(rank = 0)startPos = 0;stopPos = moreLength+everageLength - 1;evaluate(p, 0, variableNum - 1, w, s,startPos, stopPos, wLength);evaluate(q, 0, variableNum - 1, w, r, startPos, stopPos, wLength);for(i = startPos; i <= stopPos ;
28、 i +) si = si*ri/(wLength*1.0); if (rank > 0)MPI_Send(s+startPos), everageLength,MPI_DOUBLE_COMPLEX, 0, S_TAG, MPI_COMM_WORLD); MPI_Recv(s,wLength, MPI_DOUBLE_COMPLEX,0, S_ TAG2,MPI_ COMM_WORLD,&status);else for(i = 1; i < size; i +) MPI_Recv(s+moreLength+i*everageLength),everageLength, MP
29、I_DOUBLE_COMPLEX, i,S_TAG, MPI_COMM_WORLD, &status);for(i = 1; i < size; i +) MPI_Send(s,wLength, MPI_DOUBLE_COMPLEX,i, S_TAG2,MPI_COM M_WORLD); for(int i = 1; i < wLength/2; i +)temp = wi;wi = wwLength - i; wwLength - i = temp;evaluate(s, 0, wLength - 1, w, r, startPos, stopPos, wLength);
30、if (rank > 0)MPI_Send(r+startPos), everageLength,MPI_DOUBLE_COMPLEX,0, R_TAG,MPI_COMM_WORLD);elsefor(i = 1; i < size; i +) MPI_Recv(r+moreLength+i*everageLength),everageLength, MPI_DOUBLE_COMPLEX,i, R_TAG,MPI_COMM_WORLD,&status);puts("nAfter FFT r(t)=p(t)q(t)"); printf("r(t)
31、 = "); print(r, wLength - 1); puts(""); printf("Use prossor size = %dn",size);MPI_Finalize();void evaluate(complex<double>* f, int beginPos, int endPos, const complex<double>* x,complex<double>* y, int leftPos, int rightPos, int totalLength)int i;complex<
32、;double> tempX2*MAX_N,tempY12*MAX_N,tempY22*MAX_N;int midPos = (beginPos + endPos)/2;if (beginPos > endPos)|(leftPos > rightPos)puts("Error in use Polynomial!"); exit(-1);else if(beginPos = endPos)for(i = leftPos; i <= rightPos; i +)yi = fbeginPos;else if(beginPos + 1 = endPos)
33、for(i = leftPos; i <= rightPos; i +) yi = fbeginPos + fendPos*xi;elseshuffle(f, beginPos, endPos); for(i = leftPos; i <= rightPos; i +) tempXi = xi*xi;evaluate(f, beginPos, midPos, tempX, tempY1, leftPos, rightPos,totalLength);evaluate(f, midPos+1, endPos, tempX, tempY2, leftPos, rightPos, tot
34、alLength);for(i = leftPos; i <= rightPos; i +)yi = tempY1i + xi*tempY2i;void shuffle(complex<double>* f, int beginPos, int endPos)complex<double> temp2*MAX_N;int i, j;for(i = beginPos; i <= endPos; i +)tempi = fi; j = beginPos;for(i = beginPos; i <= endPos; i +=2)fj = tempi; j +
35、;for(i = beginPos +1; i <= endPos; i += 2)fj = tempi; j +;void print(const complex<double>* f, int fLength)bool isPrint = false;int i;if (abs(f0.real() > EPS)printf(“%lf”, f0.real(); isPrint = true; for(i = 1; i < fLength; i +) if (fi.real() > EPS) if (isPrint) printf(" + &quo
36、t;); else isPrint = true; printf("%lft%d", fi.real(),i); else if (fi.real() < - EPS) if(isPrint) printf(" - "); else isPrint = true; printf("%lft%d", -fi.real(),i); if (isPrint = false) printf("0");printf("n");2. 運(yùn)行實(shí)例編譯:mpicc o fft fft.cc 運(yùn)行:使用如下命令運(yùn)行程序mpirun np 1 fftmpirun np 2 fft
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度直播平臺(tái)虛擬禮物開發(fā)與交易服務(wù)合同范本
- 2025年度源代碼保密協(xié)議書-新能源技術(shù)研發(fā)合作專用版
- 2025年度證券投資財(cái)務(wù)規(guī)劃與咨詢協(xié)議
- 2025年度房產(chǎn)維修基金管理服務(wù)合同-@-1
- 2025年度廢棄塑料回收利用技術(shù)研發(fā)協(xié)議
- 預(yù)見行業(yè)變化的應(yīng)對(duì)計(jì)劃
- 開展生物學(xué)科研討會(huì)的計(jì)劃
- 教學(xué)日常檢查與評(píng)估機(jī)制計(jì)劃
- 患者膳食管理經(jīng)驗(yàn)與總結(jié)計(jì)劃
- 協(xié)助學(xué)生進(jìn)行自我評(píng)估的計(jì)劃
- 滬科版八年級(jí)物理知識(shí)點(diǎn)總結(jié)
- 2024員工質(zhì)量意識(shí)培訓(xùn)
- 孫權(quán)勸學(xué)(原卷版)-2024年中考語(yǔ)文之文言文對(duì)比閱讀
- 養(yǎng)生館拓客培訓(xùn)
- 《大學(xué)計(jì)算機(jī)基礎(chǔ)》第2章計(jì)算機(jī)系統(tǒng)組成
- 失業(yè)保險(xiǎn)待遇申領(lǐng)表
- 期末測(cè)試卷(一)(試題)2023-2024學(xué)年二年級(jí)上冊(cè)數(shù)學(xué)蘇教版
- 2024年廣東省初中學(xué)業(yè)水平考試中考英語(yǔ)試卷(真題+答案解析)
- DL-T-255-2012燃煤電廠能耗狀況評(píng)價(jià)技術(shù)規(guī)范
- 家庭教育家長(zhǎng)會(huì)教案及反思(3篇模板)
- 人教版PEP英語(yǔ)單詞表三年級(jí)到六年級(jí)
評(píng)論
0/150
提交評(píng)論