概述
Q:实际工程应用发射端调制容易理解,接收端解调一般采用LLR(对数似然比)软解调办法。
具体算法推导过程可参加网上资源,最后一般采用优化后LLR形式做代码实现。
仿真思路:
step1:生成随机bit作为待调制信号sig
step2:将sig经QPSK调制
step3:调制后信号过awgn信道,改变snr,观察过信道后信号变化
step4:接收端QPSK解调,计算误码率
备注:源程序略做修改,只是观察中间信号变化
%% Constants
FRM=2048;
MaxNumErrs=200;MaxNumBits=1e7;
EbNo_vector=0:10;BER_vector=zeros(size(EbNo_vector));
%% Initializations
Modulator = comm.QPSKModulator('BitInput',true);
AWGN = comm.AWGNChannel;
DeModulator = comm.QPSKDemodulator('BitOutput',true);
BitError = comm.ErrorRate;
%% Outer Loop computing Bit-error rate as a function of EbNo
for EbNo = EbNo_vector
snr = EbNo + 10*log10(2);
AWGN.EbNo=10;
numErrs = 0; numBits = 0;results=zeros(3,1);
%% Inner loop modeling transmitter, channel model and receiver for each EbNo
% while ((numErrs < MaxNumErrs) && (numBits < MaxNumBits))
% Transmitter
u = randi([0 1], FRM,1); % Generate random bits
mod_sig = step(Modulator, u); % QPSK Modulator
scatterplot(mod_sig);
% Channel
rx_sig = step(AWGN, mod_sig); % AWGN channel
% rx_sig = awgn(mod_sig,20,'measured');
% Receiver
scatterplot(rx_sig);
y = step(DeModulator, rx_sig); % QPSK Demodulator
results = step(BitError, u, y); % Update BER
numErrs = results(2);
numBits = results(3);
% end
% Compute BER
ber = results(1); bits= results(3);
%% Clean up & collect results
reset(BitError);
BER_vector(EbNo+1)=ber;
end
%% Visualize results
EbNoLin = 10.^(EbNo_vector/10);
theoretical_results = 0.5*erfc(sqrt(EbNoLin));
semilogy(EbNo_vector, BER_vector)
grid;title('BER vs. EbNo - QPSK modulation');
xlabel('Eb/No (dB)');ylabel('BER');hold;
semilogy(EbNo_vector,theoretical_results,'dr');hold;
legend('Simulation','Theoretical');
下图:左边snr = 10db,过信道后的星座图,右图snr = 20db,过信道后的调制信号
最后
以上就是体贴向日葵为你收集整理的第三章 pro1 QPSK调制与解调的全部内容,希望文章能够帮你解决第三章 pro1 QPSK调制与解调所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复