imagetx.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:4k
源码类别:

matlab例程

开发平台:

Matlab

  1. %IMAGETX This script produces a wav file of a COFDM frame suitable for
  2. % a playing as a COFDM signal generator.
  3. % It generates a signal which consists of a number of frames, each
  4. % separated by a frame guard time of one symbol period. The signal is
  5. % zero during this period.
  6. % The Data used in the frames sent is identical (i.e. all frames have the
  7. % same data).
  8. %
  9. % Ths data used is from a bmp image.
  10. %
  11. % Copyright (c) July 1997 Eric Lawrey
  12. %================
  13. % Modified:
  14. % 29/7/97 11:00am cofdmwav.m
  15. % Modified simtxrx.m so that it would just generate the output of the
  16. % COFDM transmitter, and store the result in a wav file.
  17. %
  18. % 29/7/97 11:30am cofdmwav.m
  19. % Changed it so that a wav file of multiple frames could be generated.
  20. % 31/7/97 8:44am rdimage.m
  21. % Modified cofdmwav.m so that it now uses a bmp file as it data source
  22. %
  23. % 3/8/97 2:00pm imagetx.m
  24. % Added the option of compressing the contrast of the picture
  25. % to help prevent roll over of intensity when sending 8bits/word.
  26. % Also added data averaging, allowing duplicates of data to
  27. % be sent and recombined to reduce the phase error. This works,
  28. % except for it giving errors for black pixels.
  29. %
  30. % 12/8/97 10:30pm imagetx.m
  31. % Made many major changes to the software so that multiple data
  32. % types can be transmitted. Including random data, pictures, and
  33. % general binary files. Also a common setting script is now used
  34. % for both the transmitter and receiver. This is settings.m.
  35. %
  36. % 17/8/97 2:00 pm imagetx.m
  37. % Moved the calculation of the carriers to use into the settings
  38. % script.
  39. %======================================================
  40. % External functions required to run this script:
  41. % settings.m
  42. % rddatatx.m
  43. % channel.m
  44. % wavwr.m (from the Matlab web site)
  45. % transmit.m
  46. % rdimage.m
  47. % rddatatx.m (Script to read in the data to transmit)
  48. clear all;
  49. flops(0);
  50. tic; %Measure the time it takes to run the simulation
  51. settings %Initialize all the setting required
  52. rddatatx %read in the data to transmit. This could be random data, an image
  53. %or a general binary file.
  54. FrameSig = zeros(1,FrameGuard); %Generate the blank period between frames
  55. TimeSignal = [];
  56. if SymbPerFrame ~= 0,
  57. f = 0.25; %Frequency 0.5 = nyquist rate
  58. N = (ifftsize+guardtime)*8;
  59. Header = sin(0:f*2*pi:f*2*pi*(N-1));
  60. f = 0.117;
  61. Header = Header + sin(0:f*2*pi:f*2*pi*(N-1));
  62. TimeSignal = [];
  63. NumCarr = length(carriers);
  64. NoDataWords = length(Datatx)*DataAvg;
  65. numbsymb = ceil(NoDataWords/NumCarr);
  66. if numbsymb > SymbPerFrame,
  67. Dataleft = Datatx;
  68. while length(Dataleft) > 1,
  69. AmountData = min(SymbPerFrame*NumCarr/...
  70. DataAvg,length(Dataleft));
  71. FrameData = Dataleft(1:AmountData);
  72. Dataleft = Dataleft(AmountData+1:length(Dataleft));
  73. %===========================================================
  74. %Generate one frame of the COFDM signal from data to be sent
  75. %===========================================================
  76. BaseSignal = transmit(FrameData,ifftsize,carriers,...
  77.     wordsize,guardtype,guardtime,windowtype,DataAvg);
  78. TimeSignal = [TimeSignal FrameSig BaseSignal];
  79. end
  80. SigPow = std(BaseSignal);
  81. TimeSignal = [SigPow*Header TimeSignal FrameSig SigPow*Header];
  82. else
  83. BaseSignal = transmit(Datatx,ifftsize,carriers,...
  84.   wordsize,guardtype,guardtime,windowtype,DataAvg);
  85. SigPow = std(BaseSignal);
  86. Header = SigPow*Header;
  87. TimeSignal = [Header FrameSig BaseSignal FrameSig Header];
  88. end
  89. else
  90. BaseSignal = transmit(Datatx,ifftsize,carriers,...
  91.   wordsize,guardtype,guardtime,windowtype,DataAvg);
  92. %Concatenate all the frames together
  93. for k = 1:NoFrames,
  94. TimeSignal = [TimeSignal BaseSignal FrameSig];
  95. end
  96. end
  97. Multi = zeros(Delay,1);
  98. Multi(1) = 1;
  99. Multi(Delay) = MultiMag;
  100. TimeSignal = channel(TimeSignal, Comp, SNR, Multi);
  101. %==============================
  102. %Save the signal as a .WAV file
  103. %==============================
  104. wavwr(TimeSignal,Fs,res,1,txwavfile);
  105. %======================
  106. % Display some results
  107. %======================
  108. MaxSig = max(TimeSignal(N:length(TimeSignal)-N));
  109. RMSSig = std(TimeSignal(N:length(TimeSignal)-N));
  110. disp(['Max Signal Level: ' num2str(MaxSig)]);
  111. disp(['RMS Signal Level: ' num2str(RMSSig)]);
  112. disp(['Peak to RMS power ratio : ' num2str(20*log10(MaxSig/RMSSig)) 'dB']);
  113. disp(['Total Time: ' num2str(toc) 'sec']);
  114. disp(['Total FLOPS: ' num2str(flops)]);
  115. disp(['Process Speed : ' num2str(flops/toc) ' flops/sec']);