「已注销」 2020-04-23 14:04 采纳率: 0%
浏览 2091

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条回答 默认 最新

  • 欣宝爸 2020-04-26 20:42
    关注

    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)写代码,调试代码。

    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型