二元固定信道(BSC)信道的MATLAB实现

二元固定信道(BSC)信道参数p(转移概率)如图所示:

其中错误转移概率为p,正确转移概率为1-pp(0|0)=1-pp(1|0)=pp(0|1)=pp(1|1)=1-p

现通过MATLAB编程实现该信道,由于该信道的转移特性与输入输出特性可知,该信道可通过一个二元信源与一个同维的仅含0或1的矩阵通过以概率p进行异或操作实现0。此函数可以采用两种方法编写,一种方法是将图片转换为列向量或者行向量与同维的矩阵异或;另外一种方法为与同维矩阵直接异或,无需转换。

信道函数如下,函数1:

function [A] = MYBSC1(I,p)
%MYBSC1 bsc信道函数
%   I-输入的二值图像或0,1矩阵;p-BSC信道参数
[m,n]=size(I);
I=reshape(I,m*n,1);   %二值矩阵转为列向量
x=rand(m*n,1);
for i=1:m*n
    if x(i)<p
        x(i)=1;
    else
        x(i)=0;
    end
end
A=xor(I,x);
A=reshape(A,m,n);   %列向量转为二值矩阵
end

函数2:

function [ A ] = MYBSC2(I,p)
%MYBSC2 bsc信道函数
%   I-输入的二值图像或0,1矩阵;p-BSC信道参数
[m,n]=size(I);
x=rand(m,n);
for i=1:m
    for j=1:n
        if x(i,j)<p
            x(i,j)=1;
        else
            x(i,j)=0;
        end
    end
end
A=xor(I,x);
end

接下来,通过MATLAB的系统函数与自己编写的函数进行对比验证,测试程序为:

clc
clear all
Pic=imread('star.jpg');
Pi_gray=rgb2gray(Pic);   %灰度化
thresh=graythresh(Pi_gray);   %灰度阈值
Pi_2=im2bw(Pi_gray,thresh);   %二值化
Pi_2=im2double(Pi_2);        %将逻辑值转换为双精度
Pi_01=bsc(Pi_2,0.01);       %经过bsc信道(系统函数)
MyPi1=MYBSC1(Pi_2,0.01);    %自写函数  
MyPi2=MYBSC2(Pi_2,0.01);
figure
subplot(2,2,1);imshow(Pic,[]);title('原图');
subplot(2,2,2);imshow(Pi_gray,[]);title('灰度图');
subplot(2,2,3);imshow(Pi_2,[]);title('二值图');
subplot(2,2,4);imshow(Pi_01,[]);title('经过p=0.1bsc信道');
figure
subplot(2,2,1);imshow(Pic,[]);title('原图');
subplot(2,2,2);imshow(Pi_gray,[]);title('灰度图');
subplot(2,2,3);imshow(MyPi1,[]);title('经过信道1,p=0.01');
subplot(2,2,4);imshow(MyPi2,[]);title('经过信道2,p=0.01');

程序运行结果如下:

通过经过相同参数的BSC信道后的三幅图片的对比可知,编写的信道函数符合BSC信道。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值