matlab中一个数组只有0和1,数组添加高斯白噪声数组后,数组经过判决得出数组,数组与原数组之间的误码
时间: 2023-10-23 22:11:00 浏览: 81
可以使用MATLAB中的awgn函数添加高斯白噪声数组,然后进行判决,最后计算误码率。
假设原始数组为x,添加高斯白噪声后得到y,判决后得到z,误码率为BER。
可以按照以下步骤进行操作:
1. 生成一个只包含0和1的数组x。
```
x = randi([0 1], 1, N);
```
其中N为数组长度。
2. 使用awgn函数添加高斯白噪声。
```
SNR = 10; % 信噪比
y = awgn(x, SNR, 'measured');
```
3. 进行判决,将y中大于0.5的元素置为1,小于等于0.5的元素置为0。
```
z = y > 0.5;
```
4. 计算误码率。
```
BER = sum(z ~= x) / N;
```
其中,`sum(z ~= x)`表示z和x中不相等的元素个数,`N`表示数组长度。
相关问题
matlab中数组加噪声数组后经过判决的数组与原数组的误码个数
在 Matlab 中,可以使用 randn 函数生成指定长度和均值方差的高斯白噪声数组,然后将其加到原始数组中,得到带噪声的数组。接着,可以使用判决函数对带噪声的数组进行处理,得到判决后的数组。误码个数可以通过比较原始数组和判决后的数组的不同之处来计算。
下面是一个示例代码,用于生成长度为 N 的原始数组,加入均值为 0、方差为 sigma^2 的高斯白噪声数组,然后进行判决,并计算误码个数:
```
N = 1000; % 原始数组长度
sigma = 0.1; % 噪声方差
% 生成原始数组
x = randi([0,1],1,N);
% 生成高斯白噪声数组
noise = sigma*randn(1,N);
% 加入噪声
y = x + noise;
% 判决
y_dec = y > 0.5;
% 计算误码个数
err_cnt = sum(x ~= y_dec);
disp(['误码个数:', num2str(err_cnt)]);
```
在这个示例中,我们假设原始数组中的元素只有 0 和 1 两种取值,生成的高斯白噪声数组均值为 0,方差为 sigma^2,然后将其加入到原始数组中。在判决时,我们采用了简单的阈值判决方法,即将带噪声的数组中大于 0.5 的元素判定为 1,小于等于 0.5 的元素判定为 0。最后,我们计算原始数组和判决后的数组不同之处的个数,这个数就是误码个数。
需要注意的是,这个示例中的判决方法非常简单,实际应用中可能需要更加复杂的判决算法,例如最大似然判决、最小误差率判决等。
1.试编写程序,仿真4PAM调制信号在高斯信道下的性能,并与理论分析结果相比。(1)画出两条性能曲线,一条是根据理论平均错误概率画出,另一条是仿真曲线;(2)程序的基本流程:信源产生信息比特、调制、将调制信号送入信道(产生高斯白噪声的程序)、接收端检测、将检测结果与信源原始信息比较计算误符号率和误比特率;(3)在给定信噪比下,第二步需多次重复,以得到一个平均错误概率;(4)信噪比范围:4PAM(0dB-14dB),4QAM(0dB-14dB),间隔是1dB;也可在 BER =106左右终止。(5)信噪比计算 SNR =10log( Es /N0)=10log( REb /N0)。注意调制不能运用MATLAB内置函数pammod。注意标注中文注释。注意检测方法使用多进制调制信号软输出检测。注意一定用MATLAB编写。编写程序时注意矩阵维度要一致不要出错。注意索引值不能超出数组边界,不要出错。注意仿真曲线不能是直线。
以下是一个可能的程序实现,其中包括了注释以方便理解,但可能不是最优的实现方式:
```matlab
clear all;
close all;
% 仿真参数
SNRdB = 0:1:14; % 信噪比范围
numBits = 1e6; % 仿真比特数
numSymbols = numBits/2; % 仿真符号数
PAMorder = 4; % PAM调制阶数
QAMorder = 4; % QAM调制阶数
% 生成随机比特序列
bits = randi([0 1],1,numBits);
%% PAM调制
% 将比特序列分组
dataInMatrix = reshape(bits,length(bits)/log2(PAMorder),log2(PAMorder));
% 将二进制数据转换为十进制数据
dataInMatrix = bi2de(dataInMatrix);
% 将十进制数据映射到符号
dataMod = pammod(dataInMatrix,PAMorder);
% 对调制后的信号进行归一化
dataMod = dataMod./sqrt(mean(abs(dataMod).^2));
%% QAM调制
% 将比特序列分组
dataInMatrixQAM = reshape(bits,length(bits)/log2(QAMorder),log2(QAMorder));
% 将二进制数据转换为十进制数据
dataInMatrixQAM = bi2de(dataInMatrixQAM);
% 将十进制数据映射到符号
dataModQAM = qammod(dataInMatrixQAM,QAMorder);
% 对调制后的信号进行归一化
dataModQAM = dataModQAM./sqrt(mean(abs(dataModQAM).^2));
%% 发送信号经过高斯白噪声信道
for k=1:length(SNRdB)
% 计算噪声方差
SNR = 10.^(SNRdB(k)/10);
Es = mean(abs(dataMod).^2);
N0 = Es/SNR;
% 生成高斯白噪声
noise = sqrt(N0/2)*(randn(1,numSymbols)+1j*randn(1,numSymbols));
% 发送信号经过信道并加上噪声
dataRx = dataMod + noise;
%% PAM调制信号软输出检测
% 计算标准差
sigma = sqrt(N0/2);
% 接收端对接收信号进行软判决
dataSym = repmat(dataRx',1,PAMorder);
decisionSoft = zeros(size(dataSym));
for ii = 1:PAMorder
decisionSoft(:,ii) = exp(-(dataSym-real(pammod(ii-1,PAMorder)).^2)/(2*sigma^2));
end
% 找出最大似然符号
[~,decisionIndexes] = max(decisionSoft,[],2);
% 将符号转换为比特
receivedBits = de2bi(decisionIndexes-1,log2(PAMorder));
% 计算比特错误率
bitErrs(k) = sum(bits ~= receivedBits,'all');
BER(k) = bitErrs(k)/numBits;
%% QAM调制信号软输出检测
% 接收端对接收信号进行软判决
dataSymQAM = repmat(dataRx',1,QAMorder);
decisionSoftQAM = zeros(size(dataSymQAM));
for ii = 1:QAMorder
decisionSoftQAM(:,ii) = exp(-abs(dataSymQAM-complex(qammod(ii-1,QAMorder))).^2/(2*sigma^2));
end
% 找出最大似然符号
[~,decisionIndexesQAM] = max(decisionSoftQAM,[],2);
% 将符号转换为比特
receivedBitsQAM = de2bi(decisionIndexesQAM-1,log2(QAMorder));
% 计算比特错误率
bitErrsQAM(k) = sum(bits ~= receivedBitsQAM,'all');
BERQAM(k) = bitErrsQAM(k)/numBits;
end
%% 理论误比特率
EbN0 = 10.^(SNRdB/10);
Pb = qfunc(sqrt(2*EbN0));
% 4PAM理论值
PbPAM = (2*(sqrt(PAMorder)-1)/sqrt(PAMorder))*Pb;
% 4QAM理论值
PbQAM = (4*(sqrt(QAMorder)-1)/sqrt(QAMorder))*Pb.*(1-Pb);
%% 画图
figure
semilogy(SNRdB,BER,'or-','LineWidth',1.5,'MarkerEdgeColor','k','MarkerFaceColor','r','MarkerSize',8);
hold on;
semilogy(SNRdB,PbPAM,'b-','LineWidth',1.5);
semilogy(SNRdB,BERQAM,'sg-','LineWidth',1.5,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',8);
semilogy(SNRdB,PbQAM,'m-','LineWidth',1.5);
hold off;
grid on;
legend('PAM仿真','PAM理论','QAM仿真','QAM理论','Location','SouthWest');
xlabel('信噪比(dB)');
ylabel('比特错误率');
title('4PAM与4QAM在高斯信道下的性能比较')
```
阅读全文