⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpsscal2.m

📁 多频道功率谱计算程序
💻 M
字号:
 function [E,V] = dpsscal2(N,W) 
% DPCSSCAL2 - Slepian Sequence calculation for short sequences 
%  Syntax:  [E,V] = dpsscal2(N,W); 
% 
%  Dpsscal2 calculates discrete prolate spheroidal sequences for the 
%  parameters N and W. The tridiagonal method of Slepian is used. 
%  Note that W is of form 2, 5/2, 3, 7/2, 4, ... and not 2/N, 5/2N, 3/N, etc. 
% 
%  DPSSCAL2 is very inefficient computationally for large N. If N is greater 
%  than about 200 or so (this depends on the platform), DPSSCALC should 
%  be used instead.  
% 
%  Returns: 
%              E: matrix of dpss (N by 2W) 
%              V: eigenvalue vector (2W) 
% 
% See Percival and Walden, Chapter 8. 
% 
% Written by Eric Breitenberger, version date 2/6/95. 
% Please send comments and suggestions to eric@gi.alaska.edu 
% 
 
W=W/N; 
% Generate the diagonal 
d=((N-1-2*(0:N-1)).^2)*.25*cos(2*pi*W); 
 
% Generate the off-diagonals 
off=(1:N-1).*(N-1:-1:1)/2; 
 
% Generate the tri-diagonal matrix 
B = diag(d) + diag(off,1) + diag(off, -1); 
 
% Get the eigenvectors/values of B, then sort 
[E, V]=eig(B); 
[v, index]=sort(diag(V)); 
clear B V v 
E=E(:,index(N:-1:1)); 
% Keep only the needed eigenvectors 
E=E(:,1:2*N*W); 
 
% Now calculate the desired eigenvalues by plugging 
% the eigenvectors back into the defining equation: 
d(1)=2*W; 
d(2:N)=sin(2*pi*W*(1:N-1))./(pi*(1:N-1)); 
 
A=toeplitz(d); 
V=E'*A*E; 
V=diag(V); 
 
% Normalize the eigenvectors 
E=E./(ones(N,1)*sqrt(sum(E.*E))); 
 
% Polarize symmetric dpss 
d=mean(E); 
for i=1:2:2*N*W 
  if d(i)<0, E(:,i)=-E(:,i); end 
end 
 
% Polarize anti-symmetric dpss 
for i=2:2:2*N*W 
  if E(2,i)<0, E(:,i)=-E(:,i); end 
end 
 








⌨️ 快捷键说明

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