我必须使用matlab分析用QPSK调制的信号,我似乎无法把事情做好。
我所拥有的:以已知频率采样的复杂信号。
我想要的是:某个频率的功率比。因此,如果信号的格式为a*cos(wt)+a*cos(2wt)
,那么我应该0.5 for w
和0.5 for 2w
。
我不知道我的代码有什么问题,但我得到的频率功率高于信号功率,你可以在下面的图表中看到它(在blue: signalPower
,在red: Fm
中)
这是我的代码:
% Nsym : Number of symbol used for the detection
% Ns : Number ofsamples per symbol
% IQrx : Complex signal to analyse
% Fmod : Modulation frequency
Nt = Nsym*Ns;
signalPower = zeros(1, length(IQrx));
Fp = zeros(1, length(IQrx));
Fm = zeros(1, length(IQrx));
for ii = 1:length(IQrx)
for jj = 0:Nt-1
if ii-jj > 0 && ii-jj <= length(IQrx)
signalPower(ii) = signalPower(ii) + ...
abs(IQrx(ii-jj))^2;
Fp(ii) = Fp(ii) + ...
IQrx(ii-jj) * ...
exp(1i*2*pi*Fmod*(ii-jj)/obj.Fs);
Fm(ii) = Fm(ii) + ...
IQrx(ii-jj) * ...
exp(-1i*2*pi*Fmod*(ii-jj)/obj.Fs);
end
end
Fp(ii) = abs(Fp(ii))^2;
Fm(ii) = abs(Fm(ii))^2;
end
编辑:根据评论中的要求,我使用的公式是: 考虑一下我进入感兴趣的时间窗口。
signalPower = sum(signal(i)^ 2)
Fp = abs(sum(信号* exp(1i * 2 * pi Fmod (i)/obj.Fs)))^ 2
Fp = abs(sum(信号* exp(-1i * 2 * pi Fmod (i)/obj.Fs)))^ 2
答案 0 :(得分:0)
对我而言
signalPower(ii) = signalPower(ii) + abs(IQrx(ii-jj))^2;
应该更像是:
signalPower(ii) = signalPower(ii) + abs(IQrx(ii-jj));
你可能想尝试一些更简单的信号功能,如:
PWT = X'* X; %时域功率
其中x
是您的窗口时间序列值。 (灵感来自this link)。