3、16-QAM调制. 对于已定义的包含从0到15的整数的列向量xsym,就可以利用modem.qammod对象的modulate方法来调制它。其中M值为16,亦即为码字表的大小。 %% Modulation y = modulate(modem.qammod(M),xsym); % Modulate using 16-QAM.
调制的结果是复数列向量,其取值为16点QAM信号星座图。本示例中的随后步骤中将会展示星座图是什么样子的。想要了解更多关于调制函数的信息,可参见第8章“调制”。另外,注意到modem.qammod对象的modulate方法没有进行任何的脉冲成形处理。
4、加性高斯白噪声. 对已调制信号可采用awgn函数添加加性高斯噪声。其中比特能量与噪声功率谱密度的比值,Eb/N0,设置为10dB。 将上述Eb/N0值转换为相应的信噪比(SNR),需要考虑每一符号包含的比特数k(16-QAM中为4)以及过采样率因子nsamp(本示例中为1)。其中因子k是用来将Eb/N0转换为等价的Es/N0(符号能量与噪声功率谱密度的比值)。因子nsamp是用来将符号速率带宽内的Es/N0转换为采样带宽内的SNR。
说明 ytx和yrx的定义以及snr定义中nsamp项到目前为止在本示例中显现得并不是很重要, 但是这将使得其更容易扩展到之后的成形滤波示例。
%% Transmitted Signal ytx = y; %% Channel % Send signal over an AWGN channel. EbNo = 10; % In dB snr = EbNo + 10*log10(k) - 10*log10(nsamp); ynoisy = awgn(ytx,snr,'measured'); %% Received Signal yrx = ynoisy; 5、绘制散点图。 对发射和接收信号利用scatterplot函数可显示信号星座图的样子及噪声对信号造成的失真程度。在该图中,横轴代表了信号的同相分量而纵轴代表了正交分量。下面的代码还利用了MATLAB中的title、legend以及axis函数来绘制特定的图像。
%% Scatter Plot % Create scatter plot of noisy signal and transmitted % signal on the same axes. h = scatterplot(yrx(1:nsamp*5e3),nsamp,0,'g.'); hold on; scatterplot(ytx(1:5e3),1,0,'k*',h); title('Received Signal'); legend('Received Signal','Signal Constellation'); axis([-5 5 -5 5]); % Set axis ranges. hold off; 6、16-QAM解调。 对接收信号利用modem.deqammod对象的demodulate方法进行解调。解调结果为包含0到15之间整数的列向量。
%% Demodulation % Demodulate signal using 16-QAM. zsym = demodulate(modem.qamdemod(M),yrx);
7、整数信号转换至二进制比特信号.
%% Symbol-to-Bit Mapping % Undo the bit-to-symbol mapping performed earlier. z = de2bi(zsym,'left-msb'); % Convert integers to bits. % Convert z from a matrix to a vector. z = reshape(z.',prod(size(z)),1); 8、计算系统误码率.
对原始二进制向量和上述步骤解调得到二进制向量利用biterr函数即可得到误比特数和误码率。
%% BER Computation % Compare x and z to obtain the number of errors and % the bit error rate. [number_of_errors,bit_error_rate] = biterr(x,z) >> number_of_errors =
71
bit_error_rate =
0.0024
上一步产生的信号为一整数列向量zsym。要得到相应的二进制比特信号,只需要利用de2bi函数将每一个整数转化为相应的4位二进制信号。然后利用reshape函数将一个4列的矩阵整理为一个单独列向量 |
|