Saturday, June 6, 2015

Matlab Programmes

MATLAB


1)Sine Wave to Square Wave conversion using MATLAB
%60Hz sine wave to 20Hz square wave conversion
clear all;
close all;
clc;
fm=input('enter msg frequency fm=');
fr=input('enter mult frequency fr=');
fs=2000;
t=0:1/fs:0.2;
x=5*sin(2*pi*fm*t);
f=(fm-fr);
y=5*sin(2*pi*t*f);
for i=1:401
if(y(i)>=0)
    s(i)=+5
else
    s(i)=-5
end
end

subplot(311);
plot(x,'-','linewidth',1);

title('60Hz sine wave','fontsize',12);
xlabel('--->time in 0.5ms');
ylabel('--->Volts');
subplot(312);
plot(y,'g','linewidth',1.5);

title('20Hz sine wave','fontsize',12);
xlabel('--->time in 0.5ms');
ylabel('--->Volts');
subplot(313);
plot(s,'r','linewidth',1.5);

title('20Hz square wave','fontsize',12);
xlabel('--->time in 0.5ms');
ylabel('--->Volts'); 




RESULT:
                                                                                                                                                   -

2).Amplitude Modulation using MATLAB 
%Analog modulation
%fm=100;Am=5;
%fc=1000;Ac=5; 
clear all;
close all;
clc;
fm=input('enter msg signal frequency fm=');
Am=input('enter msg signal amplitude Am=');
fc=input('enter carrier signal frequency fc=');
Ac=input('enter carrier signal amplitude Ac=');
fs=100000;
t=0:1/fs:0.1;
m=Am*cos(2*pi*fm*t);
c=Ac*cos(2*pi*fc*t);
subplot(311);
plot(m);
title('input msg signal','fontsize',14);
xlabel('--->time in 10us','fontsize',11);
ylabel('--->Amplitude in Volts','fontsize',11);
subplot(312);
plot(c,'r');
title('input carrier signal','fontsize',14);
xlabel('--->time in 10us','fontsize',11);
ylabel('--->Amplitude in Volts','fontsize',11);
u=Am*0.1;
y=Ac*cos(2*pi*fc*t) + ((u*Ac)/2)*((cos(2*pi*(fc+fm)*t)) + (cos(2*pi*(fc-fm)*t)));
subplot(313);
plot(y);
title('Output AM signal','fontsize',14);
xlabel('--->time in 10us','fontsize',11);
ylabel('--->Amplitude in Volts','fontsize',11);


OUTPUT:
                                                                                                                                              -

3). Frequency Modulation  using MATLAB 
%Frequency modulation
%fm=100;Am=5;
%fc=3000; Ac=5;

clear all;
close all;
clc;
fm=input('enter msg signal frequency fm=');
Am=input('enter msg signal amplitude Am=');
fc=input('enter carrier signal frequency fc=');
Ac=input('enter carrier signal amplitude Ac=');
fs=100000;
t=0:1/fs:0.05;
m=Am*cos(2*pi*fm*t);
c=Ac*cos(2*pi*fc*t);
subplot(311);
plot(m);
title('input msg signal','fontsize',14);
xlabel('--->time in 10us','fontsize',11);
ylabel('--->Amplitude in Volts','fontsize',11);
subplot(312);
plot(c,'r');
title('input carrier signal','fontsize',14);
xlabel('--->time in 10us','fontsize',11);
ylabel('--->Amplitude in Volts','fontsize',11);
B=(500*Am)/fm; % kf=500 < fc 
s=Ac*cos(2*pi*fc*t + (B*sin(2*pi*fm*t)));
subplot(313);
plot(s);

title('output FM signal','fontsize',14);
xlabel('--->time in 10us','fontsize',11);
ylabel('--->Amplitude in Volts','fontsize',11);


OUTPUT: 
                                                                                                                                            -
4). Moving Average Filter using MATLAB
%moving average filter
clear all;
close all;
clc;
fs=500000;
fm=10000;
t=1:200;
x=5*cos(2*pi*(fm/fs)*t);
z=awgn(x,5); 
% adding White Gaussian noise to the input with S/N=5
plot(x,'g','linewidth',1.5);
hold on;
plot(z);
hold on;
for i=1:194;
y(i)=(z(i)+z(i+1)+z(i+2)+z(i+3)+z(i+4)+z(i+6))/6;
end
plot(y,'r','linewidth',1.5);
legend('Actual','Noisy','Filtered');
title('moving Average Filter','fontsize',12);
xlabel('---> time in 2us');
ylabel('---> volts'); 


OUTPUT: 
                                                                                                                                               -

5). ECG Filtering using MATLAB

 GoldStandard.mat 
 % fourth order bandpass filter
 % GoldStandard.mat is a preloaded database ECG signal
 % the original signal is first combined with gaussian noise
 % after noise added the signal will pass through 0.03Hz-1.1Hz bandpass
 % filter,is a 4th order filter

 clear all;
 close all;
 load('GoldStandard.mat')
 subplot(211);
 plot(signal);
 sound('GlodStandard.mat');
 title('the original ECG signal');
 necg=awgn(signal,1,'measured');
 b1=[1 0 -1];
 a1=[1 -1.9955735726528454        0.99558400680448189        ];
 bp1=0.049039538429966834       *filter(b1,a1,necg);
 b2=[1 0 -1];
 a2=[1 -1.8603604222618464        0.87003045759154718        ];
 bp2=0.049039538429966834      *filter(b2,a2,bp1);
 subplot(212);
 plot(bp2);
 title('after filter');
 figure
 subplot(211);
 plot(necg);
 title('after noise adding');
 subplot(212);
 plot(bp1);
 title('after 1st section filter');


RESULT:


                                                                                                                                        -

 6). Analog-to-Digital and Digital-to-Analog conversion using MATLAB                                            
         Here we add some Gaussian noise to the input sine wave and then will will convert that to digital signal. This digital signal sampled data will be used in Modelsim. In the modelsim we develop moving average filter using VHDL, this will filters the sampled data and writes into another file. Using the new updated sampled data we will regenerate the Analog signal.
  
                   

%ADC & DAC
clear all;
close all;
clc;
fs=500000;
 % taking sampling frequency as 500kHz
fm=10000; 
% input signal frequency 10kHz 

t=1:200;     % displaying 200 samples
x=5*cos(2*pi*(fm/fs)*t);
 %input sinusoidal signal
z=awgn(x,1);
% adding white Gaussian noise to the input signal with S/N=1
h=1:1000;
plot(t,x,'g','LineWidth',2); 
% plotting input signal
hold on;
plot(t,z,'r','linewidth',1.5); 
% plotting noisy signal
hold on;
stem(t,z);
hold on;     
Vd=-5:0.0390625:5; % step size =0.0390625, when n=8 bits
for i=1:256  
Vdelta(i)=(Vd(i)+Vd(i+1))/2; 
% Quantization levels
end

 i=0:255;
binary= dec2bin(i); 
% decimal to binary conversion
% Quantization of input signal

for i=1:200
    for j=1:256
        if(z(i)< Vd(1))
            z(i) = Vdelta(1);
        end
        if (z(i) > Vd(257))
            z(i) = Vdelta(256);
        end
        if(z(i) <= Vd(j+1) && z(i) >= Vd(j))
            z(i) = Vdelta(j);
        end
    end
end

% Encoding the Quantized data
for i=1:200
    for j=1:256
        if (z(i)==Vdelta(j))
            B_data(i,1:8) = binary(j,1:8);
        end
    end
end
% representing binary data in decimal
figure
for i=1:200
 B(i)=bin2dec(B_data(i,1:8));    
end


% First solution; writing Encoded data into ADC.txt file. The we will perfom
% Moving average filter operation in VHDL
f = fopen('ADC.txt''w');
for n = 1:200
    fprintf(f, '%s\n', B_data(n,1:8));
end
fclose(f);
subplot(221);
plot(x);
title('original sinwave','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in volts');
subplot(222);
plot(z);
title('noise signal','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in volts');
% After the moving avg filter the filtered data has been written to vhdl_out.txt file
f=fopen('vhdl_out.txt','r');
A = fscanf(f,'%g',[1 inf]);
fclose(f);

subplot(224)
plot(B)
title('signal with white gaussian noise','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in decimal');
%Digital to Analog conversion
for i=1:192
    for j=1:256
      if(A(i)== j )
          outpt(i)=Vdelta(j);
      end
    end
end

subplot(223);
plot(outpt);
title('filtered sine wave sinewave output','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in decimal');



RESULT:  
Output data files  


No comments:

Post a Comment