使用 MATLAB 函数的散点图和眼图
此示例说明如何通过使用眼图和散点图可视化信号行为。该示例使用通过平方根升余弦 (RRC) 滤波器的 QPSK 信号。
散点图
设置 RRC 滤波器、调制方案和绘图参数。
span = 10; % Filter span rolloff = 0.2; % Rolloff factor sps = 8; % Samples per symbol M = 4; % Modulation alphabet size k = log2(M); % Bits/symbol phOffset = pi/4; % Phase offset (radians) n = 1; % Plot every nth value of the signal offset = 0; % Plot every nth value of the signal, starting from offset+1
使用 rcosdesign
函数创建滤波器系数。
filtCoeff = rcosdesign(rolloff,span,sps);
为大小为 M
的字母表生成随机符号。
rng default
data = randi([0 M-1],5000,1);
应用 QPSK 调制。
dataMod = pskmod(data,M,phOffset);
对调制数据进行滤波。
txSig = upfirdn(dataMod,filtCoeff,sps);
计算过采样 QPSK 信号的 SNR。
EbNo = 20; snr = EbNo + 10*log10(k) - 10*log10(sps);
向发射信号添加 AWGN。
rxSig = awgn(txSig,snr,'measured');
应用 RRC 接收滤波器。
rxSigFilt = upfirdn(rxSig, filtCoeff,1,sps);
对滤波后的信号进行解调。
dataOut = pskdemod(rxSigFilt,M,phOffset,'gray');
使用 scatterplot
函数显示滤波前后信号的散点图。您可以看到,接收滤波器改进了性能,因为星座图更接近理想值。前 span
个符号和后 span
个符号表示两次滤波运算的累积延迟。在生成散点图之前,这些符号会从两个滤波后的信号中去除。
h = scatterplot(sqrt(sps)*txSig(sps*span+1:end-sps*span),sps,offset); hold on scatterplot(rxSigFilt(span+1:end-span),n,offset,'bx',h) scatterplot(dataMod,n,offset,'r+',h) legend('Transmit Signal','Received Signal','Ideal','location','best')
眼图
显示两个符号周期内发射信号眼图的 1000 个点。
eyediagram(txSig(sps*span+1:sps*span+1000),2*sps)
显示接收信号眼图的 1000 个点。
eyediagram(rxSig(sps*span+1:sps*span+1000),2*sps)
我们看到,由于 AWGN 的存在,接收信号眼图开始呈现闭合状态。此外,滤波器的长度有限,这也导致信号行为不理想。