For my project I am refering to the paper in which these lines are mentioned:-
Watermark embedded into the audio signal in frequency domain is the pseudorandom noise sequence. Depending on which bit is to be embedded the process varies :– if bit 1 is to be embedded the value of the coefficient with lower frequency is set to be k dB above the mean value, while the value of the other coefficient is set to be k dB below the mean value. If bit 0 is to be embedded the operation is done vice versa. The fact that mean value of each sub-band remains unchanged is used when removing the watermark.
For this I have written a code but I am not getting the unchanged mean. mean is getting changed. what should be done for getting unchanged mean.
- [f Fs]=wavread('timbaland.wav');
- N = length(f);
- slength = N/Fs;
- nf=1024; %number of point in DTFT
- Y = fft(f,nf);
- x = randn(1, N) + cos(2*pi*100/1024*(0:N-1));
- x(1024*ceil(end/1024)) = 0;
- z = reshape(x, 1024, []);
- y = 20*log10(abs(fft(z)));
- one_count = 0;
- zero_count = 0;
- G=1023; % Code length
- sd1 =randsrc(1,10,[0 1]); % Initial state of Shift register
- PN1=[];
- j=0;
- sd(1)=0;
- % First m-sequence
- for j=1:G
- PN1=[PN1 sd1(5)];
- if sd1(1)==sd1(4)
- temp1=0;
- zero_count = minus_count + 1;
- else temp1=1;
- one_count = one_count + 1;
- end
- sd1(1)=sd1(2);
- sd1(2)=sd1(3);
- sd1(3)=sd1(4);
- sd1(4)=sd1(5);
- sd1(5)=sd1(6);
- sd1(6)=sd1(7);
- sd1(7)=sd1(8);
- sd1(8)=sd1(9);
- sd1(9)=sd1(10);
- sd1(10)=temp1;
- %disp(j);
- %disp(sd1);
- end
- %disp(one_count);
- %disp(zero_count);
- g=autocorr(PN1);
- %key
- key=PN1;
- [m,n]=size(y);
- vks = [];
- for i=1:1
- temp= y(:,i);
- mean1= mean(temp);
- %disp(mean1);
- low = 0; high = n;
- index1 = low + (high-low) * rand;
- index1 = round(index1);
- if index1==0
- index1 = 1;
- end
- %fprintf('Index1 = %d',index1);
- %disp(strcat('Index1 = ', num2str(index1)));
- fv= temp(index1,1);
- low = 0; high = n;
- index2 = low + (high-low) * rand;
- index2 = round(index2);
- %fprintf('Index2 = %d',index2);
- if index2==0
- index2 = 1;
- end
- fsv= temp(index2,1);
- diff= mean1-20;
- K= (diff/mean1)*100;
- lf = 0;
- hf = 0;
- if (fv < mean1)
- lf = fv;
- hf = fsv;
- loc1 = index1;
- loc2 = index2;
- else
- lf = fsv;
- hf = fv;
- loc1 = index2;
- loc2 = index1;
- end
- addi = 0;
- subst = 0;
- for j=1:length(key)
- if(key(j) == 1)
- disp('Bit is 1');
- lf = mean1 + K;
- hf = mean1 - K;
- addi = addi + lf;
- subst = subst + hf;
- end
- if(key(j) == 0)
- disp('Bit is 0');
- lf = mean1 - K;
- hf = mean1 + K;
- addi = addi + hf;
- subst = subst + lf;
- end
- temp(loc1) = lf;
- temp(loc2) = hf;
- end
- mean2= mean(temp);
- %disp(mean2);
- vks(:,i) = temp;
- end
please tell me where i have done the mistake in this code. and also tell me that after doing fft only we get the coefficients ? Please reply as earliest possible. Thanks in advance. Link for whole document from where above lines are taken : Frequency Hopping Method for Audio Watermarking