function [data_bits, raw_bits] = receiver(rx_signal, cir, sim_options);
global sim_consts;
[n_tx_antennas, n_rx_antennas] = get_n_antennas(sim_options);
% Phase noise model
if sim_options.UsePhaseNoise
phase_noise = phase_noise_model(sim_options.PhaseNoisedBcLevel, ...
sim_options.PhaseNoiseCFreq, sim_options.PhaseNoiseFloor, size(rx_signal,2));
rx_signal = rx_signal.*exp(j*repmat(phase_noise, size(rx_signal,1), 1));
end
%packet search
rx_signal = rx_find_packet_edge(rx_signal, sim_options);
% Frequency error estimation and correction
rx_signal = rx_frequency_sync(rx_signal, sim_options);
% Fine time synchronization
fine_time_est = rx_fine_time_sync(rx_signal, sim_options);
% Time synchronized signal
sync_time_signal = rx_signal(:,fine_time_est + sim_options.RxTimingOffset:length(rx_signal(1,:)));
% Return to frequency domain
[freq_tr_syms, freq_data_syms, freq_pilot_syms] = rx_timed_to_freqd(sync_time_signal, sim_options);
% Channel estimation
channel_est = rx_estimate_channel(freq_tr_syms, cir, sim_options);
% Phase tracker, returns phase error corrected symbols
freq_data_syms = rx_phase_tracker(freq_data_syms, freq_pilot_syms, channel_est, sim_options);
% receiver diversity processing
[freq_data_syms,freq_pilot_syms] = rx_diversity_proc(freq_data_syms, freq_pilot_syms, ...
channel_est, sim_options);
% Demodulate
soft_bits = rx_demodulate(freq_data_syms, sim_options);
% Deinterleave if bits were interleaved
if sim_options.InterleaveBits
deint_bits = rx_deinterleave(soft_bits, sim_options);
else
deint_bits = soft_bits;
end
% hard decision of soft bits, used to measure uncoded BER
raw_bits = deint_bits > 0;
% depuncture
depunc_bits = rx_depuncture(deint_bits, sim_options.ConvCodeRate);
% Subcarrier amplitudes are used to weight the soft decisions before Viterbi decoding
channel_amps = rx_gen_chan_amps(length(deint_bits), channel_est, sim_options);
if sim_options.InterleaveBits
channel_amps = rx_deinterleave(channel_amps, sim_options);
end
channel_amps = rx_depuncture(channel_amps, sim_options.ConvCodeRate);
% Weight soft decisions by subcarrier amplitudes
viterbi_input = channel_amps(1:(sim_options.PacketLength+6)*2).* ...
depunc_bits(1:(sim_options.PacketLength+6)*2);
% Vitervi decoding
data_bits = rx_viterbi_decode(viterbi_input);
IT狂飙
- 粉丝: 4842
- 资源: 2650
最新资源
- Git 分布式版本控制系统常见操作指南
- 电力市场出清程序 IEEE14节点考虑输电阻塞,求解机组边际电价和节点边际电价 采用拉格朗日乘子进行分析计算,目标函数为发电成本最小 运用matlab中的linprog()函数实现此程序,均为m
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
- 双层优化 大型电动汽车 时空调度 测试环境:MATLAB 关键词:双层优化,电动汽车,时空调度,配电网 考虑电动汽车有序充放电的机组组合和最优趋势,机组组合采用相同的线性化方法,采用二阶锥松弛的
- 基于MATLAB的四旋翼无人机PID控制
- 堆垛机-西门子PLC程序+输送线程序+触摸屏程序 物流仓储 涵盖通信,算法,运动控制,屏幕程序 实际项目程序 西门子S7-1200+G120+ET200S+劳易测激光测距 博途编程 采用用
- 分析储能接入对新能源消纳能力影响 目标函数:系统经济性最优包括燃料成本和弃风惩罚成本 约束:功率平衡,储能约束,机组出力上下限,机组爬坡约束,风电出力约束
- (matlab)三相并网逆变器svpwm控制+PI电流环控制(有参考文献) (1)符合入网电流谐波标准 (2)并网电流和电压同相 (3)采用锁相环PLL
- 三菱PlC程序大型项目QCPU+QD77MS16 项目说明如下: 1.包含一套完整的电气开发系统资料(包含plc程序,触摸屏程序,伺服模块设置程序,程序开发地址规划表) 2.这套开发程序是用一套完
- 基于遗传算法的配电网优化配置 软件:Matlab 介绍:分布式电源、无功补偿装置接入配电网,考虑配电网经济性、环境成本和电能质量为目标函数,使用遗传算法进行优化配置,在IEEE33节点系统进行了仿真验
- 遗传算法求解微电网日前调度 测试环境:MATLAB 用遗传算法求解电力系统简单日前调度问题,考虑微网发电成本的经济性,以微型燃气轮机发电成本、 储能运行维护成本和微网与主网之间买、卖电的交互成本为系统
- 直驱永磁风力发电机,基于Simulink建立了包括风力机、传 动系统、永磁同步发电机、整流逆变、电网等模块的永磁直驱风力发电机控制系统模型 附带文件说明
- 西门子modbus通讯 读取或写入仪表
- 三菱Q程序程序(某集团设备程序) 用三菱Q系列和威纶触摸屏编写 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释 由于程序代码可复制发后不可 此款为宏指令未加密
- 考虑降解成本的具有混合储能的微电网两层能源管理系统,采用了模型预测控制的方法
- 综合能源系统仿真,冷热电三联供仿真,simulink仿真
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈