-
Notifications
You must be signed in to change notification settings - Fork 0
/
MATLAB Code
46 lines (46 loc) · 1.36 KB
/
MATLAB Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
clear all;
close all;
% Read two audio files
% %audio1 duration is less than audio2
[x1, fs1] = audioread("message.wav");
number_of_samples1 = length(x1);
duration_in_seconds1 = floor(number_of_samples1 / fs1);
[x2, fs2] = audioread("cover.wav");
number_of_samples2 = length(x2);
duration_in_seconds2 = floor(number_of_samples2 / fs2);
% Hide audio1 in audio2
omega = 2.4; %2pi/period
A = 0.05;
X = x2;
for n = 1 : number_of_samples1
X(n) = x2(n)+A*x1(n)*cos(omega*n);
end
% Plot the magnitude spectrum of X
figure; plot(log10(abs(fft(X))));
audiowrite("encoded.wav",X,fs2);
figure('Name', 'the magnitude spectrum for the result');
plot(log10(abs(fft(X))));
14
figure('Name', 'the magnitude spectrum for audio1'); plot((abs(fft(x1))));
figure('Name', 'the magnitude spectrum for audio2');
plot(log10(abs(fft(x2))));
% restore x1[n]
Y = linspace(0, duration_in_seconds1, number_of_samples1);
for n = 1 : min(length(x1), length(x2))
Y(n) = X(n)*cos(omega*n);
end
% frequency domain; fourier transform
Yfft = fft(Y);
% % multiply the range of Y[k] by zeros.
range = 10;
for k = floor(length(Yfft)/range) : (range)*floor(length(Yfft)/range)
Yfft(k) = 0;
end
% delete the effect of the attenuation factor by dividing by it and amplify
the signal.
for n = 1 : length(Yfft)
Yfft(n) = 6 * (Yfft(n) / A);
end
% % inverse fourier transform
Yifft = real(ifft(Yfft));
audiowrite("decoded.wav",Yifft,fs1);