home *** CD-ROM | disk | FTP | other *** search
- function y=sinw(npoints, f0, df, ph0)
- % y=sinw(num_of_points, num_of_cycles, delta_cycles, initial_phase)
- % create frequency hopping sine wave composed of segements of linear
- % FM sine waves
- %
- % num_of_points - number of points in each segment
- % f0 - inital frequency
- % df - frequency deviation
- % ph0 - initial phase
- %
- % Example: sinw(256, 2, 3) generates a linear FM signal
- %
-
- % S.Halevy 7/31/92
- % Copyright (c) 1992 by the MathWizards
-
- if nargin < 1
- error('insufficient arguments')
- end
- npoints=npoints(:); % make sure it is a col vector
- [mp,np]=size(npoints);
-
- if nargin < 4
- ph0=zeros(mp,np); % zero initial phase - radians
- else
- ph0=ph0(:);
- [m0,n0]=size(ph0);
- if m0 ~= mp | n0 ~= np
- error('initial phase - dimension error')
- end
- end
-
- if nargin < 3
- df=zeros(mp,np); % no frequency deviation
- else
- df=df(:);
- [m0,n0]=size(df);
- if m0 ~= mp | n0 ~= np
- error('frequency deviation - dimension error')
- end
- end
-
- if nargin < 2
- f0=ones(mp,np); % single cycle
- else
- f0=f0(:);
- [m0,n0]=size(f0);
- if m0 ~= mp | n0 ~= np
- error('cycles - dimension error')
- end
- end
-
- y=[];
- pi2=atan(1.0)*8;
- for i1=1:mp
- n = npoints(i1);
- t = (0:(n-1))/n; % time
- ph1 = (f0(i1)+0.5*df(i1)*t).*t; % phase
- ph1 -= floor(ph1); % reduce roundoff errors
-
- y=[y sin(pi2*ph1+ph0(i1))];
- end
-