有关matlab的简单程序设计~

有关matlab的简单程序设计~,第1张

一个简单的程序,进攻参考

for i=1:5

switch i

case 1

disp(' ')

case 2

disp(' ')

case 3

disp(' ')

case 4

disp(' ')

case 5

disp('')

end

end

size(x,1)代表矩阵X的行数

theta代表角度θ,其值为0到2π

x代表圆心,x(i,1)代表第i个圆心的横坐标,x(i,2)代表第i个圆心的纵坐标

y1(1)代表第i个圆的圆周上的点的纵坐标,y1(2)代表第i个圆的圆周上的点的横坐标

y(i,:) = y1意为把表示第i个圆的数组作为数组y的第i行元素。

clear all;

clc;

N_ofdm=2048; %OFDM的点数为2048

f_delta=15e3; %子载波间隔为15k,此参数在代码中实际上没有使用

N_block=1000; %最大仿真量

N_subcarrier=1320; %可用子载波数

N_CP=144; %CP长度

Symbol_number=14; %每次传输的OFDM符号个数

conv_poly=[23,35]; %卷积码生成多项式

K=5; %卷积码约束长度

trel=poly2trellis(K,conv_poly); %产生卷积码格图

tail=zeros(1,K-1); %为了是卷积码编码器回零而添加的尾比特

mod_degree=4; %16QAM调制

code_rate=05; %码率

tb_len=50; %Viterbi译码器回溯长度

bit_length=mod_degreecode_rateN_subcarrierSymbol_number-K+1; %根据以上参数配置可以得到在一个数据块中所能承载的信息比特总数

SNR_db=0:1:10; %设置仿真的信噪比范围

SNR=10^(SNR_db/10); %将信噪比转换为自然数值

ber=zeros(1,length(SNR)); %初始化误码率存储空间

bler=zeros(1,length(SNR)); %初始化误码率存储空间

h1=modemqammod('M',2^mod_degree,'InputType','bit','SymoblOrder','gray'); %产生QAM调制对象,输入类型为比特输入,符号顺序为格雷映射

h2=modemqamdemod(h1,'OutputType','bit','DecisionType','approximatellr','NoiseVariance',1); %产生QAM解调对象,选择软判决解调形式。由于此时噪声方差位置,暂设为1

for loop_snr=1:length(SNR)

err=0;

err_blk=0;

sigma=sqrt(1/SNR(loop_snr)/2);

for loop_block=1:N_block %此处省略的代码为每个数据帧的处理过程,将在下面详细介绍

end

ber(loop_snr)=err/(bit_lengthloop_block);

bler(loop_snr)=err_blk/loop_block;

end

for loop_block=1:N_block

source=randsrc(1,bit_length,[0,1]); %产生信源

code=convenc([source,tail],trel); %卷积编码,状态归零

symbol=modulate(h1,code'); %用调制对象h1调制code序列

symbol=symbol/31622; %子载波符号能量归一化

transmit_data=zeros(1,Symbol_number(N_CP+N_ofdm)); %发送时域样本初始化

for loop_symbol=1:Symbol_number %OFDM符号循环,每次循环产生一个OFDM符号的所有时域样本

freq_domain=zeros(1,N_ofdm); %频域数据初始化

freq_domain((N_ofdm-N_subcarrier)/2+1:(N_ofdm-Nsubcarrier)/2+N_subcarrier)=symbol((loop_symbol-1)N_subcarrier+1:loop_symbolN_subcarrier); %子载波映射,映射在中间的N_subcarrier个子载波上

time_domain=ifft(freq_domain)sqrt(N_ofdm); %IFFT是实现OFDM调制,注意能量归一化

transmit_data((loop_symbol-1)(N_CP+N_ofdm)+1:loop_symbol(N_CP+N_ofdm))=[time_domain(N_ofdm-N_CP+1:N_ofdm),time_domain]; %加CP

end

received_data=transmit_data+(randn(1,length(transmit-data))+jrandn(1,length(transmit_data)))sigma; %加噪声,得到接受信号

for loop_symbol=1:Symbol_number

de_CP=received_data((loop_symbol-1)(N_CP+N_ofdm)+N_CP+1:loop_symbol(N_CP+N_ofdm)); %去掉CP

fft_data=fft(de_CP)/sqrt(N_ofdm); %FFT,能量归一化

demapp_data((loop_symbol-1)N_subcarrier+1:loop_symbolN_subcarrier)=fft_data((N_ofdm-N_subcarrier)/2+1:(N_ofdm-N_subcarrier)/2+N_subcarrier); %解映射

end

h2NoiseVariance=sigmasigma3162231622; %重新设置解调对象的噪声方差参数

data_demodulated=demdulate(h2,demapp_data31622); %软解调,注意在解调前需要根据解调对象的要求将信号重新变回到原来的星座上

temp1=size(data_demodulated);

data_demodulated=reshape(data_demudulated,1,templ(1)templ(2)); %将软解调输入的矩阵整理成一个行向量

decision=vitdex(data_demodulated,trel,tb_len,'term','unquant'); %去穷量化维特比译码

decision=decision(1:length(source)); %去尾比特

err=err+sum(decision~=source); %统计误码数

if(sum(decision~=source)~=0) %统计误码块数

err_blk+err_blk+1;

end

if(err_blk>=10) %错10个块停止该信噪比下的仿真

break;

end

end

semilogy(SNR_dB,ber,'-^')

grid on

xlabel('SNR(dB)');

ylable('BER');

以上就是关于有关matlab的简单程序设计~全部的内容,包括:有关matlab的简单程序设计~、Matlab下面程序意思、谁能告诉我这段matlab程序的详细意思,要求每一段都注释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10041415.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存