⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsc.m

📁 对JPEG2000压缩编码后的码流文件用matlab进行RS信道编码
💻 M
字号:
% 读取lena.jpc
f = fopen('lena_gray.j2c','r');
im = fread(f);
fclose(f);
%  im = randint(1,495,[1 255]);  %小数据测试

%RS编码
%k个数据为一组,在im尾部补0形成k的整数倍码流
n = 255;
k = 223;
N = ceil(length(im)/k);
im_filled = zeros(1,N*k);
im_filled(1:length(im)) = im;
im_block = reshape(im_filled,k,N);
im_block_gf = gf(im_block',8);
imenc_block_gf = rsenc(im_block_gf,n,k);     
imenc_stream_gf = reshape(imenc_block_gf',1,N*n);
imenc_stream = imenc_stream_gf.x;       %gf域变量变为uint
%进制转换
imenc_char = dec2bin(imenc_stream,8);  %uint变量z转换成char型
imenc_bin = [];
for i =1:length(imenc_char)  %char型转换成二进制
    for j = 1:8 
        temp = bin2dec(imenc_char(i,j));
        imenc_bin = [imenc_bin temp];
    end 
end

%BPSK调制
im_bpsk = imenc_bin;

%经过BSC信道
for i = 1:length(imenc_bin)
    w = randint(1,1,[1 100]);    %建立概率模型,设误码率Pe为10^-3
    if(w<=1)
        imenc_bin(1,i) = ~imenc_bin(1,i);
    end
end
    


% %经过信道,加白噪声
% snr_db = ??;
% snr = 10^(snr_db/10);
% signal_power = (norm(im_bpsk)^2)/length(im_bpsk);
% noise_power = signal_power/snr;
% noise = sqrt(noise_power)*randn(1,length(N*n));
% im_noi = noise + im_bpsk;


%接收端解码
for i = 1:length(imenc_stream)  %二进制转换成一维十进制行向量
    temp = imenc_bin(1,(i-1)*8+1:i*8);
    im_rec(1,i) = bin2dec(dec2bin(temp)');
end

imrec_gf = gf(im_rec,8);
im_dec = [];
for i = 1:N
        temp = imrec_gf(1,(i-1)*n+1:i*n);
        im_dec = [im_dec rsdec(temp,n,k)];
end
im_dec = double(im_dec.x);

%解码后图像文件还原
im_reconstr = im_dec(1:length(im));
f = fopen('lena_reconstr.jpc','w+');
fwrite(f,im_reconstr);
fclose(f);

%计算PSNR
Lmax =n; %对于256个灰度级的黑白图像,Lmax =255
mse = 0;
for i = 1:length(im_reconstr)
    mse = mse + (im_reconstr(i)- im(i)).^2;
end
mse = mse/length(im_reconstr); 
Psnr = 10*log10(Lmax.^2/mse);


        
        
    
    






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -