MATLAB完成BSC信道

BSC信道是二元对称信道(Binary Symmetric Channel)的简称。它的输入和输出都只有0和1两种符号,并且发送0而接收到1,以及发送1而收到0(即误码)的概率相同,所以称信道是对称的。此时条件差错概率(conditional probability)由p表示。二进制对称信道的转移概率下图所示:

利用MATLAB编程实现该信道,并且将图像通过该信道对比与系统函数bsc的差异发现结果一致,废话不多说,先上核心代码:

function pic = bsc1(pic,p) 
pic = double(pic);
for i = 1:length(pic(1,:))
    for j = 1:length(pic(:,1))
        px = rand();
        if px < p
            pic(i,j) = abs(pic(i,j)-1);
        end
    end
end

其中pic是图像数据,p为转移概率,利用double将其转换为数值数组,ij分别遍历图像的行列数据,每次进行rand取0-1随机数,小于p就产生误码,由于01之间转换的特殊性,一个格式下即减一取绝对值就可完成,至此函数部分完成。对于异或等或许能提高函数运算效率,不过我对这些逻辑运算不是太感冒,还是决定利用循环来做。

接下来进行验证:

 图一:(从数字图像处理课上扒来的图像,手动滑稽)

首先对图像进行二值化,imbinarize是二值化的函数,在MATLABr2014我使用的是im2bw,不过在r2018版本提醒使用imbinarize,这两个效果目测是一样的。接着用函数进行绘图,由于要求每次更改p中数值要让窗口中每个结果的title随之变化,所以使用title(['p =',num2str(变量)]),同时为了分辨三个figure生成的窗口,利用figure(‘name’,‘窗口名’)进行处理,不难发现用这种循环是可以完成BSC信道的,当然运算速度方面没做过深究,欢迎大佬指正。

clear all;close all;clc;
%% 图像二值化
pic = imread('F:\Donshow\Study\信息论与编码实验\camema.jpg');
figure('name','图像二值化');
subplot 121;imshow('camema.jpg');title('原图');
twopic = imbinarize(pic);
subplot 122;imshow(twopic);title('二值化');
%% 数据初始化
p = [0,0.25,0.5,0.75,1];
twopic = double(twopic);
%% 利用系统函数bsc
figure('name','图像通过系统函数bsc信道');
for i = 1:length(p)
    twopic1 = bsc(twopic,p(i));
    subplot(3,2,i);imshow(twopic1);
    title(['p = ',num2str(p(i))]);
end
%% 利用自己编写的函数bsc1
figure('name','图像通过自己编写函数bsc1信道');
for i = 1:length(p)
    twopic1 = bsc(twopic,p(i));
    subplot(3,2,i);imshow(twopic1);
    title(['p = ',num2str(p(i))]);
end

运行结果:

图二:figure1:图像二值化

图三:figure2:图像通过系统bsc函数 

图四:figure3:图像通过利用循环完成的bsc信道 

对比图三图四发现,符合要求。

写代码时查阅的一些资料也分享一下吧:

Matlab学习笔记 figure函数

Matlab中title函数使用

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Donshow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值