MATLAB中V-Blast的ZF和MMSE检测算法仿真代码
matlab标准数据集验证算法

matlab标准数据集验证算法MATLAB是一种功能强大的数值计算和科学编程软件,广泛应用于各个领域的数据分析和算法验证。
在机器学习和模式识别领域,MATLAB提供了许多标准数据集,用于验证和评估各种算法的性能。
本文将介绍如何使用MATLAB标准数据集来验证算法。
首先,我们需要了解MATLAB提供的一些常用标准数据集。
MATLAB中有许多经典的数据集,如鸢尾花数据集(Iris)、手写数字数据集(MNIST)、波士顿房价数据集(Boston Housing)等。
这些数据集都是经过精心筛选和处理的,可以用于不同类型的机器学习和模式识别任务。
接下来,我们需要加载所需的标准数据集。
在MATLAB中,可以使用内置函数或从外部文件加载数据集。
例如,要加载鸢尾花数据集,可以使用以下代码:```matlab\nload fisheriris\n```加载完成后,可以通过查看变量`fisheriris`来获取该数据集的详细信息。
然后,我们可以将加载的数据集分为训练集和测试集。
通常情况下,我们将大部分样本用于训练算法,并将剩余样本用于测试算法性能。
在MATLAB中,可以使用`cvpartition`函数将数据集划分为训练集和测试集。
例如,将鸢尾花数据集划分为70%的训练集和30%的测试集,可以使用以下代码:```matlab\nc =cvpartition(species,'Holdout',0.3);\ntrainIdx = training(c);\ntestIdx = test(c);\n```然后,我们可以使用训练集来训练算法,并使用测试集来评估算法的性能。
在MATLAB中,有许多内置的机器学习和模式识别算法可以使用,如支持向量机(SVM)、K近邻(KNN)、决策树(Decision Tree)等。
我们可以根据具体任务选择适当的算法,并使用训练集进行模型训练。
例如,使用支持向量机算法对鸢尾花数据集进行分类:```matlab\nsvmModel =fitcsvm(meas(trainIdx,:),species(trainIdx));\n```最后,我们可以使用测试集来评估算法的性能。
如何通过MATLAB进行模拟与仿真

如何通过MATLAB进行模拟与仿真MATLAB是一种用于科学计算、数据分析和可视化的强大工具,它也是进行模拟和仿真的理想选择。
通过MATLAB,用户可以编写脚本或函数来描述和模拟各种现象,并通过可视化结果来验证和分析模拟过程。
在本文中,我们将介绍如何使用MATLAB进行模拟和仿真,包括建模、求解、可视化和分析。
首先,建立一个模型是进行模拟和仿真的第一步。
在MATLAB中,可以使用符号计算工具箱或数值计算方法来建立模型。
符号计算工具箱提供了一种使用符号表达式而不是数值进行计算的方法,这对于一些复杂系统的建模非常有用。
数值计算方法则使用数值解来近似求解模型。
在MATLAB中,可以通过定义变量和方程来建立模型。
例如,假设我们要建立一个简单的弹簧振动系统的模型,可以使用如下的方程:m*x''+k*x=0其中,m是质量,x是位移,k是弹簧常数。
我们可以使用MATLAB的符号计算工具箱来定义这个方程:syms x(t) m keqn = m * diff(x, t, t) + k * x == 0这样,我们就建立了一个描述弹簧振动系统的方程。
接下来,我们需要求解这个方程。
在MATLAB中,可以使用ode45函数来求解常微分方程。
例如,使用ode45函数求解上面的方程,并绘制振动的位移随时间的变化曲线:tspan = [0 10]; % 时间范围x0=1;%初始位移v0=0;%初始速度parameters = {m, k}; % 参数figure;plot(t, x(:, 1))xlabel('时间')ylabel('位移')title('弹簧振动')function dxdt = spring_ode(t, x, m, k)dxdt = [x(2); -k/m * x(1)];end在上面的代码中,我们定义了一个名为spring_ode的函数来描述弹簧振动的常微分方程。
雷达系统仿真matlab代码

%======================================================================= ====================%% 该程序完成16个脉冲信号的【脉压、动目标显示/动目标检测(MTI/MTD)】%======================================================================= ====================%% 程序中根据每个学生学号的末尾三位(依次为XYZ)来决定仿真参数,034% 目标距离为[3000 8025 9000+(Y*10+Z)*200 8025],4个目标% 目标速度为[50 0 (Y*10+X+Z)*6 100]%======================================================================= ====================%close all; %关闭所有图形clear all; %清除所有变量clc;%======================================================================= ============%% 雷达参数 % %======================================================================= ============%C=3.0e8; %光速(m/s)RF=3.140e9/2; %雷达射频 1.57GHzLambda=C/RF;%雷达工作波长PulseNumber=16; %回波脉冲数BandWidth=2.0e6; %发射信号带宽带宽B=1/τ,τ是脉冲宽度TimeWidth=42.0e-6; %发射信号时宽PRT=240e-6; % 雷达发射脉冲重复周期(s),240us对应1/2*240*300=36000米最大无模糊距离PRF=1/PRT;Fs=2.0e6; %采样频率NoisePower=-12;%(dB);%噪声功率(目标为0dB)% ---------------------------------------------------------------% SampleNumber=fix(Fs*PRT);%计算一个脉冲周期的采样点数480;TotalNumber=SampleNumber*PulseNumber;%总的采样点数480*16=;BlindNumber=fix(Fs*TimeWidth);%计算一个脉冲周期的盲区-遮挡样点数;%====================================================================== =============%% 目标参数 % %====================================================================== =============%TargetNumber=4;%目标个数SigPower(1:TargetNumber)=[1 1 1 0.25];%目标功率,无量纲TargetDistance(1:TargetNumber)=[3000 8025 15800 8025];%目标距离,单位m 距离参数为[3000 8025 9000+(Y*10+Z)*200 8025]DelayNumber(1:TargetNumber)=fix(Fs*2*TargetDistance(1:TargetNumber)/C); % 把目标距离换算成采样点(距离门) fix函数向0靠拢取整TargetVelocity(1:TargetNumber)=[50 0 204 100];%目标径向速度单位m/s 速度参数为[50 0 (Y*10+X+Z)*6 100]TargetFd(1:TargetNumber)=2*TargetVelocity(1:TargetNumber)/Lambda; %计算目标多卜勒频移2v/λ%====================================================================== ==============%% 产生线性调频信号 %%====================================================================== ==============%number=fix(Fs*TimeWidth);%回波的采样点数=脉压系数长度=暂态点数目+1if rem(number,2)~=0 %rem求余number=number+1;end%把number变为偶数for i=-fix(number/2):fix(number/2)-1Chirp(i+fix(number/2)+1)=exp(j*(pi*(BandWidth/TimeWidth)*(i/Fs)^2));%ex p(j*fi)*,产生复数矩阵Chirpendcoeff=conj(fliplr(Chirp));%把Chirp矩阵翻转并把复数共轭,产生脉压系数figure(1);%脉压系数的实部plot(real(Chirp));axis([0 90 -1.5 1.5]);title('脉压系数实部');%-------------------------产生目标回波串-----------------------------------------------------------------------------------------%%-------------------------产生前3个目标的回波串-------%SignalAll=zeros(1,TotalNumber);%所有脉冲的信号,先填0for k=1:TargetNumber-1 % 依次产生各个目标SignalTemp=zeros(1,SampleNumber);% 一个PRTSignalTemp(DelayNumber(k)+1:DelayNumber(k)+number)=sqrt(SigPower(k))*Ch irp;%一个脉冲的1个目标(未加多普勒速度)(DelayNumber(k)+1):(DelayNumber(k)+number)Signal=zeros(1,TotalNumber);for i=1:PulseNumber % 16个回波脉冲Signal((i-1)*SampleNumber+1:i*SampleNumber)=SignalTemp; %每个目标把16个SignalTemp排在一起endFreqMove=exp(j*2*pi*TargetFd(k)*(0:TotalNumber-1)/Fs);%目标的多普勒速度*时间=目标的多普勒相移Signal=Signal.*FreqMove;%加上多普勒速度后的16个脉冲1个目标SignalAll=SignalAll+Signal;%加上多普勒速度后的16个脉冲4个目标end% %-------------------------产生第4个目标的回波串-------%fi=pi/3;SignalTemp=zeros(1,SampleNumber);% 一个脉冲SignalTemp(DelayNumber(4)+1:DelayNumber(4)+number)=sqrt(SigPower(4))*ex p(j*fi)*Chirp;%一个脉冲的1个目标(未加多普勒速度)Signal=zeros(1,TotalNumber);for i=1:PulseNumberSignal((i-1)*SampleNumber+1:i*SampleNumber)=SignalTemp;endFreqMove=exp(j*2*pi*TargetFd(4)*(0:TotalNumber-1)/Fs);%目标的多普勒速度*时间=目标的多普勒相移Signal=Signal.*FreqMove;SignalAll=SignalAll+Signal;figure(2);subplot(2,1,1);plot(real(SignalAll),'r-');title('目标信号的实部');grid on;zoom on;subplot(2,1,2);plot(imag(SignalAll));title('目标信号的虚部');grid on;zoom on;%====================================================================== ==============%% 产生系统噪声信号 %%====================================================================== ==============%SystemNoise=normrnd(0,10^(NoisePower/10),1,TotalNumber)+j*normrnd(0,10^ (NoisePower/10),1,TotalNumber);%均值为0,标准差为10^(NoisePower/10)的噪声%====================================================================== ==============%% 总的回波信号 %%====================================================================== ==============%Echo=SignalAll+SystemNoise;% +SeaClutter+TerraClutter,加噪声之后的回波for i=1:PulseNumber %在接收机闭锁期,接收的回波为0Echo((i-1)*SampleNumber+1:(i-1)*SampleNumber+number)=0; %发射时接收为0endfigure(3);%加噪声之后的总回波信号subplot(2,1,1);plot(real(Echo),'r-');title('总回波信号的实部,闭锁期为0'); subplot(2,1,2);plot(imag(Echo));title('总回波信号的虚部,闭锁期为0');%================================时域脉压=================================%pc_time0=conv(Echo,coeff);%pc_time0为Echo和coeff的卷积pc_time1=pc_time0(number:TotalNumber+number-1);%去掉暂态点 number-1个figure(4);%时域脉压结果的幅度subplot(2,1,1);plot(abs(pc_time0),'r-');title('时域脉压结果的幅度,有暂态点');%pc_time0的模的曲线subplot(2,1,2);plot(abs(pc_time1));title('时域脉压结果的幅度,无暂态点');%pc_time1的模的曲线% ================================频域脉压=================================%Echo_fft=fft(Echo,8192);%理应进行TotalNumber+number-1点FFT,但为了提高运算速度,进行了8192点的FFTcoeff_fft=fft(coeff,8192);pc_fft=Echo_fft.*coeff_fft;pc_freq0=ifft(pc_fft);figure(5);subplot(2,1,1);plot(abs(pc_freq0(1:TotalNumber+number-1)));title('频域脉压结果的幅度,有前暂态点');subplot(2,1,2);plot(abs(pc_time0(1:TotalNumber+number-1)-pc_freq0(1:TotalNumber+number-1)),'r');title('时域和频域脉压的差别');pc_freq1=pc_freq0(number:TotalNumber+number-1);%去掉暂态点 number-1个,后填充点若干(8192-number+1-TotalNumber)% ================按照脉冲号、距离门号重排数据=================================%for i=1:PulseNumberpc(i,1:SampleNumber)=pc_freq1((i-1)*SampleNumber+1:i*SampleNumber);%每个PRT为一行,每行480个采样点的数据endfigure(6);plot(abs(pc(1,:)));title('频域脉压结果的幅度,没有暂态点');% ================MTI(动目标显示),对消静止目标和低速目标---可抑制杂波=================================%for i=1:PulseNumber-1 %滑动对消,少了一个脉冲mti(i,:)=pc(i+1,:)-pc(i,:);endfigure(7);mesh(abs(mti));title('MTI result');% ================MTD(动目标检测),区分不同速度的目标,有测速作用=================================%mtd=zeros(PulseNumber,SampleNumber);for i=1:SampleNumberbuff(1:PulseNumber)=pc(1:PulseNumber,i);buff_fft=fft(buff);mtd(1:PulseNumber,i)=buff_fft(1:PulseNumber);endfigure(8);mesh(abs(mtd));title('MTD result');%=======================================虚实矩阵转换========================================%coeff_fft_c=zeros(1,2*8192);for i=1:8192coeff_fft_c(2*i-1)=real(coeff_fft(i));coeff_fft_c(2*i)=imag(coeff_fft(i));endecho_c=zeros(1,2*TotalNumber);for i=1:TotalNumberecho_c(2*i-1)=real(Echo(i));echo_c(2*i)=imag(Echo(i));end%===========================以下是为DSP程序提供回波数据、脉压系数===============================%% fo=fopen('F:\my study\Visual_DSP_test\test_1\coeff_fft_c.dat','wt');%频域脉压系数% for i=1:2*8192% fprintf(fo,'%f,\r\n',coeff_fft_c(i));% end% fclose(fo);%% fo=fopen('F:\my study\Visual_DSP_test\test_1\echo_c.dat','wt');%16次回波的% for i=1:2*TotalNumber% fprintf(fo,'%f,\r\n',echo_c(i)); % end% fclose(fo);。
V-BLAST系统中采用发射功率分配的MMSE迭代软干扰抵消算法

VB AS - L T系统 中采用发射功率分配 的 MMS E迭代软干扰抵消算法
唐 万斌
摘 要
张
亮
李少谦
( 电子科技 大学通信抗干扰技术பைடு நூலகம்国家级重点实验 室 成都 6 0 5) 10 4
作为一种软输入 软输 出的 MI MO检测算法,MMS E迭代软干扰抵消算法在 MI ub MOT ro接 收机 中得 到广
V- AS y t m t r n m i a t n a n e e v n e n s ti r v d t a ft e p r r a c e u r me t o BL T s se wi 4 t s t n e n s a d 4 r c ie a t n a .i s p o e h ti e f m n e r q i h a h o e n f B ER=1 ~, h d f d V BLAS y t m t r n mi p we l c t n o t e f r s h o v n i n l - AS y tm 0 t emo i e - i T s se wi ta s t o r l a i u p ro h ao o m e c n e t a BL T s se t o V
Abtat I a c i ign a c pc yV B A T trorcie, otnS f O t ss )s n l eetri nee 、 src n nahe n er a ai - L S ub eevr S fI/o - u (lo i a dtc ed d v - t - t g o s Mii m MenS ur r r MMS )trt esfi efrnecnel p p lr IOd t trnsc s m. ik nmu a q ae r ( E o E i ai t n r ec acl rs o u S e co uhs t Ln e v o t e e ia aS e i ye
蝙蝠算法matlab程序

蝙蝠算法matlab程序蝙蝠算法(Bat Algorithm)是一种启发式算法,用于解决优化问题。
它模拟了蝙蝠捕食时的行为,通过调整蝙蝠位置和频率来寻找最优解。
在Matlab中,可以实现蝙蝠算法的程序来解决各种优化问题。
以下是一个简单的蝙蝠算法的Matlab程序示例:matlab.function [best, fmin]=bat_algorithm()。
% 初始化参数。
N=40; % 蝙蝠个数。
n=2; % 优化问题的维度。
A=0.5; % 蝙蝠的响度。
r=0.5; % 蝙蝠的脉冲发射率。
Qmin=0; % 最小频率。
Qmax=2; % 最大频率。
% 随机生成初始种群。
if isvector(Lb)。
Lb=Lb'; Ub=Ub';end.% 随机生成初始种群。
Q=zeros(N,1); v=zeros(N,n); Sol=zeros(N,n);for i=1:N.Sol(i,:)=Lb+(Ub-Lb).rand(1,n); end.% 初始化适应度值。
fitness=zeros(N,1);% 最优解。
best=zeros(1,n);fmin=inf;% 开始迭代。
for t=1:Max_iteration.% 随机选择频率。
for i=1:N.Q(i)=Qmin+(Qmin-Qmax)rand;v(i,:)=v(i,:)+(Sol(i,:)-best)Q(i); S=Sol(i,:)+v(i,:);% 边界处理。
for j=1:n.if S(j)<Lb(j)。
S(j)=Lb(j);elseif S(j)>Ub(j)。
S(j)=Ub(j);end.end.if rand<A.S=best+0.001randn(1,n);end.% 评估新解。
Fnew=benchmark_func(S);% 判断是否更新最优解。
if (Fnew<=fitness(i)) && (rand<r)。
matlab误码率仿真代码

matlab误码率仿真代码以下是一个简单的 MATLAB 误码率仿真代码示例,用于模拟二进制传输系统的误码率。
在这个示例中,我们将使用 BPSK(二进制相移键控)调制来进行仿真。
matlab.% 设置参数。
SNR_dB = 0:1:10; % 信噪比范围。
numBits = 1e6; % 要传输的比特数。
ber = zeros(size(SNR_dB)); % 初始化误码率向量。
for i = 1:length(SNR_dB)。
% 生成随机的二进制数据。
txBits = randi([0,1],1,numBits);% BPSK调制。
txSignal = 2txBits 1;% 添加高斯噪声。
noiseVar = 10^(-SNR_dB(i)/10);noise =sqrt(noiseVar/2)(randn(1,numBits)+1irandn(1,numBits)); rxSignal = txSignal + noise;% BPSK解调。
rxBits = real(rxSignal) > 0;% 计算误码率。
ber(i) = sum(rxBits ~= txBits)/numBits;end.% 绘制误码率曲线。
semilogy(SNR_dB,ber,'o-');xlabel('SNR (dB)');ylabel('Bit Error Rate');title('BPSK误码率仿真');grid on;在这个示例中,我们首先设置了信噪比范围和要传输的比特数。
然后我们使用 for 循环来遍历不同的信噪比值。
在每个循环中,我们生成随机的二进制数据,并将其进行 BPSK 调制。
接着我们添加高斯噪声,并进行 BPSK 解调。
最后我们计算误码率,并将结果绘制成误码率曲线。
这个示例代码可以帮助你了解如何使用 MATLAB 进行简单的误码率仿真。
慢衰落信道下MMSE-VBLAST检测算法

2 1 最 小均 方 误 差 检 测 算 法 ( . MMS E)
来山西 高 校 科技 研 究 开 发 项 目资助 ( 0 9 0 3 2 0 12 )
2 2 抑 制 和 删 除 干扰 的 最 小 均 方 误 差 检 测 算 法 .
( MMS E—I C)
其 中 : 为 线 性 组 合 系 数 矩 阵 , = [ 日 + W 埘
h H , 为噪声方 差 , 为单位矩 阵。时刻天线 ] t
i 传输信 号的判决 矢量 为 :
Y = 1r 。 t
… … … … … … … … … … … … …
由于 它的 编译 码 都 较 容 易 实 现 ,因此 受 到 广 泛 的重
H
编码
检测
卑l 并
串, 并
其中: r=[ r, , ] H为信 道矩 阵 , r, … r ; S为发送 的功
图 l V —B S LA T系统 结 构 框 图
率矩阵, S=d g√。 s …, )n i ( s, 。 ;为零均值加性 a √ ,
高斯 白噪声 , = [ 。n , , ] 。 n n , … n
中 图分 类 号 :T 9I . 2 N 12 文献 标 识 码 :A
0 引言
最 小均方 误差检测 算法要求保 证发送矢量 和接 收信号矢 量线性 组合 W r 的均方误差最 小 , : 即
m n ( —W r i{ ) 。… … … … … … … … … … ( ) } 2
2 1 年 第 3期 01
朱 彦 军 , : 衰 落 信 道 下 MMS 等 慢 E—V L S B A T检 测 算 法
・2 ・ 5
matlab 能量检测算法 -回复

matlab 能量检测算法-回复Matlab能量检测算法能量检测算法是一种常用的无线通信系统中的信号检测方法。
它通过测量接收信号的能量来判断是否存在待检测信号。
在Matlab中,能够利用其强大的信号处理和计算功能来实现能量检测算法。
本文将分为以下几个部分来详细介绍如何使用Matlab实现能量检测算法:1. 能量检测算法的原理:能量检测算法是基于信号的能量检测。
它通过计算信号的能量来判断信号是否存在。
当信号的能量超过一个阈值时,就认为信号存在。
因此,能量检测算法适用于信号的能量较高、噪声较强的情况。
2. Matlab中的能量检测算法函数:在Matlab中,有一些内置的函数可以用来实现能量检测算法。
其中最常用的函数是`envelope`函数。
`envelope`函数可以计算信号的包络,即信号的幅度变化的上限。
通过比较信号的包络和一个阈值,就可以判断信号是否存在。
3. 能量检测算法的实现步骤:下面我们将一步一步介绍如何使用Matlab实现能量检测算法:3.1. 导入信号数据:首先,我们需要将待检测的信号数据导入到Matlab中。
可以使用`audioread`函数读取音频文件, 或者通过生成随机信号来模拟实际情况。
3.2. 计算信号的能量:然后,我们可以使用Matlab的信号处理函数如`abs`和`power`来计算信号的能量。
`abs`函数可以将信号的每个样本取绝对值,`power`函数可以计算信号每个样本的平方。
3.3. 计算信号的包络:接下来,我们可以使用`envelope`函数来计算信号的包络。
`envelope`函数需要输入信号数据和一个窗口长度,它会返回信号的包络序列。
我们可以通过调整窗口长度来适应不同的信号特性。
3.4. 设置能量阈值:根据实际应用的需求,我们需要设置一个能量阈值来判断信号是否存在。
可以使用测量的信号能量的平均值乘以一个系数来作为阈值。
一般情况下,系数的选择要根据具体应用场景和噪声情况进行优化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB中V-Blast的ZF和MMSE检测算法仿真代码
发送天线m1,接受天线m2,高斯白噪声,ZF时的仿真程序
% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长)
tx=m1; rx=m2; L=10000;
Modulation='BPSK';
EbN0=[0:5:20];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast发射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输============================================================ % 快衰落高斯信道H
H=sqrt(1/2)*(randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 检测
%ZF================================================================== disp('berz');
berz=[];
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_noised=awgn(R,m,1);
x=[];
a=zeros(tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% 迫零矩阵G
G=pinv(H(:,:,t));
y=G*r;
xtemp=(y>=0)-(y<0)+0;
x=[x,xtemp];
end
% 从x求A的估计a
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
% 比较A和a计算错值率temp_ber
[errbit,temp_ber]=biterr(A,a);
berz=[berz,temp_ber];
end
semilogy(EbN0,berz,'o- r'),grid on
xlabel('Eb/N0(dB)');
ylabel('误比特率');
title('不同天线配置ZF系统仿真传输特性')
text(9,0.15,'\fontsize{14}\color{red}\fontname{隶书}2*2')
hold on
发送天线m1,接受天线m2,高斯白噪声,MMSE时的仿真程序
% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长)
tx=m1; rx=m2; L=10000;
Modulation='BPSK';
EbN0=[0:5:20];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast发射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输============================================================ % 快衰落高斯信道H
H=sqrt(1/2)*(randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 检测
%MMSE=============================================================== disp('berz');
berz=[];
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_noised=awgn(R,m,3);
x=[];
a=zeros(tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
HH=H(:,:,t);
xtemp=zeros(tx,1);
w=inv(HH'*HH+(1/snr)*eye(tx))*HH';
y=w*r;
xtemp=(y>=0)-(y<0)+0;
x=[x,xtemp];
end
% 从x求A的估计a
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
% 比较A和a计算错值率temp_ber
[errbit,temp_ber]=biterr(A,a);
berz=[berz,temp_ber];
end
semilogy(EbN0,berz,'o- b'),grid on
xlabel('Eb/N0(dB)');
ylabel('误比特率');
title('不同天线配置MMSE系统仿真传输性能')
text(8,0.08,'\fontsize{14}\color{blue}\fontname{隶书}1*2')
hold on。