function ber = qamm_func( snr )
%Star-16QAM
% Random bit sequence
numberOfBits = 1e4;
x = rand(1, numberOfBits);
x( x < 0.5 ) = 0;
x( x >= 0.5 ) = 1;
% Radius of inner and outer circle
r1 = sqrt(4.88);
r2 = r1*1.76;
% Define mapping table applying Gray mapping
mappingTable(1) = r1 * exp(1i* 0);
mappingTable(2) = r1 * exp(1i* pi/4);
mappingTable(3) = r1 * exp(1i* 3*pi/4);
mappingTable(4) = r1 * exp(1i* pi/2);
mappingTable(5) = r1 * exp(1i* 7*pi/4);
mappingTable(6) = r1 * exp(1i* 3*pi/2);
mappingTable(7) = r1 * exp(1i* pi);
mappingTable(8) = r1 * exp(1i* 5*pi/4);
mappingTable(9:16) = mappingTable(1:8) ./ r1 .* r2;
if mod(numberOfBits, 4) ~= 0
error('numberOfBits must be a multiple of 4.');
end
mappedSymbols = zeros(1, numberOfBits / 4);
% Map bits to symbols
for i = 1:4:length(x)
symbolBits = x(i:i+3);
symbolIndex = 2^3 * symbolBits(1) + 2^2 * symbolBits(2) + 2^1 * symbolBits(3) + 2^0 * symbolBits(4);
% Mapping
mappedSymbols((i - 1)/4 + 1) = mappingTable( symbolIndex + 1);
end
% Add white Gaussian noise
meanSignalPower = (r1^2 + r2^2)/2;
snr_lin = 10^(snr/10); % linear scale
meanNoisePower = meanSignalPower ./ snr_lin;
receivedSignal = mappedSymbols + randn(1, length(mappedSymbols)) * sqrt(meanNoisePower/2) +...
1i * randn(1, length(mappedSymbols)) * sqrt(meanNoisePower/2);
% Decision and demapping
receivedBits = zeros(1, numberOfBits / 4);
for i = 1:length(receivedSignal)
[mindiff minIndex] = min(receivedSignal(i) - mappingTable);
symbolIndex = minIndex - 1;
bitString = dec2bin(symbolIndex, 4);
receivedBits((i-1)*4 + 1) = str2double(bitString(1));
receivedBits((i-1)*4 + 2) = str2double(bitString(2));
receivedBits((i-1)*4 + 3) = str2double(bitString(3));
receivedBits((i-1)*4 + 4) = str2double(bitString(4));
end
numberOfBitErrors = nnz( x - receivedBits );
ber = numberOfBitErrors / numberOfBits; % bit error rate
disp(['SNR: ' num2str(snr) ' dB']);
disp(['Bit error rate (BER): ' num2str(ber)]);
% figure;
% plot( real(receivedSignal), imag(receivedSignal), '.'); hold on;
% absLim = max( max(real(receivedSignal)), max(imag(receivedSignal)));
% xyLimits = [-absLim*1.1 absLim*1.1];
% xlim( xyLimits );
% ylim( xyLimits );
% plot( real(mappedSymbols), imag(mappedSymbols), '.r'); hold off;
% xlim( xyLimits );
% ylim( xyLimits );
% xlabel('In-Phase');
% ylabel('Quadrature');
% legend('received', 'transmitted');
end
没有合适的资源?快使用搜索试试~ 我知道了~
matlab-16QAM调制解调误码率仿真,对比Star-16QAM,Square-16QAM以及Square-16QAM-Gr
共4个文件
m:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 43 浏览量
2021-09-30
21:25:49
上传
评论
收藏 3KB RAR 举报
温馨提示
matlab_16QAM调制解调误码率仿真,对比Star-16QAM,Square-16QAM以及Square-16QAM-Gray_源码
资源推荐
资源详情
资源评论
收起资源包目录
matlab_16QAM调制解调误码率仿真,对比Star-16QAM,Square-16QAM以及Square-16QAM-Gray_源码.rar (4个子文件)
matlab_16QAM调制解调误码率仿真,对比Star-16QAM,Square-16QAM以及Square-16QAM-Gray_源码
Runme.m 589B
func
qamm_func.m 2KB
qamsquare_func.m 1KB
qamsquareG_func.m 1KB
共 4 条
- 1
资源评论
- dspman2023-01-05资源很好用,有较大的参考价值,资源不错,支持一下。
mYlEaVeiSmVp
- 粉丝: 1864
- 资源: 19万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功