【通信】Alamouti空频编码【含Matlab源码 801期】

本文详细介绍了如何在Matlab中实现Alamouti空频编码,包括代码片段,QPSK调制,OFDM传输,以及在瑞利衰落信道下的信道编码和解码过程。通过不同多径数的实验,展示了该编码方法的性能。
摘要由CSDN通过智能技术生成

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【通信】基于matlab Alamouti空频编码【含Matlab源码 801期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab信号处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab信号处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、Alamouti空频编码简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄三、部分源代码

clc
clear all
L=10000; % 符号周期数
N=256; % OFDM字载波个数
G=32; % CP长度
M=2; % 便于调制
Nt=3 ; % 多径信道数 3
Nr=26; % 多径信道数 26
snr=0:2:30;% 信噪比
%% 原始数据流
x_gene_bit= floor(rand(1,LNM)2);
x_QPSK_in=reshape(x_gene_bit,M,L
N);
for n_snr=1:length(snr)
n_snr
cnt=0;
%% QPSK星座映射
for ii=1:LN
if x_QPSK_in(:,ii)[0 0]’
x_QPSK(ii)=(1+1i)/sqrt(2);
elseif x_QPSK_in(:,ii)
[0 1]’
x_QPSK(ii)=(-1+1i)/sqrt(2);
elseif x_QPSK_in(:,ii)[1 0]’
x_QPSK(ii)=(1-1i)/sqrt(2);
elseif x_QPSK_in(:,ii)
[1 1]’
x_QPSK(ii)=(-1-1i)/sqrt(2);
end
end
%% 串并变换
x_OFDM_in=reshape(x_QPSK,N,L);
for ii=1:L
%% 基于Alamouti的编码
x_transmitter1(1:2:N)=x_OFDM_in(1:2:N,ii); %第一个发射天线
x_transmitter1(2:2:N)=-conj(x_OFDM_in(2:2:N,ii));
x_transmitter2(1:2:N)=x_OFDM_in(2:2:N,ii); %第二个发射天线
x_transmitter2(2:2:N)=conj(x_OFDM_in(1:2:N,ii));
%% 分别在第一个天线和第二个天线上进行OFDM x_transmitter1 x_transmitter1;
%% IFFT
X_IFFT_1=sqrt(N)ifft(x_transmitter1); % 功率归一化 sqrt(N)
X_IFFT_2=sqrt(N)ifft(x_transmitter2); % 功率归一化 sqrt(N)
%% 加循环前缀
X_add_cp_1=[X_IFFT_1([end-31:end]) X_IFFT_1];
X_add_cp_2=[X_IFFT_2([end-31:end]) X_IFFT_2];
%% 产生瑞利衰落的信道系数
h_1=(1/(sqrt(2
Nt)))
(randn(1,Nt) + j
randn(1,Nt)); %产生Nt个信道系数
h_2=(1/(sqrt(2
Nt)))
(randn(1,Nt) + j*randn(1,Nt)); %产生Nt个信道系数
H_1=fft(h_1,N)/sqrt(N); %对信道系数做FFT
H_2=fft(h_2,N)/sqrt(N);
%% 输出的信号
Yy=conv(X_add_cp_1,h_1)+conv(X_add_cp_2,h_2)+normrnd(0,sqrt(10((-snr(n_snr))/10)/2),1,N+Nt+G-1)+1i*normrnd(0,sqrt(10((-snr(n_snr))/10)/2),1,N+Nt+G-1);
%% 去循环前缀
Y_de_cp=Yy(33:288);
y_FFT=(1/sqrt(N))*fft(Y_de_cp);
%% 类似于Alamouti 解码的线性解码算法解调符号
y_FFT_odd= y_FFT(1:2:N);
y_FFT_even= y_FFT(2:2:N);
H_1_odd=H_1(1:2:N); %第一个发射天线信道的坐标为奇数
H_1_even=H_1(2:2:N); %第一个发射天线信道的坐标为偶数
H_2_odd=H_2(1:2:N); %第二个发射天线信道的坐标为奇数
H_2_even=H_2(2:2:N); %第二个发射天线信道的坐标为偶数
h_1 = abs(H_1_odd).^2 + abs(H_2_even).^2;
H2 = abs(H_1_even).^2 + abs( H_2_odd).^2;
x_est1 = (conj(H_1_odd).*y_FFT_odd + H_2_even.conj(y_FFT_even))./h_1;
x_est2 = (conj(H_2_odd).y_FFT_odd - H_1_even.conj(y_FFT_even))./H2;
xx(1:2:N) = x_est1; % 接收到的符号
xx(2:2:N) = x_est2;
%% 解调
x_de_QPSK_in=reshape(xx,1,N);
for k=1:N
if real(x_de_QPSK_in(k))>0&&imag(x_de_QPSK_in(k))>0
x_de_QPSK(:,k)=[0 0].‘;
elseif real(x_de_QPSK_in(k))>0&&imag(x_de_QPSK_in(k))<0
x_de_QPSK(:,k)=[1 0].’;
elseif real(x_de_QPSK_in(k))<0&&imag(x_de_QPSK_in(k))>0
x_de_QPSK(:,k)=[0 1].‘;
elseif real(x_de_QPSK_in(k))<0&&imag(x_de_QPSK_in(k))<0
x_de_QPSK(:,k)=[1 1].’;
end
end
%% 计算比特错误数
error=length(find(x_QPSK_in(😢(ii-1)N+1):iiN)~=x_de_QPSK));
cnt=cnt+error;
end
ber1(n_snr)=cnt/L/M/N;
end
%% 多径数为26
for n_snrr=1:length(snr)
n_snrr
cnt=0;
%% QPSK星座映射
for ii=1:L
N
if x_QPSK_in(:,ii)[0 0]’
x_QPSK(ii)=(1+1i)/sqrt(2);
elseif x_QPSK_in(:,ii)
[0 1]’
x_QPSK(ii)=(-1+1i)/sqrt(2);
elseif x_QPSK_in(:,ii)[1 0]’
x_QPSK(ii)=(1-1i)/sqrt(2);
elseif x_QPSK_in(:,ii)
[1 1]’
x_QPSK(ii)=(-1-1i)/sqrt(2);
end
end
%% 串并变换
x_OFDM_in=reshape(x_QPSK,N,L);
for ii=1:L
%% 基于Alamouti的编码
xx_transmitter1(1:2:N)=x_OFDM_in(1:2:N,ii); %第一个发射天线
xx_transmitter1(2:2:N)=-conj(x_OFDM_in(2:2:N,ii));
xx_transmitter2(1:2:N)=x_OFDM_in(2:2:N,ii); %第二个发射天线
xx_transmitter2(2:2:N)=conj(x_OFDM_in(1:2:N,ii));
%% 分别在第一个天线和第二个天线上进行OFDM x_transmitter1 x_transmitter2;
%% IFFT
X_IFFT_1=sqrt(N)ifft(xx_transmitter1); % 功率归一化 sqrt(N)
X_IFFT_2=sqrt(N)ifft(xx_transmitter2); % 功率归一化 sqrt(N)
%% 加循环前缀
X_add_cp_1=[X_IFFT_1([end-31:end]) X_IFFT_1];
X_add_cp_2=[X_IFFT_2([end-31:end]) X_IFFT_2];
%% 产生瑞利衰落的信道系数
h_1=(1/(sqrt(2
Nr)))
(randn(1,Nr) + j
randn(1,Nr)); %产生Nr个信道系数
h_2=(1/(sqrt(2
Nr)))
(randn(1,Nr) + j
randn(1,Nr)); %产生Nr个信道系数
H_1=fft(h_1,N)/sqrt(N); %对信道系数做FFT
H_2=fft(h_2,N)/sqrt(N);
%% 输出的信号
Y=conv(X_add_cp_1,h_1)+conv(X_add_cp_2,h_2)+normrnd(0,sqrt(10((-snr(n_snrr))/10)/2),1,N+Nr+G-1)+1i*normrnd(0,sqrt(10((-snr(n_snrr))/10)/2),1,N+Nr+G-1);
%% 去循环前缀
Y_de_cp=Y(33:288);
y_FFT=(1/sqrt(N))*fft(Y_de_cp);
%% 类似于Alamouti 解码的线性解码算法解调符号
y_FFT_odd= y_FFT(1:2:N);
y_FFT_even= y_FFT(2:2:N);
H_1_odd=H_1(1:2:N); %第一个发射天线信道的坐标为奇数
H_1_even=H_1(2:2:N); %第一个发射天线信道的坐标为偶数
H_2_odd=H_2(1:2:N); %第二个发射天线信道的坐标为奇数
H_2_even=H_2(2:2:N); %第二个发射天线信道的坐标为偶数
h_1 = abs(H_1_odd).^2 + abs(H_2_even).^2;
H2 = abs(H_1_even).^2 + abs( H_2_odd).^2;
x_est1 = (conj(H_1_odd).*y_FFT_odd + H_2_even.*conj(y_FFT_even))./h_1;
x_est2 = (conj(H_2_odd).*y_FFT_odd - H_1_even.*conj(y_FFT_even))./H2;
xx(1:2:N) = x_est1; % 接收到的符号
xx(2:2:N) = x_est2;
%% 解调
x_de_QPSK_in=reshape(xx,1,N);
for k=1:N
if real(x_de_QPSK_in(k))>0&&imag(x_de_QPSK_in(k))>0
x_de_QPSK(:,k)=[0 0].‘;
elseif real(x_de_QPSK_in(k))>0&&imag(x_de_QPSK_in(k))<0
x_de_QPSK(:,k)=[1 0].’;
elseif real(x_de_QPSK_in(k))<0&&imag(x_de_QPSK_in(k))>0
x_de_QPSK(:,k)=[0 1].‘;
elseif real(x_de_QPSK_in(k))<0&&imag(x_de_QPSK_in(k))<0
x_de_QPSK(:,k)=[1 1].’;
end
end
error=length(find(x_QPSK_in(😢(ii-1)N+1):iiN)~=x_de_QPSK));
cnt=cnt+error;
end
ber2(n_snrr)=cnt/L/M/N;
end

⛄四、运行结果

在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值