%file name: ask.m %Written by Dr. James S. Kang, Cal Poly Pomona. %Plot of ASK waveform and spectrum. %d = input data such as [1 1 0 0 1 0 1 0 1 1]. %fb = data rate in bps. %fc = carrier frequency. %Ac = Amplitude of the carrier. %fstart = start frequency for spectrum plot. %fend = end frequency for spectrum plot. %To run the program, try % >>ask([1 1 0 0 1 0 1 0 1 1],500,1000,1,0,4000) function[s] = ask(d,fb,fc,Ac,fstart,fend) N=size(d,2); %N = number of data bits. M=128; %M = number of samples per bit duration. tb=1/fb;tc=1/fc; Nc=floor(M*tc/tb); %Nc = number of samples per period of carrier. step=tb/M; %step = sampling interval. for j = 1:N if d(j) == 1 for i = 1:M m((j-1)*M+i)=1; s((j-1)*M+i)=Ac*cos(2*pi*(i-1)/Nc); end else for i = 1:M s((j-1)*M+i)=0; m((j-1)*M+i)=0; end end end for k=1:M*N t(k)=(k-1)*step; end subplot(2,1,1) plot(t,m) grid %xlabel('Time') ylabel('Amplitude') title('Input Waveform') subplot(2,1,2) plot(t,s) grid xlabel('Time') ylabel('Amplitude') title('ASK Waveform') % %Spectrum of ASK % M1=64; %M1 = number of points per lobe. fstep=fb/M1; %fstep = freq. step. Nf=floor((fend-fstart)/fstep); %Nf = total number of freq. points computed. for i = 1:Nf f(i)=(i-1)*fstep+fstart; if f(i) == fc S(i)=Ac^2*tb/8; else S(i)=(Ac^2*tb/8)*(sin(pi*(f(i)-fc)*tb)/(pi*(f(i)-fc)*tb))^2; end end S(floor(fc/fstep)+1)=S(floor(fc/fstep)+1)+Ac^2/8 for i = 1:Nf dBS(i) = 10*log(S(i)); if dBS(i) < -200 dBS(i)=-200; end end figure subplot(2,1,1) plot(f,S) grid %xlabel('Frequency') ylabel('Magnitude') title('ASK Spectrum (Linear)') subplot(2,1,2) plot(f,dBS) grid xlabel('Frequency') ylabel('Magnitude') title('ASK Spectrum (dB)') end