Am.m
上传用户:loeagle
上传日期:2013-03-02
资源大小:1236k
文件大小:3k
源码类别:

通讯编程文档

开发平台:

Matlab

  1. % am.m
  2. % Matlab demonstration script for DSB-AM modulation. The message signal
  3. % is +1 for 0 < t < t0/3, -2 for t0/3 < t < 2t0/3 and zero otherwise.
  4. echo on
  5. t0=.15;                               % signal duration
  6. ts=0.001;                             % sampling interval
  7. fc=250;                               % carrier frequency
  8. snr=10;                               % SNR in dB (logarithmic)
  9. a=0.85;                               % Modulation index
  10. fs=1/ts;                              % sampling frequency
  11. t=[0:ts:t0];                          % time vector
  12. df=0.2;                               % required frequency resolution
  13. snr_lin=10^(snr/10);                  % SNR
  14. % message signal
  15. m=[ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)];
  16. c=cos(2*pi*fc.*t);                    % carrier signal
  17. m_n=m/max(abs(m));                    % normalized message signal
  18. [M,m,df1]=fftseq(m,ts,df);            % Fourier transform 
  19. M=M/fs;                               % scaling
  20. f=[0:df1:df1*(length(m)-1)]-fs/2;     % frequency vector
  21. u=(1+a*m_n).*c;                       % modulated signal
  22. [U,u,df1]=fftseq(u,ts,df);            % Fourier transform 
  23. U=U/fs;                               % scaling
  24. signal_power=spower(u(1:length(t)));   % power in modulated signal
  25. % power in normalized message
  26. pmn=spower(m(1:length(t)))/(max(abs(m)))^2;
  27. eta=(a^2*pmn)/(1+a^2*pmn);            % modulation efficiency
  28. noise_power=eta*signal_power/snr_lin; % noise power
  29. noise_std=sqrt(noise_power);          % noise standard deviation
  30. noise=noise_std*randn(1,length(u));   % generate noise
  31. r=u+noise;                            % add noise to the modulated signal
  32. [R,r,df1]=fftseq(r,ts,df);            % Fourier transform 
  33. R=R/fs;                               % scaling
  34. pause  % Press a key to show the modulated signal power
  35. signal_power
  36. pause  % Press a key to show the modulation efficiency
  37. eta
  38. pause  % Press any key to see a plot of the message
  39. subplot(2,2,1)
  40. plot(t,m(1:length(t)))
  41. axis([0 0.15 -2.1 2.1])
  42. xlabel('Time')
  43. title('The message signal')
  44. pause
  45. pause  % Press any key to see a plot of the carrier
  46. subplot(2,2,2)
  47. plot(t,c(1:length(t)))
  48. axis([0 0.15 -2.1 2.1])
  49. xlabel('Time')
  50. title('The carrier') 
  51. pause  % Press any key to see a plot of the modulated signal
  52. subplot(2,2,3)
  53. plot(t,u(1:length(t)))
  54. axis([0 0.15 -2.1 2.1])
  55. xlabel('Time')
  56. title('The modulated signal')
  57. pause   % Press any key to see a plots of the magnitude of the message and the
  58. % modulated signal in the frequency domain.
  59. subplot(2,1,1)
  60. plot(f,abs(fftshift(M))) 
  61. xlabel('Frequency')
  62. title('Spectrum of the message signal')
  63. subplot(2,1,2)
  64. plot(f,abs(fftshift(U))) 
  65. title('Spectrum of the modulated signal')
  66. xlabel('Frequency')
  67. pause  % Press a key to see a noise sample
  68. subplot(2,1,1)
  69. plot(t,noise(1:length(t))) 
  70. title('noise sample') 
  71. xlabel('Time')
  72. pause  % Press a key to see the modulated signal and noise
  73. subplot(2,1,2)
  74. plot(t,r(1:length(t))) 
  75. title('Signal and noise')
  76. xlabel('Time')
  77. pause  % Press a key to see the modulated signal and noise in freq. domain
  78. subplot(2,1,1)
  79. plot(f,abs(fftshift(U))) 
  80. title('Signal spectrum')
  81. xlabel('Frequency')
  82. subplot(2,1,2)
  83. plot(f,abs(fftshift(R))) 
  84. title('Signal and noise spectrum')
  85. xlabel('Frequency')