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

matlab例程

开发平台:

Matlab

  1. % Design filter by specifying delay in units and
  2. % looking at mag and phase response
  3. % Good default values for fft_size = 128 and num_carriers = 32
  4. delay_1 = 6; % 6
  5. attenuation_1 = 0.35; % 0.35
  6. delay_2 = 10; % 10
  7. attenuation_2 = 0.30; % 0.30
  8. num = [1, zeros(1, delay_1-1), attenuation_1, zeros(1, delay_2-delay_1-1), attenuation_2]
  9. [H, W] = freqz(num, 1, 512); % compute frequency response
  10. mag = 20*log10(abs(H)); % magnitude in dB
  11. phase = angle(H) * 180/pi; % phase angle in degrees
  12. figure(9), clf
  13. subplot(211), plot(W/(2*pi),mag)
  14. title('Magnitude response of multipath channel')
  15. xlabel('Digital Frequency'), ylabel('Magnitude in dB')
  16. subplot(212), plot(W/(2*pi),phase)
  17. title('Phase response of multipath channel')
  18. xlabel('Digital Frequency'), ylabel('Phase in Degrees')
  19. break
  20. % Design filter using MATLAB command 'fir2'
  21. nn = 40; % order of filter
  22. f = [0, 0.212, 0.253, 0.293, 0.5];
  23. m =[1, 1, 0.5, 1, 1];
  24. num = fir2(nn, 2*f, m);
  25. den = 1;
  26. [H, W] = freqz(num, den, 256); % Compute freq response
  27. mag = 20*log10(abs(H)); % Get mag in dB
  28. phase = angle(H)*180/pi; % Get phase in degrees
  29. clf
  30. subplot(211), plot(W/(2*pi),mag)
  31. subplot(212), plot(W/(2*pi),phase)
  32. break
  33. % Design filter using MATLAB command 'fir1'
  34. % These coeffs work well for OFDM vs. QAM!!!
  35. % nn = 4; % order of filter
  36. % wl = 0.134; % low cutoff of stopband
  37. % wh = 0.378; % high cutoff of stopband
  38. % nn = 4; % order of filter
  39. % wl = 0.195; % low cutoff of stopband
  40. % wh = 0.309; % high cutoff of stopband
  41. nn = 8; % order of filter
  42. wl = 0.134; % low cutoff of stopband
  43. wh = 0.378; % high cutoff of stopband
  44. num = fir1(nn, 2*[wl, wh], 'stop');
  45. den = 1;
  46. [H, W] = freqz(num, den, 256); % Compute freq response
  47. mag = 20*log10(abs(H)); % Get mag in dB
  48. phase = angle(H)*180/pi; % Get phase in degrees
  49. clf
  50. subplot(211), plot(W,mag), hold on, plot(wl*2*pi,0,'o'), plot(wh*2*pi,0,'o')
  51. subplot(212), plot(W,phase), hold on, plot(wl*2*pi,0,'o'), plot(wh*2*pi,0,'o')
  52. hold off
  53. break
  54. % Design filter by specifying delay in units and looking at mag and phase response
  55. n = 512;
  56. d1 =4;
  57. a1 = 0.2;
  58. d2 = 5;
  59. a2 = 0.3;
  60. num = [1, zeros(1, d1-1), a1, zeros(1, d2-d1-1), a2]
  61. den = [1];
  62. [H, W] = freqz(num, den, n);
  63. % F = 0:.1:pi;
  64. % H = freqz(num, den, F*180/pi, 11025);
  65. mag = 20*log10(abs(H));
  66. % phase = angle(H * 180/pi);
  67. phase = angle(H);
  68. clf
  69. subplot(211), plot(W,mag), hold on, plot(0.17*pi,0,'o'), plot(0.34*pi,0,'o')
  70. subplot(212), plot(W,phase), hold on, plot(pi/2,0,'o')
  71. hold off
  72. break
  73. % Design filter by specifying mag response at particular frequencies
  74. n = 2;
  75. f = [0, 0.25, 0.5];
  76. mag = [1, .05, 1];
  77. [num, den] = yulewalk(n,2*f,mag);
  78. [H, W] = freqz(num, den);
  79. mag = 20*log10(abs(H));
  80. phase = angle(H * 180/pi);
  81. clf
  82. subplot(211), plot(W,mag)
  83. subplot(212), plot(W,phase)