reedmuller.m

来自「采用reed-muller码降低ofdm的par方法」· M 代码 · 共 52 行

M
52
字号
%function [output,par]=reedmuller(input);

input=randint(1,4000);
G0=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
G1=[0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1;
    0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1;
    0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1;
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1];
G2=[0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1;
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1;
    0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1;
    0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1;
    0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1;
    0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1];
pe=[1 0 0 1 0 1;
    1 0 0 0 1 1;
    0 1 0 0 1 1;
    0 1 0 1 1 0;
    0 0 1 1 1 0;
    0 0 1 1 0 1;
    1 1 0 0 0 1;
    1 0 1 0 0 1];
G=[G0;G1;G2];
       
len=length(input);
n=len/8;
peak=zeros(1,n);
aver=zeros(1,n);
par=zeros(1,n);
output=zeros(1,len*2);
block=zeros(1,8);
tribit=zeros(1,3);
blockout=zeros(1,11);
for j=1:n
    block=input(j*8-7:j*8);
    tribit=block(6:8);
    s=bi2de(tribit,'left-msb')+1;
    blockout(1:5)=block(1:5);
    blockout(6:11)=pe(s,:);
    freq=mod(blockout*G,2);
    freq=-freq*2+1;
    stime=ifft(freq,16);
    output(j*16-15:j*16)=stime;
    peak(j)=max(stime.*conj(stime));
    aver(j)=mean(stime.*conj(stime));
    par(j)=10*log10(peak(j)/aver(j));
end
    
j=1:n;
plot(j,par(j));
    
    

⌨️ 快捷键说明

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