生成OFDM信号时,先得把数据映射到子载波上。128个子载波里实际用120个(掐头去尾防频谱泄露),用16QAM调制的话代码大概长这样
OFDM基于块状导频的信道估计算法仿真 本次仿真载频为2GHz带宽1MHz子载波数128个cp为16 子载波间隔为7.8125kHz 一个ofdm符号长度为128uscp长度为16us 采用16QAM调制方式 最大doppler频率为132Hz 多径信道为5径 导频符号间隔为10import numpy as np bits np.random.randint(0,2,120*4) # 每个符号4bit symbols np.reshape(bits, (120,4)).dot([8,4,2,1]) # 转十进制 qam_table np.array([-3-3j, -3-1j, -33j, -31j, -1-3j, -1-1j, -13j, -11j, 3-3j, 3-1j, 33j, 31j, 1-3j, 1-1j, 13j, 11j])/np.sqrt(10) tx_data qam_table[symbols]这里有个细节16QAM的归一化系数1/√10是为了保证符号能量为1。不过实际仿真时有些人会偷懒不归一化结果就是Eb/N0得重新换算。导频插入采用块状结构每隔10个子载波插一个。导频位置用PN序列更抗干扰但这次直接用BPSKpilot_pos np.arange(0, 128, 10) pilot_value np.random.choice([1,-1], len(pilot_pos)) ofdm_symbol np.zeros(128, dtypecomplex) ofdm_symbol[pilot_pos] pilot_value ofdm_symbol[1:-1] tx_data # 避开直流和最高频注意索引1到-2的位置用来放数据避免直流分量和最高频子载波。这时候如果直接做IFFT会得到时域信号但别忘加循环前缀time_signal np.fft.ifft(ofdm_symbol) cp time_signal[-16:] # 取最后16个样点作为CP tx_frame np.concatenate([cp, time_signal])CP长度16对应16us的保护间隔对于最大时延扩展来说够不够得看信道模型。这次用的是5径瑞利信道最大时延设定在CP范围内就行。重点来了信道估计部分。接收端拿到信号后先去掉CP做FFTrx_symbol np.fft.fft(rx_time_signal)接着在导频位置做LS估计H_pilot rx_symbol[pilot_pos] / pilot_value这时候得到的是离散点上的信道响应需要插值出所有子载波的信道。线性插值虽然糙但速度快H_est np.interp(np.arange(128), pilot_pos, H_pilot)不过当多普勒频移达到132Hz时相当于时速142km/h的移动速度信道在时域上变化剧烈可能需要更复杂的二维插值。但这次仿真假设信道在一个OFDM符号内基本不变。OFDM基于块状导频的信道估计算法仿真 本次仿真载频为2GHz带宽1MHz子载波数128个cp为16 子载波间隔为7.8125kHz 一个ofdm符号长度为128uscp长度为16us 采用16QAM调制方式 最大doppler频率为132Hz 多径信道为5径 导频符号间隔为10为了验证效果拿估计出的信道做均衡eq_data rx_symbol[1:-1] / H_est[1:-1]这时候看星座图可能会发现相位旋转因为多普勒还带来了载波频偏。不过仿真里没加频偏估计模块所以得另外处理。整个流程跑下来误码率曲线在SNR20dB时大概能到1e-3量级。但实际中要考虑导频开销——这次每10个子载波插一个导频相当于12.8%的开销属于典型值。如果想提升性能可以加密导频间隔但代价是有效数据速率下降。有个坑要注意多径信道的时延抽头必须对齐采样间隔。比如采样率1MHz对应1us的采样间隔假设多径时延是[0, 2, 4, 7, 11]us那么信道建模应该是channel_taps np.random.randn(5) 1j*np.random.randn(5) channel_taps / np.linalg.norm(channel_taps) # 归一化功率 delay_samples [0, 2, 4, 7, 11] # 对应时延这样才能正确模拟时域卷积。不过实际仿真时为了省事可能直接用现成的rayleighchan函数生成。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2437978.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!