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

通讯编程文档

开发平台:

Matlab

  1. function [num, den] = rcosine(Fd, Fs, type_flag, R, Delay, tol)
  2. %RCOSINE Design raised cosine filter.
  3. %   NUM = RCOSINE(Fd, Fs) designs an FIR raised cosine filter to filter a
  4. %   digital signal with the digital transfer sampling frequency Fd. The
  5. %   filter sampling frequency is Fs. Fs/Fd must be a positive integer.
  6. % The default rolloff factor is 0.5, and the default filter delay
  7. % is 3/Fd seconds.
  8. %
  9. %   [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG) gives specific filter design
  10. %   instructions. TYPE_FLAG can be 'iir', 'sqrt', or a combination
  11. %   such as 'iir/sqrt'. The order of the arguments is not important.
  12. %     'fir'    Design FIR raised cosine filter (default).
  13. %     'iir'    Design an IIR approximation to the FIR raised cosine filter.
  14. %     'normal' Design the regular raised cosine filter (default).
  15. %     'sqrt'   Design square root raised cosine filter.
  16. %     'default' Use the default (FIR, Normal raised cosine filter).
  17. %
  18. %   [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R) specifies the
  19. %   rolloff factor in R, which is a real number in the range [0, 1].
  20. %
  21. %   [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R, DELAY) specifies the filter
  22. % delay in DELAY, which must be a positive integer. DELAY/Fd is the
  23. % filter delay in seconds.
  24. %
  25. %   [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R, DELAY, TOL) specifies the
  26. %   tolerance in TOL for IIR filter design. The default value is 0.01.
  27. %
  28. %   When the designed filter is an FIR filter, the output in DEN is 1.
  29. %
  30. %   See also RCOSFLT, RCOSIIR, RCOSFIR, RCOSDEMO.
  31. %   Copyright 1996-2001 The MathWorks, Inc.
  32. %   $Revision: 1.14 $
  33. %assigned default value
  34. if nargin < 6
  35.     tol = .01;
  36. end;
  37. %default delay
  38. if nargin < 5
  39.     Delay = 3;
  40. elseif Delay <= 0
  41.     error('DELAY must be a positive integer in RCOSINE.')
  42. elseif ceil(Delay) ~= Delay
  43.     error('DELAY in RCOSINE must be an integer.')
  44. end;
  45. %default rolloff factor
  46. if nargin < 4
  47.     R = .5;
  48. elseif (R < 0) | (R > 1) | ~isreal(R)
  49.     error('The Rolloff factor, R, in RCOSINE must be a real number in the range, [0, 1].')
  50. end;
  51. %default type_flag
  52. if nargin < 3
  53.     type_flag = 'default';
  54. elseif ~isstr(type_flag) & ~isempty(type_flag)
  55.     error('TYPE_FLAG in RCOSINE must be a string.');
  56. end;
  57. %not enough input varible.
  58. if nargin < 2
  59.     error('Not enough input variables for RCOSINE.')
  60. end;
  61. type_flag = lower(type_flag);
  62. %filter type.
  63. if findstr(type_flag, 'sqrt')
  64.     filt_type = 'sqrt';
  65. else
  66.     filt_type = 'normal';
  67. end;
  68. % check the oversampling rate
  69. FsDFd = Fs/Fd;
  70. if (ceil(FsDFd) ~= FsDFd) | (FsDFd <= 1) | ~isreal(FsDFd)
  71.     error('Fs/Fd in RCOSINE must be an integer greater than 1.')
  72. end;
  73. %design the filter.
  74. if findstr(type_flag, 'iir')
  75.     [num, den] = rcosiir(R, Delay, FsDFd, 1/Fd, tol, filt_type);
  76. else
  77.     num = rcosfir(R, Delay, FsDFd, 1/Fd, filt_type);
  78.     den = 1;
  79. end;
  80. %end of RCOSINE.