%This code generates a plot for a pre- and post-compressed
%sinusoidal signal with a set bit rate, as well as an error plot.
clear;
Fs = 8192;
for i = 1:100
f = i;
a = cos(2*pi*64*f*(1:Fs)/Fs);
a=0.3*a/max(abs(a));
bit=4;
b = simplecodec(a,bit,Fs);
%audiowrite('audio_out.wav',b,Fs)
a = a(33:length(a)-32); %Ignore first and last 32 samples
if i ==1
figure(i)
plot(a,'b-')
hold on;
plot(b,'r-')
title(sprintf('Pre- and post-compressed signal: bit rate = %i, freq. = %i*64 Hz',bit,i),...
'FontSize',14)
xlabel('Time(samples)')
ylabel('Amplitude (unitless)')
legend('Original signal','Processed signal')
axis([0 64 -1 1])
hold off;
end
%Root-mean-square
RMSE(i) = sqrt( sum( (a(:)-b(:)).^2) / numel(b) );
end
odds = RMSE;
odds(2:2:length(odds)) = NaN;
evens = RMSE;
evens(1:2:length(evens)-1) = NaN;
figure()
plot(odds,'r.')
hold on;
grid on;
plot(evens,'b.')
title(sprintf('RMS error w/out windowing (bit rate = %i)',bit),'FontSize',14)
legend('Odd integers of frequency','Even integers of frequency','Location','SouthOutside')
xlabel('integer (multiplied by frequency)')
ylabel('RMSE error')
hold off;
%sinusoidal signal with a set bit rate, as well as an error plot.
clear;
Fs = 8192;
for i = 1:100
f = i;
a = cos(2*pi*64*f*(1:Fs)/Fs);
a=0.3*a/max(abs(a));
bit=4;
b = simplecodec(a,bit,Fs);
%audiowrite('audio_out.wav',b,Fs)
a = a(33:length(a)-32); %Ignore first and last 32 samples
if i ==1
figure(i)
plot(a,'b-')
hold on;
plot(b,'r-')
title(sprintf('Pre- and post-compressed signal: bit rate = %i, freq. = %i*64 Hz',bit,i),...
'FontSize',14)
xlabel('Time(samples)')
ylabel('Amplitude (unitless)')
legend('Original signal','Processed signal')
axis([0 64 -1 1])
hold off;
end
%Root-mean-square
RMSE(i) = sqrt( sum( (a(:)-b(:)).^2) / numel(b) );
end
odds = RMSE;
odds(2:2:length(odds)) = NaN;
evens = RMSE;
evens(1:2:length(evens)-1) = NaN;
figure()
plot(odds,'r.')
hold on;
grid on;
plot(evens,'b.')
title(sprintf('RMS error w/out windowing (bit rate = %i)',bit),'FontSize',14)
legend('Odd integers of frequency','Even integers of frequency','Location','SouthOutside')
xlabel('integer (multiplied by frequency)')
ylabel('RMSE error')
hold off;