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

📄 constellation.m

📁 有关于相位
💻 M
字号:
clear all;
close all;
clc;

fc = 1000;
fs = 4374;
amp = 1;
RB = 10;


% [ySig, t, vSym, PSig] =  CreateNPSK(8, fc, amp, fs, RB, [0 1 2 3 4 5 6 7]);
% [ySig, t, vSym, PSig] =  CreateNPSK(4, fc, amp, fs, RB, [0 1 2 3 0 1 2 3]);
[ySig, t, vSym, PSig] =  CreateNPSK(2, fc, amp, fs, RB, [0 1 0 1 0 1 0 1]);
% [ySig, t, vSym, PSig] =  Create16QAM(fc, amp, fs, RB, 0:15);
ySig = ySig / sqrt(PSig);           %功率归一化
PSig = 1;

% plot(t, ySig); grid on;

SNR = 0;
snRatio = 10.^(SNR/10);
PNoise = PSig / snRatio;
Noise = NorNoise(PNoise, length(t));
ySig = ySig + Noise;

yHlb = hilbert(ySig);
rawPhase = unwrap(angle(yHlb));
CarPhase = 2*pi*fc*(0:1/fs:(1/fs*(length(ySig)-1)));    %载波相位
relPhase = rawPhase - CarPhase;                         %相对相位偏移
Amp = abs(yHlb)./sqrt(2);                    %归一化幅度
X = Amp .* cos(relPhase);            %同相分量
Y = Amp .* sin(relPhase);            %正交分量
% plot(relPhase);grid on;

%****************************************
% 图形展示分布
StdConstellation;
plot(X, Y, '*'); grid on;
hold on;

theta = linspace(0, 2*pi, 100);
% for i = 1:2
%     x = R2PSK * cos(theta) + P2PSK(i, 1);
%     y = R2PSK * sin(theta) + P2PSK(i, 2);
%     plot(x, y);grid on;
%     hold on;
% end;
% 
% for i = 1:4
%     x = R4PSK * cos(theta) + P4PSK(i, 1);
%     y = R4PSK * sin(theta) + P4PSK(i, 2);
%     plot(x, y);grid on;
%     hold on;
% end;
% 
% for i = 1:8
%     x = R8PSK * cos(theta) + P8PSK(i, 1);
%     y = R8PSK * sin(theta) + P8PSK(i, 2);
%     plot(x, y);grid on;
%     hold on;
% end;
% 
% for i = 1:16
%     x = R16QAM * cos(theta) + P16QAM(i, 1);
%     y = R16QAM * sin(theta) + P16QAM(i, 2);
%     plot(x, y);grid on;
%     hold on;
% end;
axis equal;
%****************************************

count2 = 0;
count4 = 0;
count8 = 0;
count16 = 0;
for n = 1:length(ySig)
    if is16QAM(X(n), Y(n)) == 1
        count16 = count16 + 1;
    end;
end;

for n = 1:length(ySig)
    if is8PSK(X(n), Y(n)) == 1
        count8 = count8 + 1;
    end;
end;

for n = 1:length(ySig)
    if is4PSK(X(n), Y(n)) == 1
        count4 = count4 + 1;
    end;
end;

for n = 1:length(ySig)
    if is2PSK(X(n), Y(n)) == 1
        count2 = count2 + 1;
    end;
end;

Count = length(ySig);
disp([count2 count4 count8 count16]/Count);

⌨️ 快捷键说明

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