帮忙看看错误
			 
			 
			
		
		
		
			
			%嵌入水印 
%读取原始音频music.wav到一维数组 I,利用 length 求出音频数组 I的长度 
 D=0.035; 
 I=wavread('F:\MATLAB701\work\music.wav'); 
 len_wav=length(I); 
%读取黑白水印图像到二维数组w, 同时利用size求出二维数组的长度与宽度 
 w=imread('F:\MATLAB701\work\watermark.bmp'); 
 [m,n]=size(w); 
%将原始音频I根据水印图像的高度进行均匀分段, 并对段长进行取下整操作 
len_seg=floor(len_wav/m); 
%对每一段音频进行小波基为"db1"的三层小波变换,分别得到低频系数和高频系数 
%设一段音频段为block 
 p=1; 
 for i=1:m                             
      
     block=wavread('F:\MATLAB701\work\music.wav',[p i*len_seg]); 
     p=i*len_seg; 
 [c,l]=wavedec(block,3,'db1'); 
%提取3级小波分解的低频系数和高频系数 
 ca3=appcoef(c,l,'db1',3); 
 cd3=detcoef(c,l,3); 
 cd2=detcoef(c,l,2); 
 cd1=detcoef(c,l,1); 
 
%对低频系数进行DCT变换 
 ca3=dct(ca3); 
%选取DCT系数中的低中频系数进行水印嵌入,本文采取每一段音频嵌入一行水印的策略 
%应用此举,为无需将二维的水印转换一维,提高了程序的效率 
%其中i表示第 i段音频中嵌入第i行水印信息 
   for j=1:n 
       temp=floor((ca3(j))/D); 
       if(mod(temp,2)==w(i,j)) 
           ca3(j)=temp*D+D/2; 
       else ca3(j)=temp*D-D/2; 
       end 
   end 
%其中D为量化系数,本文取值0.035 
%进行反DCT变换 
 ca3=idct(ca3); 
%将小波高频系数cd1,cd2,cd3与含有水印的小波低频系数ca3进行逆小波变换,得到含有水印的音频段 
c1=[ca3',cd3',cd2',cd1']; 
 
I1=waverec(c1,l,'db1'); 
  
%将所得到的音频段, 重组为数组 I1, 得到含有水印的音频,并保存为音频文件musicwatermarked.wav 
 end 
  
wavwrite(I1,44100,'F:\MATLAB701\work\musicwatermarked.wav');     
///////////////////////////////////////////////////////////////////////////////////////////////// 
那位大侠帮忙看看错误在哪里啊?希望能帮忙改出来。 谢谢了!!! 
我个人认为(1)求block时候不对,(2)最后重组I1时候根本就没有重组。可不知道该怎么改了。希望高手予以指点。 
小妹谢过了!!!
		 
		
		
		
		
		
		
		
	 |