使用MUSIC算法多OFDM信号进行多径时延估计


fs = 1e5; % 采样率
T = 1/fs;%采样时间间隔
t = (0:1000-1)/fs; % 采样点对应的时刻
f = 100; % 载波频率
s = exp(2*pi*f*t*1i); % 基准信号
d = [0.1, 0.3, 0.2]; % 多径时延
a = [1, 0.8, 0.5]; % 多径衰减
%d = [0.05]; % 多径时延
%a = [0.3]; % 多径衰减
n = length(t); % 采样点数
x = Tx_data; % OFDM发送信号
snr = 10;            % 信噪比 
X = zeros(size(x)); % 构造接收信号
for i = 1:length(d)
    %A = a(i)*exp(-2*pi*f*d(i)*1i).*s ;
    A = a(i)*exp(-2*pi*f*(t-d(i))*1i).*s ;
    X = X + A;
    X = X + x.*A; %OFDM信号的对应位置对应相乘
end
% A=a.*exp(-2*pi*f.*(t-d)*1i);
% X = x*A;
X1 = awgn(X,snr,'measured'); %将白色高斯噪声添加到信号中
% 估计多径时延
N = length(d); % 估计的多径个数
L = 100; % 空间平滑的阈值
Rxx = X1'*X1/n; % 接收信号的自相关矩阵
[EV,D]=eig(Rxx); %特征值分解
EVA=diag(D)'; %将特征值矩阵对角线提取并转为一行
[EVA,I]=sort(EVA); %将特征值排序 从小到大
EV=fliplr(EV(:,I)); % 对应特征矢量排序
ime = 1; % 初始循环计数器
Time_min = -max(t); % 时延范围最小值
Time_max = max(t); % 时延范围最大值
Time_step = 0.0001; % 时延步长
Time = Time_min:Time_step:Time_max; % 时延向量
PMusic = zeros(1,length(Time)); % 估计的多径时延
while ime <= length(Time)
    B = (exp(-2*pi*f*(t-Time(ime))*1i))';
    En = EV(:,N+1:end); % 取矩阵的第N+1到最后一列组成噪声子空间
    PMusic(ime) = 1/(B'*En*En'*B);%MUSIC功率谱公式
    ime = ime+1;
end
% PMusic = abs(PMusic); % 对所有时延进行加和
Pmmax = max(PMusic)
Pmmin = min(PMusic)

使用上述代码求出来的PMusic中每一个元素值都相同,即多径时延信息没有被添加进去,但是不知道怎么修改,有没有人帮忙解决一下这个问题

计算MUSIC算法的功率谱时,代码中没有正确地将接收信号和基准信号进行点乘

原始信号x和多径信号没有正确地相加

fs = 1e5; % 采样率
T = 1/fs;%采样时间间隔
t = (0:1000-1)/fs; % 采样点对应的时刻
f = 100; % 载波频率
s = exp(2*pi*f*t*1i); % 基准信号
d = [0.1, 0.3, 0.2]; % 多径时延
a = [1, 0.8, 0.5]; % 多径衰减
n = length(t); % 采样点数
x = Tx_data; % OFDM发送信号
snr = 10; % 信噪比
X = zeros(size(x)); % 构造接收信号
for i = 1:length(d)
    A = a(i)*exp(-2*pi*f*(t-d(i))*1i).*s;
    X = X + x.*A; % OFDM信号的对应位置相乘并相加
end
X1 = awgn(X,snr,'measured'); %将白色高斯噪声添加到信号中
% 估计多径时延
N = length(d); % 估计的多径个数
L = 100; % 空间平滑的阈值
Rxx = X1'*X1/n; % 接收信号的自相关矩阵
[EV,D]=eig(Rxx); %特征值分解
EVA=diag(D)'; %将特征值矩阵对角线提取并转为一行
[EVA,I]=sort(EVA); %将特征值排序 从小到大
EV=fliplr(EV(:,I)); % 对应特征矢量排序
ime = 1; % 初始循环计数器
Time_min = -max(t); % 时延范围最小值
Time_max = max(t); % 时延范围最大值
Time_step = 0.0001; % 时延步长
Time = Time_min:Time_step:Time_max; % 时延向量
PMusic = zeros(1,length(Time)); % 估计的多径时延
while ime <= length(Time)
    B = (exp(-2*pi*f*(t-Time(ime))*1i))';
    En = EV(:,N+1:end); % 取矩阵的第N+1到最后一列组成噪声子空间
    PMusic(ime) = 1/(B'*En*En'*B);%MUSIC功率谱公式
    ime = ime+1;
end
% PMusic = abs(PMusic); % 对所有时延进行加和
Pmmax = max(PMusic)
Pmmin = min(PMusic)