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 + -
显示快捷键?