OFDM多径瑞利信道Matlab仿真

OFDM经过并串变换后变成一串调制后的信号Tx_data(1,n),经过多径瑞利衰落信道,仿真这个信道然后输出Rx_data。
做了好几天实在做不出来了,拜托各位大佬帮忙看下。

SNR=10;
ts=1;
fd=0;
tau=[0 1 2];
pdb=[0 -1 -2];
signalinput=round(rand(1,12))
Modulated_Sequence=qammod(signalinput,16);
signaloutput_1=awgn(Modulated_Sequence,SNR);
chan = rayleighchan(ts,fd,tau,pdb)
signaloutput_2 = filter(chan,Modulated_Sequence);
demod_out_1=qamdemod(signaloutput_1,16)
demod_out_2=qamdemod(signaloutput_2,16)

请问一下都是需要什么参数?
其他还需要知道什么?
麻烦大佬写下代码让我学习一下,谢谢大佬!
本人学生,暂时拿不出那么多C币= - =
如果可以的话可以追加

下面是我新的代码

SNR=10;
signalinput=round(rand(1,20))
LengthOfSignal=length(signalinput);
data_temp1= reshape(signalinput,log2(16),LengthOfSignal/4)'; 
%以每组2比特进行分组,M=16
data_temp2= bi2de(data_temp1); 
%二进制转化为十进制
Modulated_Sequence=qammod(data_temp2,16);

Modulated_Sequence_a=ifft(Modulated_Sequence);

signaloutput_1=awgn(Modulated_Sequence_a,SNR);
%经过纯高斯白噪声信道

%经过瑞利衰落信道
fs = 1;                               % Sample rate (Hz)
pathDelays = [0 1];          % Path delays (s)
pathPower = [0 -1];         % Path power (dB)
fD = 0;                              % Maximum Doppler shift (Hz)
numSamples = 5;             % Number of samples

rchan = comm.RayleighChannel('SampleRate',fs, ...
'PathDelays',pathDelays,'AveragePathGains',pathPower, ...
'MaximumDopplerShift',fD,'FadingTechnique','Sum of sinusoids');

signaloutput_2 =rchan(Modulated_Sequence_a);

%signaloutput_2_zs = zscore(signaloutput_2);

%通过awgn信道解调
demodulation_data_awgn=qamdemod(signaloutput_1,16);    
De_data_awgn_1 = reshape(demodulation_data_awgn,[],1);
De_data_awgn_2 = de2bi(De_data_awgn_1);
De_Bit_awgn = reshape(De_data_awgn_2',1,[])

%经过瑞利衰落信道解调
demodulation_data_rl=qamdemod(signaloutput_2,16);    
De_data_rl_1 = reshape(demodulation_data_rl,[],1);
De_data_rl_2 = de2bi(De_data_rl_1);
De_Bit_rl = reshape(De_data_rl_2',1,[])

1;Modulated_Sequence需要通过映射到频域;例如,假设FFT长度是L_FFT=16;
xf = zeros(L_FFT,1); xf(1:6) =Modulated_Sequence(7:12); xf(L_FFT-6+1:end) = Modulated_Sequence(1:6);
2,转换到时域:xt = sqrt(L_FFT)*ifft(xf);
3. 通过信道; rt = filter(chan,xt);
4. 加白噪声; rt2=awgn(rt,SNR);
5,转换到频域: rf = fftshift(fft(rt2))/sqrt(L_FFT);
6,提取信号; signaloutput_3 = rf(1+2:12+2);
7,qamdemod就可以了

说实话,Matlab很多函数没有使用过。以前使用Matlab2009多一些,很多函数自己写。
我建议分几步写。不要急于将所有函数功能写上。
(1)第一步:生成随机0-1,调制,然后,解调,验证原始比特和解调比特一致性;
(2)第二步在调制/解调之间加FFT/IFFT,注意载波的映射位置。另外采用数学表达式形式,将调制数据采用不同OFDM载波进行子载波调制。当然FFT前面和IFFT后面其实包括串并转换和并串转换。这个操作我们有时称作OFDM符号载波映射和解映射。
(3)第三步:如果上面没有问题,可以在FFT和IFFT之间增加AWGN操作,验证AWGN信道下面OFDM系统性能。其实第一步也可以增加AWGN操作,验证一条基带信号经过AWGN信道的性能。
(4)第四步:去掉AWGN信道,在FFT/IFFT之间增加瑞利信道,看看理想无限高信噪比下,你系统的性能:解调比特和原始比特是否一致;
(5)第五步:复制上面代码,建立新的系统,按照我的建议,加AWGN信道。这个系统和上一系统进行比对,比较OFDM各子载波的SNR,同时可以计算整个系统的等效信噪比。

为什么我不直接改你的代码?我只告诉你如何写代码和调试代码。我认为这对你是非常有益。如果有错误,一定是你对通信系统原理没有理解对。Matlab或任何其他语言只是一种工具,语言工具,表达你的思想。当然也会出错。这也要靠你自己去检查。一个人话说错,重新说就行了。一定要靠自己。
你要相信自己。我认为你心里一定会想:我一定可以写出正确的代码。

学习写和调试代码,只有两条路:
(1)执行别人的代码。网上有无数的书,都附带代码,去跑一跑,多简单也要跑;
(2)写代码,调试代码。