2009
11.15

AM and DSB-SC Modulation and Demodulation of a Periodic Square Wave (Matlab)

We once had a homework way back when decided to share it. I edited this script which is in Matlab. I hope you like it. It simply is an analysis of AM and DSB-SC Modulation and Demodulation of a Periodic Square Wave.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
%Amplitude Modulation with a periodic sqare wave and its spectrum analysis
%Show the time domain and frquency domain representation of DSB-AM and
%DSB-SC modulations
%By : John Roach – 6 March 2009
%visit my site at http://johnroach.info
N = 1024; %N point FFT N>fc to avoid freq domain aliasing
fs = 4096; % Sample frequency
t = (0:N-1)/fs;
fc = 600; %Carrier Frequency
fm2 = 80; %Message Frequency
Ec = 20; %Carrier Amplitude
Em2 = 5; %Messagae Amplitude
% Try changing the message and carrier amplitudes to see the effect in
% DSB-AM modulation
%———Double SideBand Full Carrier Modulation (DSB-FC(AM))
A = Ec + Em2*square(2*pi*fm2*t);%Envelope/eliminate the carrier amplitude
m = A.*sin(2*pi*fc*t); %to convert DSB-AM to DSB-SC
Mf = 2/N*abs(fft(m,N));
f = fs * (0 : N/2) / N;%Since the fft result is symmetrical, only the
%positive half is sufficient for spectral representation
close all;
figure(’Name’,'Time/Fequency domain representations of DSB-AM signals’);
subplot(2,1,1); %Time domain plot
plot(t(1:N/2),m(1:N/2),t(1:N/2),A(1:N/2),’r',t(1:N/2),-A(1:N/2),’r');
title(’Time Domain Representation’);
xlabel(’Time’); ylabel(’Modulated signal’);
subplot(2,1,2); %Frequency Domain Plot
plot(f(1:256),Mf(1:256));
title(’Frequency Domain Representation’);
xlabel(’Frequency (Hz)); ylabel(’Spectral Magnitude’);
%———-Double SideBand Suppressed Carrier DSB-SC———-
A = Em2*square(2*pi*fm2*t) ; %Envelope/eliminate the carrier amplitude
m = A.*sin(2*pi*fc*t); %to convert DSB-AM to DSB-SC
Mf = 2/N*abs(fft(m,N));
figure(’Name’,'Time/Fequency domain representations of DSB-SC signals’);
subplot(2,1,1); %Time domain plot
plot(t(1:N/2),m(1:N/2),t(1:N/2),A(1:N/2),’r',t(1:N/2),-A(1:N/2),’r');
title(’Time Domain Representation’);
xlabel(’Time’); ylabel(’Modulated signal’);
subplot(2,1,2); %Frequency Domain Plot
plot(f(1:256),Mf(1:256));
title(’Frequency Domain Representation’);
xlabel(’Frequency (Hz)); ylabel(’Spectral Magnitude’);
text(15,60,’Carrier’);
%——————————————————————–

Related posts:

  1. Amplitude Modulation of a cosine message

4 comments so far

Add Your Comment
  1. write a matlab program that show double side band suppress carrier AM (dsbsc-AM) with carrier frequency fc=100 hz and modulating frequency fm=2hz. than plot AM signal vs time and spectrum vs frequency.

    help me to give the solution of this exercise.
    thnks bro

    • Below you can find the answer to your problem just edit as you wish.
      fc is your carrier freq while your fm is your message freq
      The below example has both modulation and demodulation
      of the message. Remove the comments to see only the modulation of the message.
      If you have any questions feel free to ask from here.

      Good Luck

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      
      function DSB_SC
       
      N=2000;
      F=(-N/2:N/2-1)/N;
       
      fc=0.25;
      Ac=1;
       
      n=0:1:256;
       
      c=Ac*cos(2*pi*n*fc);
       
      %subplot(2,2,1)
      %plot(F, fftshift(abs(fft(c,N))));
      %title('Carrier Wave at frequency-domain');
      %xlabel('frequency'), ylabel('amplitude');
      %grid on;
       
      fm=0.01;
      Am=1;
      m=Am*cos(2*pi*fm*n);
      %subplot(2,2,2)
      %plot(F, fftshift(abs(fft(m,N))));
      %title('Message at frequency-domain');
      %xlabel('frequency'), ylabel('amplitude');
      %grid on;
       
      s=m.*c;
      % plot(F, fftshift(abs(fft(s,N))));
      % title('s(n)');
      % xlabel('frequency'), ylabel('amplitude');
      % grid on;
       
      fcl=0.27;
      x=s.*(cos(2*pi*fcl*n));
      % 
      % plot(F, fftshift(abs(fft(x,N))));
      % title('x(n) = s(n) cl(n)');
      % xlabel('frequency'), ylabel('amplitude');
      % grid on;
       
      b = fir1(8,0.3);
      w = conv(x,b);
      plot(F, fftshift(abs(fft(w,N))));
      title('v(n)');
      xlabel('frequency'), ylabel('amplitude');
      grid on;
  2. Can you write a code that does the DSB-SC Modulation and demodulation of a pre-recored .wav file with sample frequency 11025 to play in two channels centered at 20 KHz and
    40 KHz? Thanks,

    • Dear Futja,

      I thank you for answering to my post. It seems this subject “AM and DSB-SC Modulation” is so far the favorite post among my readers. I will keep this in mind in future postings.

      The code you want will mostly be the same however you will need to read the wav file through MATLAB. For this you will need to use ;

      y = wavread(filename)

      After that things go fun. You can try to simply copy and paste my DSB-SC code. However it may not work. I really don’t know since I never really worked with wav files. However I should try.

      If you were waiting for a full answer I am quite sorry but TANSTAAFL.