希望有哪位帮我指点一下,如何在MATLAB中生成相干信号
这是在CSDN中找的代码,用来学习。资料里说MUSIC算法在相关信源情况下会性能大打折扣,因为之后解决方法时用ESPRIT算法,所以我想做出一个相干信源情况下的MUSIC算法结果出来,但找了很久都不知道怎么构建相干信号,没办法完成二者的对比。
MUSIC算法的MATLAB程序,用S=randn(M,K);生成了非相干信号;
clear; close all;
% MUSIC for Uniform Linear Array%
derad = pi/180; 角度->弧度
N = 8; 阵元个数
M = 3; 信源数目
theta = [-30 0 5]; 待估计角度
snr = 10; 信噪比
K = 512; 快拍数
dd = 0.5; 阵元间距
d=0:dd:(N-1)dd;
A=exp(-1i2pid.'sin(thetaderad)); 方向矢量
构建信号模型
S=randn(M,K); 信源信号M个,入射信号,快拍数K, randn - 正态分布的随机数,如randn(3,4) 返回一个 3×4 的矩阵
X=AS; 构造接收信号
X1=awgn(X,snr,'measured'); awgn函数:将白色高斯噪声添加到信号中
计算协方差矩阵
Rxx=X1X1'/K;
特征值分解
[EV,D]=eig(Rxx); 特征值分解
EVA=diag(D)'; 将特征值矩阵对角线提取并转为一行
[EVA,I]=sort(EVA); 将特征值排序 从小到大
EV=fliplr(EV(:,I)); 对应特征矢量排序
遍历每个角度,计算空间谱
for iang = 1:361
angle(iang)=(iang-181)/2;
phim=deradangle(iang);
a=exp(-1i2pid*sin(phim)).';
En=EV(:,M+1:N); 取矩阵的第M+1到N列组成噪声子空间
Pmusic(iang)=1/(a'EnEn'a);
end
Pmusic=abs(Pmusic); abs(x)函数:绝对值和复数的模
Pmmax=max(Pmusic)
Pmusic=10log10(Pmusic/Pmmax); 归一化处理
h=plot(angle,Pmusic);
set(h,'Linewidth',2);
xlabel('入射角/(degree)');
ylabel('空间谱/(dB)');
set(gca, 'XTick',[-90:30:90]);
grid on;
两个都是非相干信号,我想试试相干信号的情况。抱歉因为CSDN提问机制的原因,我删除了所有注释符号%,但汉字部分基本都是我在学习时候自己打的注释
信源数估计的MATLAB程序
https://wenku.baidu.com/view/da999c64d4d8d15abf234e7a.html