rcosine.m
上传用户:loeagle
上传日期:2013-03-02
资源大小:1236k
文件大小:3k
- function [num, den] = rcosine(Fd, Fs, type_flag, R, Delay, tol)
- %RCOSINE Design raised cosine filter.
- % NUM = RCOSINE(Fd, Fs) designs an FIR raised cosine filter to filter a
- % digital signal with the digital transfer sampling frequency Fd. The
- % filter sampling frequency is Fs. Fs/Fd must be a positive integer.
- % The default rolloff factor is 0.5, and the default filter delay
- % is 3/Fd seconds.
- %
- % [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG) gives specific filter design
- % instructions. TYPE_FLAG can be 'iir', 'sqrt', or a combination
- % such as 'iir/sqrt'. The order of the arguments is not important.
- % 'fir' Design FIR raised cosine filter (default).
- % 'iir' Design an IIR approximation to the FIR raised cosine filter.
- % 'normal' Design the regular raised cosine filter (default).
- % 'sqrt' Design square root raised cosine filter.
- % 'default' Use the default (FIR, Normal raised cosine filter).
- %
- % [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R) specifies the
- % rolloff factor in R, which is a real number in the range [0, 1].
- %
- % [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R, DELAY) specifies the filter
- % delay in DELAY, which must be a positive integer. DELAY/Fd is the
- % filter delay in seconds.
- %
- % [NUM, DEN] = RCOSINE(Fd, Fs, TYPE_FLAG, R, DELAY, TOL) specifies the
- % tolerance in TOL for IIR filter design. The default value is 0.01.
- %
- % When the designed filter is an FIR filter, the output in DEN is 1.
- %
- % See also RCOSFLT, RCOSIIR, RCOSFIR, RCOSDEMO.
- % Copyright 1996-2001 The MathWorks, Inc.
- % $Revision: 1.14 $
- %assigned default value
- if nargin < 6
- tol = .01;
- end;
- %default delay
- if nargin < 5
- Delay = 3;
- elseif Delay <= 0
- error('DELAY must be a positive integer in RCOSINE.')
- elseif ceil(Delay) ~= Delay
- error('DELAY in RCOSINE must be an integer.')
- end;
- %default rolloff factor
- if nargin < 4
- R = .5;
- elseif (R < 0) | (R > 1) | ~isreal(R)
- error('The Rolloff factor, R, in RCOSINE must be a real number in the range, [0, 1].')
- end;
- %default type_flag
- if nargin < 3
- type_flag = 'default';
- elseif ~isstr(type_flag) & ~isempty(type_flag)
- error('TYPE_FLAG in RCOSINE must be a string.');
- end;
- %not enough input varible.
- if nargin < 2
- error('Not enough input variables for RCOSINE.')
- end;
- type_flag = lower(type_flag);
- %filter type.
- if findstr(type_flag, 'sqrt')
- filt_type = 'sqrt';
- else
- filt_type = 'normal';
- end;
- % check the oversampling rate
- FsDFd = Fs/Fd;
- if (ceil(FsDFd) ~= FsDFd) | (FsDFd <= 1) | ~isreal(FsDFd)
- error('Fs/Fd in RCOSINE must be an integer greater than 1.')
- end;
- %design the filter.
- if findstr(type_flag, 'iir')
- [num, den] = rcosiir(R, Delay, FsDFd, 1/Fd, tol, filt_type);
- else
- num = rcosfir(R, Delay, FsDFd, 1/Fd, filt_type);
- den = 1;
- end;
- %end of RCOSINE.