PPG signal transfer using FSK including encoding and decoding analog values. It is an easy to use method for this kind of analyses.
Students and Academician working in this field may be get its usefulness.
3. Quantization
b=4; % 4bit encoding
vmax=max(ppg);vmin=min(ppg);
del=(vmax-vmin)/(2^b-1);
lev=vmin:del:vmax;
for i=1:length(ppg)
for j=1:length(lev)
if abs(ppg(i)-lev(j))<del/2
ppgq(i)=lev(j); % mapping to the closest level
ppgd(i)=j-1; % storing the level index number or step count
break;
end
end
end
subplot 422;
n=1:length(ppgq);
stem(n,ppgq);
3
4. xlabel('Index');
ylabel('Displacement');
title('4-bit quantization for 500 Hz Sampled Signal');
Encoding
xdig=de2bi(ppgd, 'left-msb');% converting step count number into binary
dig=[];
for i=1:length(xdig)
dig=[dig xdig(i,:)];% creating digital msg
end
t=linspace(0,1,length(dig));
subplot 423;
stairs(t,dig);
xlabel('Time');
ylabel('Displacement');
ylim([-2 2]);
title('Digital Signal for 4-bit Encoding');
4
5. FSK- GENERATE CARRIER SIGNAL
Tb=1; %bit period 1 second
f1=10; f2=5; %frequency of carrier signals
phi=pi/3; %as coherent initial phase same,let it be 60 degree.
t=linspace(0,Tb,length(dig));
c1=sqrt(2/Tb)*cos(2*pi*f1*t+phi); %carrier1
c2=sqrt(2/Tb)*cos(2*pi*f2*t+phi); %carrier2
FSK- Generate Message Signal & Modulation
N=length(dig);% N is the bit number of msg signal
m=dig; % digital msg
t1=0; t2=Tb;
for i=1:N
t=linspace(t1,t2,length(dig));
if m(i)>0.5
m(i)=1;
5
6. m_s=ones(1,length(t));% for carrier1
inverse_m_s=zeros(1,length(t));%for carrier2
else
m(i)=0;
m_s=zeros(1,length(t)); %for carrier1
inverse_m_s=ones(1,length(t));%for carrier2
end
message(i,:)=m_s; % for carrier1
inverse_message(i,:)=inverse_m_s; %for carrier2
% FSK modulation
if message(i,:)==1
mod_fsk=c1.*message(i,:);
else
mod_fsk=c2.*inverse_message(i,:);
end
final_mod_fsk(i,:)=mod_fsk;
t1=t1+(Tb+(t2-t1)/length(dig)); %next cycle
t2=t2+(Tb+(t2-t1)/length(dig)); %next cycle
% plot modulated FSK signal
subplot 424;
plot(t,final_mod_fsk(i,:));
title('FSK Modulated signal'); xlabel('t--->'); ylabel('s(t)'); grid on;
hold on;
end
hold off;
6
7. Adding Noise
for i =1:N
final_mod_fsk(i,:) = awgn(final_mod_fsk(i,:), -10);
end
FSK Rectification,Filtering & Demodulation
t1=0; t2=Tb;
for i=1:N % rectifier operation
t=linspace(t1,t2,length(dig));
for j=1:length(t)
if final_mod_fsk(i,j)>0
rectfsk_sig(i,j)=final_mod_fsk(i,j);
else
rectfsk_sig(i,j)=0;
end
end
7
8. t1=t1+(Tb+(t2-t1)/length(dig)); %next cycle
t2=t2+(Tb+(t2-t1)/length(dig)); %next cycle
end
% low-pass filter
t1=0; t2=Tb;
for i=1:N
t=linspace(t1,t2,length(dig));
demodfsk_sig(i,:)=envelope(rectfsk_sig(i,:),100,"analytic");
t1=t1+(Tb+(t2-t1)/length(dig)); %next cycle
t2=t2+(Tb+(t2-t1)/length(dig)); %next cycle
end
FSK Demodulation
% determining set point
t1=0; t2=Tb;
for i=1:N
t=linspace(t1,t2,length(dig));
a(i,1)=sum(demodfsk_sig(i,:))/length(t);
t1=t1+(Tb+(t2-t1)/length(dig)); %next cycle
t2=t2+(Tb+(t2-t1)/length(dig)); %next cycle
end
max1=max(a);
min1=min(a);
set_point=(max1+min1)/2;
% decision or final demodulation
t1=0; t2=Tb;
for i=1:N
t=linspace(t1,t2,length(dig));
decision_value=sum(demodfsk_sig(i,:))/length(t);
if decision_value>set_point
x(i)=1;
else
x(i)=0;
8
9. end
t1=t1+(Tb+(t2-t1)/length(dig)); %next cycle
t2=t2+(Tb+(t2-t1)/length(dig)); %next cycle
end
% plotting Demodulated Output Msg
subplot 425; stairs(x);
title('FSK Demodulated Signal'); xlabel('n--->'); ylabel('b(n)'); grid on;
Number of error bits & BER(bit error ratio)
error_bit=0;
y=x-dig;
for i=1:length(y)
if y(i) ~= 0
error_bit=error_bit+1;
end
end
error_bit
BER=error_bit/length(y)
9
10. error_bit =
104
BER =
0.5200
Decoding and reconstruction
b=4;
j=1;
for i=1:b:length(dig)
dig_row(j,:)=dig(1,i:i+2);
j=j+1;
end
for i=1:size(dig_row,1)
lev(i)=bi2de(dig_row(i,:), 'left-msb');
end
subplot 427;
stem(lev);
axis tight;
title('Quantization Step Levels');
xlabel('Index');
ylabel('Levels');
10