matched_filter.m
上传用户:szahd2008
上传日期:2020-09-25
资源大小:1275k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. function [y] = matched_filter(nscat,taup,b,rrec,scat_range,scat_rcs,winid)
  2. eps = 1.0e-16;
  3. % time bandwidth product
  4. time_B_product = b * taup;
  5. if(time_B_product < 5 )
  6.     fprintf('************ Time Bandwidth product is TOO SMALL ***************')
  7.     fprintf('n Change b and or taup')
  8.   return
  9. end
  10. % speed of light
  11. c = 3.e8; 
  12. % number of samples
  13. n = fix(2 * taup * b);
  14. % initialize input, output and replica vectors
  15. x(nscat,1:n) = 0.;
  16. y(1:n) = 0.;
  17. replica(1:n) = 0.;
  18. % determine proper window
  19. if( winid == 0.)
  20.    win(1:n) = 1.;
  21. end
  22. if(winid == 1.);
  23.     win = hamming(n)';
  24. end
  25. if( winid == 2.)
  26.     win = kaiser(n,pi)';
  27. end
  28. if(winid == 3.)
  29.     win = chebwin(n,60)';
  30. end
  31. % check to ensure that scatterers are within recieve window
  32. index = find(scat_range > rrec);
  33. if (index ~= 0)
  34.     'Error. Receive window is too large; or scatterers fall outside window'
  35.   return
  36. end
  37. % calculate sampling interval
  38. t = linspace(-taup/2,taup/2,n);
  39. replica = exp(i * pi * (b/taup) .* t.^2);
  40. figure(1)
  41. subplot(2,1,1)
  42. plot(t,real(replica))
  43. ylabel('Real (part) of replica')
  44. xlabel('time in seconds')
  45. grid
  46. subplot(2,1,2)
  47. sampling_interval = 1 / 2.5 /b;
  48. freqlimit = 0.5/ sampling_interval;
  49. freq = linspace(-freqlimit,freqlimit,n);
  50. plot(freq,fftshift(abs(fft(replica))));
  51. ylabel('Spectrum of replica')
  52. xlabel('Frequency in Hz')
  53. grid
  54.  for j = 1:1:nscat
  55.     range = scat_range(j) ;;
  56.     x(j,:) = scat_rcs(j) .* exp(i * pi * (b/taup) .* (t +(2*range/c)).^2) ;
  57.     y = x(j,:)  + y;
  58. end
  59. figure(2) 
  60.  y = y .* win;
  61. plot(t,real(y),'k')
  62. xlabel ('Relative delay - seconds')
  63. ylabel ('Uncompressed echo')
  64. grid
  65. out =xcorr(replica, y);
  66. out = out ./ n;
  67. s = taup * c /2;
  68. Npoints = ceil(rrec * n /s);
  69. dist =linspace(0, rrec, Npoints);
  70. delr = c/2/b;
  71. figure(3)
  72. plot(dist,abs(out(n:n+Npoints-1)),'k')
  73. xlabel ('Target relative position in meters')
  74. ylabel ('Compressed echo')
  75. grid