一、隨機(jī)信號的調(diào)制
第一個示例描述以下問題: 下表描述了解決此問題的關(guān)鍵任務(wù)和相應(yīng)的通信工具箱函數(shù),其中選擇基帶16QAM作為調(diào)制制式以及加性高斯白噪聲(AWGN)作為信道模型。
問題解決方案:
1.產(chǎn)生隨機(jī)二進(jìn)制數(shù)據(jù)序列。
在MATLAB中表示信號的常規(guī)格式是向量或者矩陣。本示例中利用randint 函數(shù)來產(chǎn)生一個表示二進(jìn)制數(shù)據(jù)序列連續(xù)值的列向量。其中二進(jìn)制數(shù)據(jù)序列的長度(即為列向量中的行數(shù))設(shè)置為30,000。
下面的代碼同時還繪制了數(shù)據(jù)序列的桿圖(stem plot),用來顯示數(shù)據(jù)的0、1值。你所產(chǎn)生的圖可能與次示例中的圖有一點不一樣,這是因為本示例中應(yīng)用了隨機(jī)數(shù)。
%% Setup
% Define parameters.
M = 16; % Size of signal constellation
k = log2(M); % Number of bits per symbol
n = 3e4; % Number of bits to process
nsamp = 1; % Oversampling rate
%% Signal Source
% Create a binary data stream as a column vector.
x = randint(n,1); % Random binary data stream
% Plot first 40 bits in a stem plot.
stem(x(1:40),'filled');
title('Random Bits');
xlabel('Bit Index'); ylabel('Binary Value');
2、準(zhǔn)備調(diào)制
modem.qammod對象實現(xiàn)M-QAM調(diào)制器,本示例中M為16。其輸入?yún)?shù)是從0到15的整數(shù)而不是4bits二進(jìn)制數(shù)據(jù)。因此,在利用此對象的modulate方法之前需要對二進(jìn)制數(shù)據(jù)序列x進(jìn)行預(yù)處理。特別地, 先采用MATLAB中的reshape函數(shù)將x沿著矩陣的行方向重新整理成每行4bit數(shù)據(jù),然后應(yīng)用bi2de函數(shù)將4bit數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的整數(shù)。
%% Bit-to-Symbol Mapping
% Convert the bits in x into k-bit symbols.
xsym = bi2de(reshape(x,k,length(x)/k).','left-msb');
%% Stem Plot of Symbols
% Plot first 10 symbols in a stem plot.
figure; % Create new figure window.
stem(xsym(1:10));
title('Random Symbols');
xlabel('Symbol Index'); ylabel('Integer Value');
問題 利用一個由基帶調(diào)制器、信道和解調(diào)器組成的通信系統(tǒng)處理二進(jìn)制數(shù)據(jù)流。計算系統(tǒng)的誤碼率(BER)并顯示發(fā)射和接收信號的散點圖(Scatter Plot)。
任務(wù)
函數(shù)或方法
產(chǎn)生隨機(jī)二進(jìn)制數(shù)據(jù)序列
randint
16QAM調(diào)制
modem.qammod 對象中的modulate方法
AWGN信道
awgn
繪制散點圖
scatterplot
16QAM解調(diào)
modem.qamdemod 對象中的demodulate方法(原文檔有誤)
計算系統(tǒng)誤碼率
biterr
3、16-QAM調(diào)制.
對于已定義的包含從0到15的整數(shù)的列向量xsym,就可以利用modem.qammod對象的modulate方法來調(diào)制它。其中M值為16,亦即為碼字表的大小。
%% Modulation
y = modulate(modem.qammod(M),xsym); % Modulate using 16-QAM.
調(diào)制的結(jié)果是復(fù)數(shù)列向量,其取值為16點QAM信號星座圖。本示例中的隨后步驟中將會展示星座圖是什么樣子的。想要了解更多關(guān)于調(diào)制函數(shù)的信息,可參見第8章“調(diào)制”。另外,注意到modem.qammod對象的modulate方法沒有進(jìn)行任何的脈沖成形處理。
4、加性高斯白噪聲.
對已調(diào)制信號可采用awgn函數(shù)添加加性高斯噪聲。其中比特能量與噪聲功率譜密度的比值,Eb/N0,設(shè)置為10dB。
將上述Eb/N0值轉(zhuǎn)換為相應(yīng)的信噪比(SNR),需要考慮每一符號包含的比特數(shù)k(16-QAM中為4)以及過采樣率因子nsamp(本示例中為1)。其中因子k是用來將Eb/N0轉(zhuǎn)換為等價的Es/N0(符號能量與噪聲功率譜密度的比值)。因子nsamp是用來將符號速率帶寬內(nèi)的Es/N0轉(zhuǎn)換為采樣帶寬內(nèi)的SNR。
說明 ytx和yrx的定義以及snr定義中nsamp項到目前為止在本示例中顯現(xiàn)得并不是很重要, 但是這將使得其更容易擴(kuò)展到之后的成形濾波示例。
%% 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、繪制散點圖。
對發(fā)射和接收信號利用scatterplot函數(shù)可顯示信號星座圖的樣子及噪聲對信號造成的失真程度。在該圖中,橫軸代表了信號的同相分量而縱軸代表了正交分量。下面的代碼還利用了MATLAB中的title、legend以及axis函數(shù)來繪制特定的圖像。
%% 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解調(diào)。
對接收信號利用modem.deqammod對象的demodulate方法進(jìn)行解調(diào)。解調(diào)結(jié)果為包含0到15之間整數(shù)的列向量。
%% Demodulation
% Demodulate signal using 16-QAM.
zsym = demodulate(modem.qamdemod(M),yrx);
7、整數(shù)信號轉(zhuǎn)換至二進(jìn)制比特信號.
%% 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、計算系統(tǒng)誤碼率.
對原始二進(jìn)制向量和上述步驟解調(diào)得到二進(jìn)制向量利用biterr函數(shù)即可得到誤比特數(shù)和誤碼率。
%% 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
上一步產(chǎn)生的信號為一整數(shù)列向量zsym。要得到相應(yīng)的二進(jìn)制比特信號,只需要利用de2bi函數(shù)將每一個整數(shù)轉(zhuǎn)化為相應(yīng)的4位二進(jìn)制信號。然后利用reshape函數(shù)將一個4列的矩陣整理為一個單獨列向量