多径对信号的影响

发布于:2022-12-26 ⋅ 阅读:(668) ⋅ 点赞:(0)

前言:

上一篇写了写最基本的通信系统的流程,从调制到最终的解调需要经历过信道,加噪声,载波调制,信号滤波,解调判决等,今天想写一下多径信道对信号时频域的影响。

1、多径的概念

无线通信中,信道是最基础的也是最重要的组成。多径也是通信处理中最常见的问题。多径简单来讲就是说信号从发出到终端收到通过了多条路径,其中的多条路径长度不同,会造成不同路径到达终端的时间不同,所以会造成终端接受信号有时间选择性,这会导致通信效果下降。下面通过几个简单的仿真看看多径的影响。

2、链路实现

先得到调制后的信号及其星座图,采用16QAM调制:

信号时间上的幅度可以用下图表示:

 

OFDM符号,加CP后的符号,加窗后的OFDM符号时域形状:

 

signal_Tx表示单径信号,现在有两路信号,一路幅度0.2,时延20ms,另一路幅度0.1,时延50ms,则可以得到三路多径信号的时域合并结果为signal_Tx_mult:

path2 = 0.2*[zeros(1,20) signal_Tx(1:end-20) ];

path3 = 0.1*[zeros(1,50) signal_Tx(1:end-50) ];

signal_Tx_mult = signal_Tx + path2 + path3; % 多径信号

下图表示单径信号与多径信号时域差异:

 

下图表示加窗后的信号

 

下图表示接收机收到的单径信号与多径信号的差异。

 

 

3、结果分析

下图给出单径与多径下的误码率:

可以看出,单径信道在该信噪比下全部解对,多径下,部分符号解调错误,多径会带来解调性能的下降。

4、实现代码

部分代码,前文中的图片均由下述代码实现:

clc

clear all;

close all;

carrier_count = 200; % 子载波数

symbol_count = 100; %总符号数

ifft_length = 512; % IFFT长度

CP_length = 128; % 循环前缀

CS_length = 20; % 循环后缀

rate = [];

SNR =20;

bit_per_symbol = 4;

alpha = 1.5/32; % 升余弦窗系数

pkg load communications

% ================产生随机序列=======================

bit_length = carrier_count*symbol_count;

bit_sequence = floor(rand(1,bit_length)*16)'; % 列向量

% =================串并转换==========================

% ==================16QAM调制=========================

% 1-28置零 29-228有效 229-285置零 286-485共轭 486-512置零

carrier_position = 29:228;

conj_position = 485:-1:286;

bit_moded = qammod(bit_sequence,16);

figure(1);

scatter(real(bit_moded),imag(bit_moded));

title('modulation');

grid on;

% ===================IFFT===========================

ifft_position = zeros(ifft_length,symbol_count);

bit_moded = reshape(bit_moded,carrier_count,symbol_count);

figure(2);

stem(abs(bit_moded(:,1)));

title('time domain');

grid on;

ifft_position(carrier_position,:)=bit_moded(:,:);

ifft_position(conj_position,:)=conj(bit_moded(:,:));

signal_time = ifft(ifft_position,ifft_length);

figure(3);

subplot(3,1,1)

plot(abs(signal_time(:,1)),'b');

title('ori single ofdm symbol');

xlabel('Time');

ylabel('Amplitude');

axis([0 500 -0.5 0.5])

% ==================加循环前缀和后缀==================

signal_time_C = [signal_time(end-CP_length+1:end,:);signal_time];

signal_time_C = [signal_time_C; signal_time_C(1:CS_length,:)]; % 单个完整符号为512+128+20=660

subplot(3,1,2);

plot(abs(signal_time_C(:,1)));

xlabel('Time');

ylabel('Amplitude');

title('plus CP CS single ofdm symbol');

axis([0 500 -0.5 0.5])

% =======================加窗========================

signal_window = zeros(size(signal_time_C));

% 通过矩阵点乘

signal_window = signal_time_C.*repmat(rcoswindow(alpha,size(signal_time_C,1)),1,symbol_count);

subplot(3,1,3)

plot(abs(signal_window(:,1)))

title('windowed single ofdm symbol')

xlabel('Time');

ylabel('Amplitude');

axis([0 500 -0.5 0.5])

% ===================发送信号,多径信道====================

signal_Tx = reshape(signal_window,1,[]); % 并串转换,变成时域一个完整信号,待传输

signal_origin = reshape(signal_time_C,1,[]); % 未加窗完整信号

windowed_Tx = zeros(size(signal_Tx));

path2 = 0.2*[zeros(1,20) signal_Tx(1:end-20) ];

path3 = 0.1*[zeros(1,50) signal_Tx(1:end-50) ];

signal_Tx_mult = signal_Tx + path2 + path3; % 多径信号

figure(4)

subplot(2,1,1)

plot(abs(signal_Tx))

title('single path single ofdm symbol')

xlabel('Time/samples')

ylabel('Amplitude')

axis([0 1000 -0.5 0.5])

subplot(2,1,2)

plot(abs(signal_Tx_mult))

title('multi path single ofdm symbol')

xlabel('Time/samples')

ylabel('Amplitude')

axis([0 1000 -0.5 0.5])

% =====================发送信号频谱========================

% 每个符号求频谱再平均,功率取对数

orgin_aver_power = 20*log10(mean(abs(fft(signal_time_C'))));

% ====================加窗信号频谱=========================

figure(5) % 归一化

orgin_aver_power = 20*log10(mean(abs(fft(signal_window'))));

plot((1:length(orgin_aver_power))/length(orgin_aver_power),orgin_aver_power)

hold on

axis([0 1 -40 5])

grid on

title('windowed spectrum')

% ========================加AWGN==========================

signal_power_sig = var(signal_Tx); % 单径发送信号功率

signal_power_mut = var(signal_Tx_mult); % 多径发送信号功率

SNR_linear = 10^(SNR/10);

noise_power_mut = signal_power_mut/SNR_linear;

noise_power_sig = signal_power_sig/SNR_linear;

noise_sig = randn(size(signal_Tx))*sqrt(noise_power_sig);

noise_mut = randn(size(signal_Tx_mult))*sqrt(noise_power_mut);

Rx_data_sig = signal_Tx+noise_sig;

Rx_data_mut = signal_Tx_mult+noise_mut;

% =======================串并转换==========================

% ====================去循环前缀和后缀======================

% =========================FFT=============================

% =========================恢复采样===========================

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到