该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
关于FFT实现音频水印的!求助!
clc;clear;close all;
%读入作为水印的二维图像
FILE1='C:\Program Files\MATLAB71\work\matlab shuiyin\FFT\shuiyin.bmp';
w=imread(FILE1);
[M1,M2]=size(w);
%图像降维并bit化
W=reshape(w,1,M1*M2);
C=dec2bin(uint8(W),8);
%读入声音文件
FILE2='C:\Program Files\MATLAB71\work\matlab shuiyin\FFT\0.wav';
Y=wavread(FILE2);[X1,X2]=size(Y);
[y,Fs,bits]=wavread(FILE2);
leny=length(y);
subplot(211); plot(y);
axis([0 350000 -2 2]);
title('嵌入水印后音频波形图');
%对原始信号进行fft并分段
M=M1*M2;N=130;
De=fft(Y);
%水印嵌入
%delt为量化步长,fftam为傅立叶变换幅度,mod为幅值,residua为余数,fftam1为量化后幅度
delt=1;
for k=1:M
for m=10:10:80
fftam1=abs(De((k-1)*N+m,1));
fftang1=angle(De((k-1)*N+m,1));
mod1=fix(fftam1/delt);
residua=fftam1-(delt*mod1);
if mod1==0
if C(k,m/10)==1
fftam1=delt/2;
else
fftam1=3/2*delt;
end
else
if C(k,m/10)==1
if mod(mod1,2)==0
fftam1=(mod1+1/2)*delt;
else
if abs(residua)<=delt/2
fftam1=mod1*delt-1/2*delt;
else
fftam1=(mod1+3/2)*delt;
end
end
end
end
%ifft变换 把含有水印信息的fftam1代替fftam,其它系数不变,再进行ifft
De((k-1)*N+m,1)=fftam1.*exp(i.*fftang1);
De1=ifft(De);
end
end
%把逆变换后的数据存入音频文件,就得到了加入水印后的音频文件
wavwrite(De1,Fs,bits,'C:\Program Files\MATLAB71\work\matlab shuiyin\FFT\T1.wav');
subplot(212); plot(De1);
axis([0 350000 -2 2]);
title('嵌入水印后音频波形图');