├── Music.m ├── Root_Music.m ├── Music_snapshot.m ├── Music_snr.m └── Music_source_number.m /Music.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wuzhixiang/Music/HEAD/Music.m -------------------------------------------------------------------------------- /Root_Music.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wuzhixiang/Music/HEAD/Root_Music.m -------------------------------------------------------------------------------- /Music_snapshot.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | 4 | derad = pi / 180; 5 | radeg = 180 / pi; 6 | twpi = 2 * pi; 7 | 8 | kelm = 8; %阵元个数 9 | dd = 0.5; %阵元间距 10 | d = 0: dd: (kelm - 1) * dd; 11 | 12 | iwave = 3; %待估计信号源数 13 | theta = [10 35 60]; %待估计角度为10 30 60 14 | snr = 10; %信噪比 15 | n = 100:300:1600; %快拍数 16 | SPA = ones(length(n), 361); 17 | ang = 1:1:361; 18 | 19 | for i = 1: length(n) 20 | A = exp(-j * twpi * d.' * sin(theta * derad)); 21 | S = randn(iwave, n(i)); 22 | X = A * S; 23 | X1 = awgn(X, snr, 'measured'); 24 | Rxx = X1 * X1' / n(i); 25 | InvS = inv(Rxx); 26 | 27 | [EV, D] = eig(Rxx); %这里D为特征值的对角矩阵 28 | EVA = diag(D)'; %这里为特征值所组成的向量 29 | [EVA, I] = sort(EVA); 30 | EVA = fliplr(EVA); %特征值从大到小排列 31 | EV = fliplr(EV(:, I)); %特征向量依据特征值排列 32 | 33 | for iang = 1:361 %对每个角度求出谱估计 34 | angle(iang) = (iang - 181) / 2; 35 | phim = derad * angle(iang); 36 | a = exp(-j * twpi * d * sin(phim)).'; 37 | L = iwave; 38 | En = EV(:, L+1:kelm); %将噪声子空间的投影算子求出 39 | SP(iang) = (a' * a) / (a' * En * En' * a); 40 | end 41 | SP = abs(SP); 42 | SPmax = max(SP); %取谱估计的最大值 43 | SP = 10 * log10(SP / SPmax); %dB = 10lg(p/po) (p:功率,po:基准功率) 44 | SPA(i,:) = SP; 45 | end 46 | [Angle, N] = meshgrid(ang, n); 47 | figure(1); 48 | plot3(Angle', N', SPA'); 49 | grid on; 50 | figure(2) 51 | mesh(Angle', N', SPA'); 52 | % figure(3) 53 | % mesh(Angle, Snr, SPA); 54 | % h = plot(angle, SP); 55 | % set(h, 'Linewidth', 2) 56 | % xlabel('angle (degree)') 57 | % ylabel('magnitude (dB)') 58 | % axis([-90 90 -60 0]) 59 | % set(gca, 'XTick', [-90:30:90]) 60 | % grid on 61 | -------------------------------------------------------------------------------- /Music_snr.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | 4 | derad = pi / 180; 5 | radeg = 180 / pi; 6 | twpi = 2 * pi; 7 | 8 | kelm = 8; %阵元个数 9 | dd = 0.5; %阵元间距 10 | d = 0: dd: (kelm - 1) * dd; 11 | 12 | iwave = 3; %待估计信号源数 13 | theta = [10 35 60]; %待估计角度为10 30 60 14 | snr = 0:5:30; %信噪比 15 | n = 500; %快拍数 16 | SPA = ones(length(snr), 361); 17 | ang = 1:1:361; 18 | 19 | for i = 1: length(snr) 20 | A = exp(-j * twpi * d.' * sin(theta * derad)); 21 | S = randn(iwave, n); 22 | X = A * S; 23 | X1 = awgn(X, snr(i), 'measured'); 24 | Rxx = X1 * X1' / n; 25 | InvS = inv(Rxx); 26 | 27 | [EV, D] = eig(Rxx); %这里D为特征值的对角矩阵 28 | EVA = diag(D)'; %这里为特征值所组成的向量 29 | [EVA, I] = sort(EVA); 30 | EVA = fliplr(EVA); %特征值从大到小排列 31 | EV = fliplr(EV(:, I)); %特征向量依据特征值排列 32 | 33 | for iang = 1:361 %对每个角度求出谱估计 34 | angle(iang) = (iang - 181) / 2; 35 | phim = derad * angle(iang); 36 | a = exp(-j * twpi * d * sin(phim)).'; 37 | L = iwave; 38 | En = EV(:, L+1:kelm); %将噪声子空间的投影算子求出 39 | SP(iang) = (a' * a) / (a' * En * En' * a); 40 | end 41 | SP = abs(SP); 42 | SPmax = max(SP); %取谱估计的最大值 43 | SP = 10 * log10(SP / SPmax); %dB = 10lg(p/po) (p:功率,po:基准功率) 44 | SPA(i,:) = SP; 45 | end 46 | [Angle, Snr] = meshgrid(ang, snr); 47 | figure(1); 48 | plot3(Angle', Snr', SPA'); 49 | grid on; 50 | figure(2) 51 | mesh(Angle', Snr', SPA'); 52 | % figure(3) 53 | % mesh(Angle, Snr, SPA); 54 | % h = plot(angle, SP); 55 | % set(h, 'Linewidth', 2) 56 | % xlabel('angle (degree)') 57 | % ylabel('magnitude (dB)') 58 | % axis([-90 90 -60 0]) 59 | % set(gca, 'XTick', [-90:30:90]) 60 | % grid on 61 | -------------------------------------------------------------------------------- /Music_source_number.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | 4 | derad = pi / 180; 5 | radeg = 180 / pi; 6 | twpi = 2 * pi; 7 | 8 | kelm = 5:1:10; %阵元个数 9 | dd = 0.5; %阵元间距 10 | 11 | iwave = 3; %待估计信号源数 12 | theta = [10 35 60]; %待估计角度为10 30 60 13 | snr = 10; %信噪比 14 | n = 500; %快拍数 15 | SPA = ones(length(kelm), 361); 16 | ang = 1:1:361; 17 | 18 | for i = 1: length(kelm) 19 | d = 0: dd: (kelm(i) - 1) * dd; 20 | A = exp(-j * twpi * d.' * sin(theta * derad)); 21 | S = randn(iwave, n); 22 | X = A * S; 23 | X1 = awgn(X, snr, 'measured'); 24 | Rxx = X1 * X1' / n; 25 | InvS = inv(Rxx); 26 | 27 | [EV, D] = eig(Rxx); %这里D为特征值的对角矩阵 28 | EVA = diag(D)'; %这里为特征值所组成的向量 29 | [EVA, I] = sort(EVA); 30 | EVA = fliplr(EVA); %特征值从大到小排列 31 | EV = fliplr(EV(:, I)); %特征向量依据特征值排列 32 | 33 | for iang = 1:361 %对每个角度求出谱估计 34 | angle(iang) = (iang - 181) / 2; 35 | phim = derad * angle(iang); 36 | a = exp(-j * twpi * d * sin(phim)).'; 37 | L = iwave; 38 | En = EV(:, L+1:kelm(i)); %将噪声子空间的投影算子求出 39 | SP(iang) = (a' * a) / (a' * En * En' * a); 40 | end 41 | SP = abs(SP); 42 | SPmax = max(SP); %取谱估计的最大值 43 | SP = 10 * log10(SP / SPmax); %dB = 10lg(p/po) (p:功率,po:基准功率) 44 | SPA(i,:) = SP; 45 | end 46 | [Angle, Kelm] = meshgrid(ang, kelm); 47 | figure(1); 48 | plot3(Angle', Kelm', SPA'); 49 | grid on; 50 | figure(2) 51 | mesh(Angle', Kelm', SPA'); 52 | % figure(3) 53 | % mesh(Angle, Snr, SPA); 54 | % h = plot(angle, SP); 55 | % set(h, 'Linewidth', 2) 56 | % xlabel('angle (degree)') 57 | % ylabel('magnitude (dB)') 58 | % axis([-90 90 -60 0]) 59 | % set(gca, 'XTick', [-90:30:90]) 60 | % grid on 61 | --------------------------------------------------------------------------------