mseq.m

来自「国外大学的同志作出来的好程序」· M 代码 · 共 51 行

M
51
字号
function [ s ] = mseq( m )
% generates an m-sequence, from M. Porter.
%
% fmin       = min frequency
% fmax       = max frequency
% T          = duration of time-series
% samplerate = samples per second
% Michael B. Porter April 2000
% formulas from Proakis, Digital Communications

if ( m < 2 | m > 15 | m ~= fix( m ) ) return; end
% set up the coefficients ( used in the recursion: m_l = \sum c_l m_l )
switch m
case  2, c = [ 1 1 ];
case  3, c = [ 1 0 1 ];
case  4, c = [ 1 0 0 1 ];
case  5, c = [ 1 0 0 1 0 ];
case  6, c = [ 1 0 0 0 0 1 ];
case  7, c = [ 1 0 0 0 0 0 1 ];
case  8, c = [ 1 0 0 0 1 1 1 0 ];
case  9, c = [ 1 0 0 0 0 1 0 0 0 ];
case 10, c = [ 1 0 0 0 0 0 0 1 0 0 ];
case 11, c = [ 1 0 0 0 0 0 0 0 0 1 0];
case 12, c = [ 1 0 0 0 0 0 1 0 1 0 0 1];
case 13, c = [ 1 0 0 0 0 0 0 0 0 1 1 0 1];
case 14, c = [ 1 0 0 0 1 0 0 0 1 0 0 0 0 1 ];
case 15, c = [ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ];
end

length = 2^m - 1;
%successive shifts with feedback following Proakis p. 433
seed = [ 1 zeros( 1, m - 1 ) ];	% all zero seed except for one
for ii = 1 : length
  out( 1 : m - 1 ) = seed( 2 : m );
  out( m ) = mod( c * seed' , 2 );	% addition mod 2
  seed = out;
  s( ii ) = out( 1 );
end

% convert to a +/- sequence
s = 2*s-1;
% check autocorrelation properties
%shat = fft( s );
%scorr = real( ifft( shat .* conj( shat ) ) );
%plot( scorr )
%Make it a column vector
if size(s, 2),
    s=s.';
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?