You are on page 1of 42

PCM Speech Compression clear all clc t = [0:.

01:3]; x=sin(2*t); c=compand(x,1,1,'mu/compressor') e=uencode(c,3) d=udecode(e,3) o=compand(d,1,1,'mu/expander') figure() hold on plot(x,'--red') plot(o,'black') axis([0,290,-2,1]) hleg=legend('original signal','received signal using companding''PCM') hold off e1=uencode(x,3) d1=udecode(e1,3) figure() hold on plot(x,'--red') plot(d1,'black') axis([0,290,-2,1]) hleg=legend('original signal','received signal without companding''PCM') hold off OUTPUT
1 original signal received signal using companding'PCM 0.5

-0.5

-1

-1.5

-2

50

100

150

200

250

1 original signal received signal without companding'PCM 0.5

-0.5

-1

-1.5

-2

50

100

150

200

250

DPCM Speech Compression clear all close all t = [0:.01:2]; x=sawtooth(3*t); predictor = [0 1]; % y(k)=x(k-1) partition = [-1:.1:.9]; codebook = [-1:.1:1]; c=compand(x,1,1,'mu/compressor') encodedx = dpcmenco(c,codebook,partition,predictor); encodedx1 = dpcmenco(x,codebook,partition,predictor); decodedx = dpcmdeco(encodedx,codebook,predictor); decodedx1 = dpcmdeco(encodedx1,codebook,predictor); o=compand(decodedx,1,1,'mu/expander') figure(1) hold on plot(x,'--red') plot(o,'black') hleg=legend('original signal','received signal using companding''DPCM') figure(2) hold on plot(x,'--green') plot(decodedx1,'blue') hleg=legend('original signal','received signal without using companding''DPCM') hold off

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 original signal received signal using companding'DPCM

50

100

150

200

250

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 original signal received signal without using companding'DPCM

50

100

150

200

250

GO BACK N clc; clear all; n=input('Number Of Frames: '); w=input('Window Size: '); pt=1; flag=0; flag2=0; a=1:n; while flag==0 if flag2==0 for i=1:w fprintf('Frame %d Transmitted\n',a(pt)); pt=pt+1; end flag2=1; end s=randint(1,1,10); if s>3 fprintf('PAK of Frame %d Received\n',a(pt-w)); fprintf('Frame %d Transmitted\n',a(pt)); Sucess1=unique(a(pt-w)) if a(pt)==n flag=1; end pt=pt+1; else fprintf('NAK Of Frame %d Received\n',a(pt-w)); for j=0:w-1 fprintf('Frame %d Discarded\n',a(pt-w+j)); Y=unique(a(pt-w+j)) end pt=pt-w; flag2=0; end end i=n-w+1; while (i<=n) s=randint(1,1,10); if s>4 fprintf('PAK of Frame %d Received\n',a(i)); i=i+1; else fprintf('NAK of Frame %d Received \n',a(i)); H=unique(a(i))

for j=i:n fprintf('Frame %d Discarded\n',a(j)); L=unique(a(j)) end for k=i:n fprintf('Frame %d Transmitted\n',a(k)); Succes2=unique(a(pt-w)) end Discarded=n-Succes2 throughput=n/(n+ Discarded+H) end end
OUTPUT:

Number of Frames: 1000 Window Size: 500 Throughput =0.4002

SELECTIVE REPEAT clc; clear all; n=input('Number Of Frames: '); w=input('Window Size: '); pt=1; flag=0; flag2=0; a=1:n; while flag==0 if flag2==0 for i=1:w fprintf('Frame %d Transmitted\n',a(pt)); pt=pt+1; end flag2=1; end s=randint(1,1,10); if s>3 fprintf('PAK of Frame %d Received\n',a(pt-w)); fprintf('Frame %d Transmitted\n',a(pt)); Sucess1=unique(a(pt-w)) if a(pt)==n flag=1; end pt=pt+1; else

fprintf('NAK Of Frame %d Received\n',a(pt-w)); for j=0:w-1 fprintf('Frame %d Discarded\n',a(pt-w+j)); Y=unique(a(pt-w+j)) end pt=pt-w; flag2=0; end end i=n-w+1; while (i<=n) s=randint(1,1,10); if s>4 fprintf('PAK of Frame %d Received\n',a(i)); i=i+1; else fprintf('NAK of Frame %d Received \n',a(i)); for j=i:n fprintf('Frame %d Discarded\n',a(j)); L=unique(a(j)) end for k=i:n fprintf('Frame %d Transmitted\n',a(k)); Succes2=unique(a(pt-w)) end end Discarded=n-Succes2 throughput=n/(n+ Discarded) end

OUTPUT Number of Frames: 1000 Window Size: 500 Throughput = 0.6671

Image Compression Using EZW Algorithm


X=imread('cameraman.tif'); meth = 'ezw'; % Method name S=size(X); wname = 'bior4.4'; % Wavelet name figure; image(X); axis square;

title('Original Image'); L = wmaxlev(S,wname) ; disp(L); [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',6,'LEVEL',L,'wname',wname); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); figure; subplot(211); image(Xc); axis square; title('Compressed Image - 6 steps EZW using bior4.4') xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) wname1 = 'haar'; % Wavelet name L1 = wmaxlev(S,wname) ; disp(L1); [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',6,'LEVEL',L,'wname',wname1); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); subplot(212); image(Xc); axis square; title('Compressed Image - 6 steps EZW using haar') xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) %The key parameter is the number of loops; increasing it leads to better %recovery, but a worse compression ratio.To get better recovery we are %moving to 9 and 12 step [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',9,'LEVEL',L,'wname',wname); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); figure; subplot(211); image(Xc); axis square; title('Compressed Image - 9 steps EZW using bior4.4'); xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}); [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',9,'LEVEL',L,'wname',wname1);

Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); subplot(212); image(Xc); axis square; title('Compressed Image - 9 steps EZW using haar') xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) [CR,BPP] = wcompress('c',X,'mask.wtc',meth,'maxloop',12,'LEVEL',L,'wname',wname); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); figure; subplot(211); image(Xc); axis square; title('Compressed Image - 12 steps EZW using bior4.4'); xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}); [CR,BPP] = wcompress('c',X,'mask.wtc','ezw','maxloop',12,'LEVEL',L,'wname',wname1); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); subplot(212); image(Xc); axis square; title('Compressed Image - 12 steps EZW using haar'); xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]})

Image Compression Using SPIHT Algorithm


X=imread('cameraman.tif'); meth = 'spiht'; S=size(X); wname = 'bior4.4'; figure; image(X); axis square; title('Original Image'); L = wmaxlev(S,wname) ; disp(L); % Method name % Wavelet name

[CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',6,'LEVEL',L,'wname',wname); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); figure; subplot(211); image(Xc); axis square; title('Compressed Image - 6 steps SPIHT using bior4.4') xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) wname1 = 'haar'; % Wavelet name L1 = wmaxlev(S,wname) ; disp(L1); [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',6,'LEVEL',L,'wname',wname1); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); subplot(212); image(Xc); axis square; title('Compressed Image - 6 steps SPIHT using haar') xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) %The key parameter is the number of loops; increasing it leads to better %recovery, but a worse compression ratio.To get better recovery we are %moving to 9 and 12 step [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',9,'LEVEL',L,'wname',wname); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); figure; subplot(211); image(Xc); axis square; title('Compressed Image - 9 steps SPIHT using bior4.4'); xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}); [CR,BPP] = wcompress('c',X,'camera.wtc',meth,'maxloop',9,'LEVEL',L,'wname',wname1); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255));

subplot(212); image(Xc); axis square; title('Compressed Image - 9 steps SPIHT using haar') xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) [CR,BPP] = wcompress('c',X,'mask.wtc','spiht','maxloop',12,'LEVEL',L,'wname',wname); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); figure; subplot(211); image(Xc); axis square; title('Compressed Image - 12 steps SPIHT using bior4.4'); xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}); [CR,BPP] = wcompress('c',X,'mask.wtc','spiht','maxloop',12,'LEVEL',L,'wname',wname1); Xc = wcompress('u','camera.wtc'); [psnr,mse] = psnr_mse_maxerr(X,Xc); colormap(gray(255)); subplot(212); image(Xc); axis square; title('Compressed Image - 12 steps SPIHT using haar'); xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... ['BPP: ' num2str(BPP,'%3.2f')],['PSNR: ' num2str(psnr,'%5.2f')],['MSE: ' num2str(mse,'%5.2f')]}) OUTPUT

SPIHT ANOTHER clc; sub_band_input=[26 6 13 10;-7 7 6 4;4 -4 4 -3;2 -2 -2 0]; buffer=[1 1;1 2;2 1;2 2;1 3;1 4;2 3;2 4;3 1;3 2;4 1;4 2;3 3;3 4;4 3; 4 4]; size_mat=size(sub_band_input); total_bits_before_compression=size_mat(1)*size_mat(2)*8; total_bits_after_compression=[]; temp=sub_band_input; T=2^floor(log2(max(max(abs(sub_band_input))))); descendant0=temp(1:2,1:2); descendant1=temp(1:2,3:4); descendant2=temp(3:4,1:2); descendant3=temp(3:4,3:4); LIP=[1 1;1 2; 2 1;2 2]; LIS=[1 2;2 1;2 2]; LSP=[]; for pass=1:5 bit_streams=[]; buf_lis_sig=[]; buf_lip_sig=[]; buf_lip_insig=[]; num1=0;

num2=0; incrementer=[]; %dominant pass %LIP Coefficient point1=size(LIP); for i=1:point1(1) if abs(temp(LIP(i,1),LIP(i,2)))>=T buf_lip_sig=[buf_lip_sig;LIP(i,:)]; incrementer=[incrementer;i]; bit_streams=[bit_streams 1]; if sign(temp(LIP(i,1),LIP(i,2)))==-1 bit_streams=[bit_streams 0]; else bit_streams=[bit_streams 1]; end else bit_streams=[bit_streams 0]; end end %LIS coefficient temp1=0; temp2=0; temp3=0; point=size(LIS); for i=1:point(1) switch length(LIS) case 1 dom_mat=descendant3; num1=2; num2=2; case 2 switch i case 1 dom_mat=descendant2; num1=2; num2=0; case 2 dom_mat=descendant3; num1=2; num2=2; end case 3 switch i case 1 dom_mat=descendant1;

%significant

%significant negative

%significant positive

num2=2; case 2 dom_mat=descendant2; num1=2; num2=0; case 3 dom_mat=descendant3; num1=2; num2=2; end end flag=0; flag1=0; buf=[]; for m=1:2 for n=1:2 if abs(dom_mat(m,n))>=T %significant buf_lis_sig=[buf_lis_sig;m+num1 n+num2]; if flag==0 bit_streams=[bit_streams 1]; if i==1 temp1=1; elseif i==2 if temp1~=1 temp2=2; else temp2=1; end else temp3=3; end end flag=1; if flag1==0 if sign(dom_mat(m,n))==-1 %significant negative bit_streams=[bit_streams 1 0]; else bit_streams=[bit_streams 1 1]; %significant positive end else if sign(dom_mat(m,n))==-1 %significant negative bit_streams=[bit_streams 1 0]; else bit_streams=[bit_streams 1 1]; %significant positive

end bit_streams=[bit_streams buf]; buf=[]; flag1=0; end else if flag1==1 bit_streams=[bit_streams 0]; buf_lip_insig=[buf_lip_insig;m+num1 n+num2]; else flag1=1; buf=[buf,0]; end end end end if flag==0 bit_streams=[bit_streams 0]; end end

%Refinement pass point=size(LSP); msb_bit=[]; bin_full_mat=[]; for i=1:point(1) bin_mat=dec2bin(abs(temp(LSP(i,1),LSP(i,2)))); y=uint8(bin_mat); if length(bin_mat)~=length(dec2bin(max(max(temp)))) diff=length(dec2bin(max(max(temp))))-length(bin_mat); pad_mat=padarray(y,[0 diff],48,'pre'); bin_full_mat(i,:)=pad_mat; else bin_full_mat(i,:)=y; end end h=size(bin_full_mat); if pass~=1 for t=1:h(1) if(bin_full_mat(t,pass-1))==48 msb_bit=[msb_bit 0]; else msb_bit=[msb_bit 1];

end end end msb_bit; %Updating the list LSP=[LSP;buf_lip_sig]; LSP=[LSP;buf_lis_sig]; l=size(incrementer); LIP=[LIP;buf_lip_insig]; for k=1:l(1) LIP(incrementer(k),:)=[0 0]; end LIP_temp=[]; l=size(LIP); for k=1:l(1) if LIP(k,:)~=0; LIP_temp=[LIP_temp;LIP(k,:)]; end end LIP=LIP_temp; if temp1~=0 LIS(temp1,:)=[]; end if temp2~=0 LIS(temp2,:)=[]; end if temp3~=0 LIS(temp3,:)=[]; end bit_streams=[bit_streams msb_bit] total_bits_after_compression=[total_bits_after_compression bit_streams]; T=T/2; end num_bits_after_compression=length(total_bits_after_compression); compression_ratio=num_bits_after_compression/total_bits_before_compression

EZW ANOTHER clc; sub_band_input=[26 6 13 10;-7 7 6 4;4 -4 4 -3;2 -2 -2 0]; buffer=[1 1;1 2;2 1;2 2;1 3;1 4;2 3;2 4;3 1;3 2;4 1;4 2;3 3;3 4;4 3; 4 4]; temp=sub_band_input; initial_recnstr_table=zeros(4,4);

new_recnstr_table=zeros(4,4); size_mat=size(sub_band_input); total_bits_before_compression=size_mat(1)*size_mat(2)*4; total_bits_after_compression=[]; T=2^floor(log2(max(max(abs(sub_band_input))))); p_bit=1; n_bit=0; buffer_position=zeros(1,2); bit_streams=[]; descendant0=temp(1:2,1:2); descendant1=temp(1:2,3:4); descendant2=temp(3:4,1:2); descendant3=temp(3:4,3:4); for pass=1:5 bit_streams=[]; bit_sub=[]; buffer_position=zeros(1,2); num1=0; num2=0; %dominant pass switch pass case 1 dom_mat=descendant0; len=1; case 2 dom_mat=descendant0; len=2; case 3 dom_mat=descendant0; len=4; case 4 dom_mat=descendant0; len=4; otherwise dom_mat=descendant0; len=4; end for i1=1:len buf_pos_flag=0;

if i1==2 dom_mat=descendant1; num2=2; elseif i1==3 dom_mat=descendant2; num1=2; num2=0; elseif i1==4 dom_mat=descendant3; num1=2; num2=2; end for i=1:2 for j=1:2 if initial_recnstr_table(i+num1,j+num2)==0 if abs(dom_mat(i,j))>=T %significant buffer_position=[buffer_position;i+num1 j+num2]; buf_pos_flag=1; bit_streams=[bit_streams n_bit]; if sign(dom_mat(i,j))==-1 %significant negative bit_streams=[bit_streams p_bit]; else bit_streams=[bit_streams n_bit]; %significant positive end else if i1==1 if(j==2 & i==1) sub_mat=descendant1; elseif(i==2 & j==1) sub_mat=descendant2; elseif(i==2 & j==2) sub_mat=descendant3; end else sub_mat=dom_mat; end flag=0; if i1==1 for k=1:2 for l=1:2 if abs(sub_mat(k,l))>=T bit_streams=[bit_streams 1 1]; flag=1; break; else

if(k==2 &l==2) bit_streams=[bit_streams 1 0]; end end end

if flag==1 break; end end else bit_streams=[bit_streams 1 1]; end end end end end end %subordinate pass initial_recnstr_value=1.5*T; if buf_pos_flag==1 for q=1:length(buffer_position)-1 if sign(temp(buffer_position(q+1,1),buffer_position(q+1,2)))==-1 initial_recnstr_table(buffer_position(q+1,1),buffer_position(q+1,2))=initial_recnstr_value; else initial_recnstr_table(buffer_position(q+1,1),buffer_position(q+1,2))=initial_recnstr_value; end end end %correction value=T/4 for p2=1:16 if initial_recnstr_table(buffer(p2,1),buffer(p2,2))~=0 correction_term=(temp(buffer(p2,1),buffer(p2,2))initial_recnstr_table(buffer(p2,1),buffer(p2,2))); if sign(correction_term)==-1 %correction negative bit_sub=[bit_sub p_bit]; new_recnstr_table(buffer(p2,1),buffer(p2,2))=initial_recnstr_table(buffer(p2,1),buffer(p2,2))(T/4);

else bit_sub=[bit_sub n_bit];

%correction negative

new_recnstr_table(buffer(p2,1),buffer(p2,2))=initial_recnstr_table(buffer(p2,1),buffer(p2,2))+(T/ 4); end end end initial_recnstr_table=new_recnstr_table; bit_streams=[bit_streams bit_sub] total_bits_after_compression=[total_bits_after_compression bit_streams]; T=T/2; end num_bits_after_compression=length(total_bits_after_compression); compression_ratio=num_bits_after_compression/total_bits_before_compression mean_err=0; for i=1:(size_mat(1)*size_mat(2)) mean_err=mean_err+(temp(i)-initial_recnstr_table(i))^2; end mean_err

MuLAW ANOTHER clc; sign_value=0; mu=[25 255 2555]; mu_law=[]; range=[-1:1:1]; for j=1:3 for i=1:length(range) if sign(range(i))>0 sign_value=1; elseif sign(range(i))==0 sign_value=0; else sign_value=-1; end mu_law(j,i)=sign_value*(log(1+mu(j)*(abs(range(i)))))/(log(1+mu(j))); end end plot(range,mu_law(1,:),'--',range,mu_law(2,:),'->',range,mu_law(3,:),'-*'); legend('u-->25','u-->255','u-->2555'); title('MU-law curve');

%encoding input_values=input('input the value between -8192 to 8191------------->'); position=0; seg_code=[]; quan_code=[]; value=sign(input_values); if value==1 p_bit_value=0; else p_bit_value=1; end added_value=abs(input_values)+33; for i=13:-1:6 if bitget(added_value,i)==1 position=i; dec_seg_code=(position-1)-5; break; end end if position==0 seg_code=[0 0 0]; code=floor(abs(added_value/2)); for i=1:4 quan_code=[bitget(abs(code),i),quan_code]; end else for i=3:-1:1 seg_code=[seg_code bitget(abs(dec_seg_code),i)]; end %Identification of quantization code for i=1:4quan_code=[quan_code bitget(added_value,(position-i))]; end end code_word=[p_bit_value seg_code quan_code]; codeword=bitcmp(code_word,1); %complementing display(codeword);

%Decoding codeword=bitcmp(code_word,1); q_code=code_word(5:end); de_q_code=[];

%complementing

for i=1:4 if q_code(i)==1 de_q_code=[de_q_code 49]; else de_q_code=[de_q_code 48]; end end temp=char(de_q_code); actual_quan_code=bin2dec(temp); step1=(actual_quan_code*2)+33; seg_code=code_word(2:4); de_seg_code=[]; for i=1:3 if seg_code(i)==1 de_seg_code=[de_seg_code 49]; else de_seg_code=[de_seg_code 48]; end end temp=char(de_seg_code); actual_seg_code=bin2dec(temp); if actual_seg_code~=0 step2=step1*(2^actual_seg_code); step3=step2-33; else step3=(2*actual_quan_code)+1; end if code_word(1)==1 decoded_value=-(step3); else decoded_value=(step3); end display(decoded_value); display(compression_factor); display(compression_ratio); ALAW ANOTHER clc; sign_value=0; A=[25 255 2555]; A_law=[]; range=[-1:1:1]; for j=1:3

for i=1:length(range) if (abs(range(i))>=0) && (abs(range(i))<=(1/A(j))) A_law(j,i)=(sign(range(i))*A(j))/(1+log(A(j))); elseif (abs(range(i))>(1/A(j))) && (abs(range(i))<=1) A_law(j,i)=(sign(range(i))*(1+log(A(j)*abs(range(i)))))/(1+log(A(j))); end end end plot(range,A_law(1,:),'--',range,A_law(2,:),'->',range,A_law(3,:),'-*'); legend('A-->25','A-->255','A-->2555'); title('A-law curve');

%encoding input_values=input('input the value between -4095 to 4095------------->'); position=0; quan_cmp_code=[]; seg_cmp_code=[]; value=sign(input_values); if value==1 p_bit_value=0; else p_bit_value=1; end dec_seg_code=[]; seg_code=[]; quan_code=[];

for i=12:-1:6 if bitget(abs(input_values),i)==1 position=i; dec_seg_code=(position-1)-4; break; end end if position==0 seg_code=[0 0 0]; code=floor(abs(input_values/2)); for i=1:4 quan_code=[bitget(abs(code),i),quan_code]; end else

%identification of segment code for i=3:-1:1 seg_code=[seg_code bitget(abs(dec_seg_code),i)]; end %Identification of quantization code for i=1:4 quan_code=[quan_code bitget(abs(input_values),(position-i))]; end end code_word_nocmp=[p_bit_value seg_code quan_code]; % codeword=bitcmp(code_word,1); %complementing seg_cmp_code=[~seg_code(1) seg_code(2) ~seg_code(3)]; quan_cmp_code=[quan_code(1) ~quan_code(2) quan_code(3) ~quan_code(4)]; code_word=[~p_bit_value seg_cmp_code quan_cmp_code]; display(code_word);

%Decoding %to find the segment code seg_cmp_code=code_word(2:4); seg_code=[~seg_cmp_code(1) seg_cmp_code(2) ~seg_cmp_code(3)]; de_seg_code=[]; for i=1:3 if seg_code(i)==1 de_seg_code=[de_seg_code 49]; else de_seg_code=[de_seg_code 48]; end end temp=char(de_seg_code); actual_seg_code=bin2dec(temp); %to find the quantization code q_cmp_code=code_word(5:end); q_code=[q_cmp_code(1) ~q_cmp_code(2) q_cmp_code(3) ~q_cmp_code(4)]; de_q_code=[]; for i=1:4 if q_code(i)==1 de_q_code=[de_q_code 49]; else de_q_code=[de_q_code 48]; end end

temp=char(de_q_code); actual_quan_code=bin2dec(temp); if actual_seg_code~=0 step1=(actual_quan_code*2)+33; step2=step1*(2^(actual_seg_code-1)); else step2=(2*actual_quan_code)+1; end if code_word(1)==0 decoded_value=-(step2); else decoded_value=(step2); end compression_factor=13/8; compression_ratio=1/compression_factor; display(decoded_value); display(compression_factor); display(compression_ratio); CDMA Performance Analysis of DS-CDMA clear all; close all; users=[1 3 20 31]; m=[1 0 0 0 0]; m1=m; snr=[-20:20]; x=zeros(4,length(snr)); for j=1:1:30 b=xor(m(2),m(5)); for i=5:-1:2 m(i)=m(i-1); end m(1)=b; m1=[m1;m]; end pnseq=m1(:,5)'; pnseq1=pnseq; for k=1:1:4 for j=1:1:(users(1,k)-1)

pnseq_end=pnseq(31); for i=31:-1:2 pnseq(i)=pnseq(i-1); end pnseq(1)=pnseq_end; pnseq1=[pnseq1;pnseq]; end pnseq1; pnseq1=pnseq1*2-1; msg=randsrc(10000,users(1,k),[1,0]); for j=1:1:length(snr) antipodal_msg=msg*2-1; tx=antipodal_msg*pnseq1; rx=awgn(tx,snr(j),'measured'); ds_msg=rx*pnseq1'; emsg=sign(ds_msg); v=((emsg*2)+2)/4; [num,ratio]=biterr(v,msg); x(k,j)=ratio; end pnseq1=zeros(1,31); end; semilogy(snr,x(1,:),'r+-',snr,x(2,:),'g*-',snr,x(3,:),'k--',snr,x(4,:),'b+-'); xlabel('snr'); ylabel('Bit Error Rate'); legend('user1','user3','user20','user31'); title('Performance of DS-CDMA'); grid on;

Performance Analysis of DS-CDMA

10

Performance of DS-CDMA user1 user3 user20 user31

10

-1

10

-2

Bit Error Rate

10

-3

10

-4

10

-5

10

-6

-20

-15

-10

-5

0 snr

10

15

20

SIMULATION OF GO BACK N PROTOCOL clc clear all n=input('Enter the number of frames: '); w=input('Window Size: '); pt=w+1; flag=0; ext=0; flag1=0; flag2=0; a=1:n; for i=1:w fprintf('Frame %d Transferred\n',a(i)); end while flag==0 s=randint(1,1,10); if s>3 fprintf('PAK of frame %d received\n',a(pt-w)); else fprintf('NAK of frame %d received\n',a(pt-w)); unqA=unique(a(pt-w));

Th=n/(unqA+n) subplot(2,2,1), stem(unqA,Th), ylabel('Throughput'); xlabel('No of bits in error'); subplot(2,2,2),stem(n,Th), ylabel('Throughput'); xlabel('Total number of bits'); ext=ext+1; for i=n+ext:-1:pt+1 a(i)=a(i-1); end a(pt)=a(pt-w); end fprintf('Frame %d Transferred\n',a(pt)); if a(pt)==n flag=1; end pt=pt+1; end k=pt-w; while flag2==0 test=randint(1,1,[1 7]); if flag1==1 fprintf('Frame %d Transmitted\n',a(k)); flag1=0; end if test>3 fprintf('PAK of frame %d received\n',a(k)); k=k+1; else fprintf('NAK of frame %d received\n',a(k)); flag1=1; end if k==n+ext+1 flag2=1; end end

OUTPUT Enter the number of frames: 1000 Window Size: 500 Th= 0.5893

SIMULATION OF SELECTIVE REPEAT clc clear all n=input('Enter the number of frames: '); w=input('Window Size: '); pt=w+1; flag=0; ext=0; flag1=0; flag2=0; a=1:n; for i=1:w fprintf('Frame %d Transferred\n',a(i)); end while flag==0 s=randint(1,1,10); if s>3 fprintf('PAK of frame %d received\n',a(pt-w)); else fprintf('NAK of frame %d received\n',a(pt-w));

unqA=unique(a(pt-w)); %countElA=histc(a(pt-w),unqA); %# get the count of elements %relFreq=countElA/numel(a(pt-w)) Th=n/(unqA+n) subplot(2,2,1), stem(unqA,Th), ylabel('Throughput'); xlabel('No of bits in error'); subplot(2,2,2),stem(n,Th), ylabel('Throughput'); xlabel('Total number of bits'); ext=ext+1; for i=n+ext:-1:pt+1 a(i)=a(i-1); end a(pt)=a(pt-w); end fprintf('Frame %d Transferred\n',a(pt)); if a(pt)==n flag=1; end pt=pt+1; end k=pt-w; while flag2==0 test=randint(1,1,[1 7]); if flag1==1 fprintf('Frame %d Transmitted\n',a(k)); flag1=0; end if test>3 fprintf('PAK of frame %d received\n',a(k)); k=k+1; else fprintf('NAK of frame %d received\n',a(k)); flag1=1; end if k==n+ext+1 flag2=1; end end

OUTPUT

Enter the number of frames: 1000 Window Size: 500 Th=0.7474

PCM: clear all clc t = [0:.01:3]; x=sin(2*t); c=compand(x,1,1,'mu/compressor') e=uencode(c,3) d=udecode(e,3) o=compand(d,1,1,'mu/expander') figure() hold on plot(x,'--red') plot(o,'black') axis([0,290,-2,1]) hleg=legend('original signal','received signal using companding''PCM') hold off e1=uencode(x,3) d1=udecode(e1,3) figure() hold on plot(x,'--red') plot(d1,'black') axis([0,290,-2,1]) hleg=legend('original signal','received signal without companding''PCM') hold off distor = sum((x-d1).^2)/length(x)%MSE without companding distor1 = sum((x-o).^2)/length(x)%MSE with companding

OUTPUT: distor = 0.0216 distor1 = 0.0286


1 original signal received signal using companding'PCM 0.5

-0.5

-1

-1.5

-2

50

100

150

200

250

1 origional signal received signal without companding'PCM 0.5

-0.5

-1

-1.5

-2

50

100

150

200

250

DPCM:

clear all close all clc t = [0:.01:2]; x=sawtooth(3*t); predictor = [0 1]; % y(k)=x(k-1) partition = [-1:.1:.9]; codebook = [-1:.1:1]; c=compand(x,1,1,'mu/compressor'); d=compand(x,1,1,'a/compressor') % Quantize x using DPCM. encodedx = dpcmenco(c,codebook,partition,predictor); encodedx1 = dpcmenco(x,codebook,partition,predictor); % Try to recover x from the modulated signal. decodedx = dpcmdeco(encodedx,codebook,predictor); decodedx1 = dpcmdeco(encodedx1,codebook,predictor); o=compand(decodedx,1,1,'mu/expander') p=compand(decodedx,1,1,'a/expander') figure(1) hold on plot(x,'--red') plot(o,'black') plot(p,'blue') hleg=legend('original signal','received signal using mu-law companding DPCM','received signal using a-law companding DPCM') figure(2) hold on plot(x,'--green') plot(decodedx1,'blue') hleg=legend('original signal','received signal without using companding''DPCM'); hold off distorA = sum((x-p).^2)/length(x) %MSE measure for A law companding distorB = sum((x-o).^2)/length(x) %MSE measure for mu law companding OUTPUT: distorA = 0.0073 distorB = 0.0036

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 original signal received signal using mu-law companding DPCM received signal using a-law companding DPCM

50

100

150

200

250

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 original signal received signal without using companding'DPCM

50

100

150

200

250

CDMA %Performance comparision of CMF,DECORR and MMSE

%Bit error rate VS SNR clear all; clc; [pnsq]=gseq([0 0 1 0 1],[1 0 1 1 1],[0 0 0 0 1]); % PN sequence - gold sequence E=ones(1,25); snr_in_db=[0:1:31]; N=1e5; k=length(E); Lc=size(pnsq,2); PN(:,1)=pnsq(1,:)'; PN(:,2:k)=pnsq(2:k,:)'; R=(PN'*PN)/31; Rinv=inv(R); for l=1:length(snr_in_db) disp('processing ....'); num_of_err1=0; num_of_err2=0; num_of_err3=0; % Power of users % Signal to noise ratio in db % Number of trials % Number of users.

snr=10^(snr_in_db(l)/10); sgma=sqrt(E(1)/(2*snr)); E_chip=E./Lc;

for i=1:N

% Transmitter

temp=rand(k,1)-0.5; data=sign(temp);

% Data

A=sqrt(E_chip');

% Amplitude calculation

trans_sig=PN*(A.*data);

% spreading of data

rec_sig=trans_sig+sgma*randn(size(trans_sig));% Channel noise (AWGN)

% Receiver

% Matched filter receiver

deci_var=PN(:,1)'*rec_sig; bo=sign(deci_var);

if bo~=data(1) num_of_err1=num_of_err1+1; end

%Deccorrelating detector deci_var=Rinv(1,:)*PN'*rec_sig; bo=sign(deci_var);

if bo~=data(1) num_of_err2=num_of_err2+1; end

%MMSE detector

Ao=inv(R+diag((sgma^2)*(1./(A.^2))));

deci_var=Ao(1,:)*PN'*rec_sig; bo=sign(deci_var);

if bo~=data(1) num_of_err3=num_of_err3+1; end

end ber1(l)=num_of_err1/N; ber2(l)=num_of_err2/N; ber3(l)=num_of_err3/N;

end

semilogy(snr_in_db,ber1,'r*-',snr_in_db,ber2,'bs-',snr_in_db,ber3,'go-'); grid on; legend('cmf','decorr','mmse'); xlabel('SNR in dB'); ylabel('BER'); title('Performance comparision of CMF,DECORR and MMSE(k=25):SNR vs BER'); % gold sequence function [gold]=GSEQ(con1,con2,icd) pn1=mseq(con1,icd); pn2=mseq(con2,icd); L=length(pn1); gold=zeros(L+2,L); gold(1,:)=pn1; gold(2,:)=pn2; gold(3,:)=xor(pn1,pn2); for i= 4:L+2 temp=[pn2([i-3+2:L]) pn2([1:i-3+1])]; gold(i,:)=xor(pn1,temp); end gold=(-1).^gold;

% m-sequence generation function [seq]=mseq(connections,icond) n=length(connections); N=2^n-1; seq=[icond zeros(1,(N-n))]; for l=(n+1):N temp1=seq(l-1)*connections(1); temp=0; for i=2:n temp=seq(l-i)*connections(i); temp1=xor(temp1,temp); end seq(l)=temp1;

temp1=0; temp=0; end

10

Performance comparision of CMF,DECORR and MMSE(k=25):SNR vs BER cmf decorr mmse

10

-1

10

-2

BER
10
-3

10

-4

10

-5

5 SNR in dB

10

15

Multiuser detection of DS-CDMA Systems %Performance comparision of CMF,DECORR and MMSE %Bit error rate VS SNR clear all; clc; [pnsq]=gseq([0 0 1 0 1],[1 0 1 1 1],[0 0 0 0 1]); % PN sequence - gold sequence E=ones(1,25); % Power of users snr_in_db=[0:1:31]; % Signal to noise ratio in db N=1e5; % Number of trials k=length(E); % Number of users.

Lc=size(pnsq,2); PN(:,1)=pnsq(1,:)'; PN(:,2:k)=pnsq(2:k,:)'; R=(PN'*PN)/31; Rinv=inv(R); for l=1:length(snr_in_db) disp('processing ....'); num_of_err1=0; num_of_err2=0; num_of_err3=0; snr=10^(snr_in_db(l)/10); sgma=sqrt(E(1)/(2*snr)); E_chip=E./Lc; for i=1:N % Transmitter temp=rand(k,1)-0.5; % Data data=sign(temp); A=sqrt(E_chip'); % Amplitude calculation trans_sig=PN*(A.*data); % spreading of data rec_sig=trans_sig+sgma*randn(size(trans_sig));% Channel noise (AWGN) % Receiver % Matched filter receiver deci_var=PN(:,1)'*rec_sig; bo=sign(deci_var); if bo~=data(1) num_of_err1=num_of_err1+1; end %Deccorrelating detector deci_var=Rinv(1,:)*PN'*rec_sig; bo=sign(deci_var); if bo~=data(1) num_of_err2=num_of_err2+1; end %MMSE detector Ao=inv(R+diag((sgma^2)*(1./(A.^2)))); deci_var=Ao(1,:)*PN'*rec_sig; bo=sign(deci_var); if bo~=data(1) num_of_err3=num_of_err3+1; end end ber1(l)=num_of_err1/N; ber2(l)=num_of_err2/N; ber3(l)=num_of_err3/N; end

semilogy(snr_in_db,ber1,'r*-',snr_in_db,ber2,'bs-',snr_in_db,ber3,'go-'); grid on; legend('cmf','decorr','mmse'); xlabel('SNR in dB'); ylabel('BER'); title('Performance comparison of CMF,DECORR and MMSE(k=25):SNR vs BER');

% gold sequence function [gold]=GSEQ(con1,con2,icd) pn1=mseq(con1,icd); pn2=mseq(con2,icd); L=length(pn1); gold=zeros(L+2,L); gold(1,:)=pn1; gold(2,:)=pn2; gold(3,:)=xor(pn1,pn2); for i= 4:L+2 temp=[pn2([i-3+2:L]) pn2([1:i-3+1])]; gold(i,:)=xor(pn1,temp); end gold=(-1).^gold;

% m-sequence generation function [seq]=mseq(connections,icond) n=length(connections); N=2^n-1; seq=[icond zeros(1,(N-n))]; for l=(n+1):N temp1=seq(l-1)*connections(1); temp=0; for i=2:n temp=seq(l-i)*connections(i); temp1=xor(temp1,temp); end seq(l)=temp1; temp1=0; temp=0; end

10

Performance comparision of CMF,DECORR and MMSE(k=25):SNR vs BER cmf decorr mmse

10

-1

10

-2

BER
10
-3

10

-4

10

-5

5 SNR in dB

10

15

You might also like