栈的应用之进制转换code_legend

本文介绍了一种使用栈实现的十进制数转换为其他进制数的方法。通过不断除以目标进制并记录余数的方式,利用栈的先进后出特性逆序输出转换后的数字。
/*
十进制转化为其他进制。
使用栈的逆序。
*/
#include <iostream>
using namespace std;
typedef int type;
#define Maxsize 20
/*
number:要转换的数字;
token: 转换的进制。
*/
void tokenConvert(type number ,int token){


      int stack[Maxsize];
      int top=-1;
      int moudle;


      while(number){


      moudle=number%token;
      top++;
      stack[top]=moudle;/*进栈*/
      number=number/token;/*update 被除数*/


      }


      /*ouput the stack */
      while(top>=0){
      cout<<stack[top]<<" ";
      top--;
      }
      cout<<endl;


}


int main()
{
      tokenConvert(10,2);
    cout << "Hello world!" << endl;
    return 0;
}
%Type I HARQ混合自动请求重传请求 clc clear %设置莱斯衰落信道环境参数 %coderate=1e9;%采样频率1Ghz %K_factor=1000;%莱斯因子 %chan=Ricianchan(1/coderate,1000,K_factor,[0,0.0001/coderate,0.00001/coderate,0.000001/coderate],[0,-1000,-100,-100]);%定义莱斯衰落信道 %delay=chan.ChannelFilterDelay;%莱斯信道滤波器的时延 %chan; max_erorr_bits = 10000; max_frames = 100000; max_erorr_frames = 50; %load("qam256Train_SNR4complex_values.mat") load("ATSC64.mat") load("qam64_AE.mat") constellation_AE = complex_values(:,1) + complex_values(:,2)*1i; constellation_ATSC = cons64(:,6); load("BG1_Z48.mat"); z = 48; K = 22 ; N = 46 ; r = 1/2; H_SV = H_SV(1:(N-K),1:N); pcmatrix = ldpcQuasiCyclicMatrix(z,H_SV); cfgLDPCDec = ldpcDecoderConfig(pcmatrix,"norm-min-sum"); pun_pre = 2*z; pun_suf = 0; llr_pre = zeros(pun_pre,1); llr_suf = zeros(pun_suf,1); M=[2,2,4,4,16,16,64,64,0];% M进制调制 rate=[1/2,3/4,1/2,3/4,1/2,3/4,2/3,3/4,0];%码率为k/n的卷积码编码 r=[1.8 4.46 6.3 8.3 12.95 15.15 21.1 22.45];%门限值限定 SNR=6:0.2:6.8; eff=(3600-96)/3600; model=1:8; m=3; % n=5; for n=1:length(SNR) frame_num = 0; erorr_bits = 0; error_frames = 0; EbN0 = 10 ^(SNR(n) / 10); sigma = 1/sqrt(2* log2(M(7))* r(1) * EbN0); % data=[]; data_buffer=[]; buffer=[]; kk=0; num_repeat=zeros(41,3); %等待传输的数据 初始化 msg = randi(2,1,K*z)-1; data_buffer=msg; buffer=[]; window=4; num_nack=zeros(1,window); ack=[ones(1,window),zeros(1,274)]; rxsig=[]; rx=[]; rx11=[]; rx1=[]; rx_inter=[]; decoded=[]; receiver=[]; %首先发送window个数据 for i=1:window i data_buffer(:,i)=msg(:,i); buffer(:,i)=data_buffer(:,i); %编码调制 %code=convo(buffer(i,:),rate(m));%卷积编码 codeword = nrldpc_encode(H_SV,z,msg); %code_inter=randintrlv(code,4831);%随机交织 %[code1,yu]=translate(code_inter,M(m));%进制转换 %modulatedsig=modulation_model(code1,model(m)); % dpsk调制 codeword_pun = codeword(pun_pre+1:end-pun_suf); tx = qammod(codeword_pun,M(7),'UnitAveragePower',true,'InputType','bit','PlotConstellation',0); %通过莱斯衰落信道 % modulatedsig1=[modulatedsig,zeros(1,delay)];%为时移补0 % fadedsig=filter(chan,modulatedsig1);%调制编码信号通过莱斯衰落信道 %通过加性高斯白噪声信道 %rxsig(i,:)=awgn(fadedsig,SNR(n),'measured');%加性高斯白噪声 noise(:,i) = sigma * randn(size(tx)) + sigma*randn(size(tx)) * 1i; rx(:,i) = tx + noise(:,i); %解调解码 llr(:,i) = qamdemod(rx(:,i),M(7),"UnitAveragePower",1,"OutputType",'approxllr'); llr_1 = [llr_pre;llr;llr_suf]; [decode,~,~] = ldpcDecode(llr_1(1:N*z),cfgLDPCDec,50,"DecisionType","soft");%25是最大迭代次数 decode = decode' < 0; receiver(:,i)=decode(:,i); % e1 = sum(abs(decode - msg)); % if e1>0 % erorr_bits = erorr_bits + e1; % error_frames = error_frames + 1; % end % rx(i,:)=demodulation_model(rxsig(i,:),model(m));%解调 % rx11(i,:)=rx(i,1+delay:end);%去除时移 % rx1(i,:)=detranslate(rx11(i,:),M(m),yu);%进制转换 % rx_inter(i,:)=randdeintrlv(rx1(i,:),4831);%解随机交织 % decoded(i,:)=deconv(rx_inter(i,:),rate(m));%viterbi解码 % receiver(i,:)=decoded(i,:); [num(i),nErrors(i)]=biterr(receiver(:,i),buffer(:,i));%比较误比特率 if num(i)==0 ack(i)=1; ber(i)=0; num_nack(i)=0; else ack(i)=0; ber(i)=nErrors(i); num_nack(i)=1; end end % length(find(ack==1)) % 继续发送数据 i=window+1; while i<=278 [n,i] % for ii=i/window:9 %第几组数据 for jj=1:window %每组中的window个数据 %确定window个数据的值 if ack(i-window)==1 num_cuo=length(find(ack(1:i-window)==0)); data_buffer(i,:)=data(i-num_cuo,:); buffer(jj,:)=data_buffer(i,:); else num_repeat(n,m)=num_repeat(n,m)+1;%重传帧的数目 buffer(jj,:)=data_buffer(i-window,:); data_buffer(i,:)=data_buffer(i-window,:); end %编码调制 code=convo(buffer(jj,:),rate(m));%卷积编码 code_inter=randintrlv(code,4831);%随机交织 [code1,yu]=translate(code_inter,M(m));%进制转换 modulatedsig=modulation_model(code1,model(m)); % dpsk调制 %通过莱斯衰落信道 modulatedsig1=[modulatedsig,zeros(1,delay)];%为时移补0 fadedsig=filter(chan,modulatedsig1);%调制编码信号通过莱斯衰落信道 %通过加性高斯白噪声信道 rxsig(i,:)=awgn(fadedsig,SNR(n),'measured');%加性高斯白噪声 %解调解码 rx(i,:)=demodulation_model(rxsig(i,:),model(m));%解调 rx11(i,:)=rx(i,1+delay:end);%去除时移 rx1(i,:)=detranslate(rx(i,:),M(m),yu);%进制转换 rx_inter(i,:)=randdeintrlv(rx1(i,:),4831);%解随机交织 decoded(i,:)=deconv(rx_inter(i,:),rate(m));%viterbi解码 receiver(i,:)=decoded(i,:); [num(i),nErrors(i)]=biterr(receiver(i,:),data_buffer(i,:));%比较误比特率 %判断 if num(i)==0 ber(i)=0; ack(i)=1; num_nack(jj)=0; i=i+1; else num_nack(jj)=num_nack(jj)+1; ber(i)=nErrors(i); if num_nack(jj)==3 ack(i)=1; kk=kk+1; num_nack(jj)=0; i=i+1; else ack(i)=0; i=i+1; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end end ber_end(n,m)=mean(ber) num_succ_mean(n,m)=length(find(ack(1:278)==1))-kk; num_succ_rate_mean(n,m)=num_succ_mean(n,m)./(278-num_repeat(n,m)); fer(n,m)=1-num_succ_rate_mean(n,m); num_time(n,m)=278./num_succ_mean(n,m); throughout(n,m)=num_succ_mean(n,m).*3600.*log2(M(m)).*rate(m).*eff./10^6; % end end %计算每帧平均传输时间,误帧率,系统吞吐量 for i=1:length(SNR) % for j=1:length(model) if num_time(i,3)>=3 num_time(i,3)=3; else num_time(i,3)=num_time(i,3); end % end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure(1) plot(SNR,fer) grid on xlabel('信噪比Eb/No(dB)') ylabel('数据帧误帧率fer') legend('选择重传 Type I HARQ') title('选择重传 Type I HARQ误帧率性能,QPSK调制,码率1/2') figure(2) plot(SNR,ber_end) grid on xlabel('信噪比Eb/No(dB)') ylabel('数据帧误码率ber') legend('FEC差错控制方式') title('选择重传 Type I HARQ误码率性能,QPSK调制,码率1/2') figure(3) plot(SNR,num_time) grid on xlabel('信噪比Eb/No(dB)') ylabel('数据帧平均传输时间') legend('选择重传 Type I HARQ') title('选择重传 Type I HARQ平均传输时间性能,QPSK调制,码率1/2') figure(4) plot(SNR,throughout) grid on xlabel('信噪比Eb/No(dB)') ylabel('系统吞吐量/Mbps') legend('选择重传 Type I HARQ') title('选择重传 Type I HARQ系统吞吐量性能,QPSK调制,码率1/2') 解释并注释上述代码
08-16
%% OFDM系统参数设置 clear all; close all; clc; % 基本参数 N = 64; % 子载波数量 cp_len = 16; % 循环前缀长度 num_symbols = 100; % OFDM符号数量 mod_order = 4; % 调制阶数 (4=QPSK) snr = 5:2:15; % 信噪比范围(dB) num_snr_points = length(snr); %% LDPC编码设置 % 检查并加载DVB-S2 LDPC矩阵 if ~exist('dvbs2ldpc.mat', 'file') fprintf('正在下载DVB-S2 LDPC矩阵...\n'); try websave('dvbs2ldpc.mat', 'https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/46480/versions/1/dvbs2ldpc.mat'); fprintf('下载成功!\n'); catch error('无法下载dvbs2ldpc.mat文件,请检查网络连接'); end end load('dvbs2ldpc.mat'); % 选择码率 code_rate = 1/2; H = dvbs2ldpc(code_rate); ldpcEncoder = comm.LDPCEncoder(H); ldpcDecoder = comm.LDPCDecoder(H); % 获取LDPC编码参数 info_bits_per_block = ldpcEncoder.NumInformationBits; codeword_bits_per_block = ldpcEncoder.BlockLength; %% 数据长度计算与对齐 % 计算每个OFDM符号能承载的比特数 bits_per_symbol = N * log2(mod_order); % 计算总需要的编码比特数 required_encoded_bits = bits_per_symbol * num_symbols; % 计算需要的LDPC块数 num_ldpc_blocks = ceil(required_encoded_bits / codeword_bits_per_block); total_info_bits = num_ldpc_blocks * info_bits_per_block; % 接收端实际能解码的LDPC块数 num_ldpc_codewords = floor(required_encoded_bits / codeword_bits_per_block); info_bits_actual = num_ldpc_codewords * info_bits_per_block; fprintf('系统参数:\n'); fprintf(' OFDM符号数: %d, 每符号子载波: %d, 总传输比特: %d\n', ... num_symbols, N, required_encoded_bits); fprintf(' LDPC码率: %.2f, 每块信息比特: %d, 码字长度: %d\n', ... code_rate, info_bits_per_block, codeword_bits_per_block); fprintf(' 发送端LDPC块数: %d, 接收端可解码块数: %d\n', ... num_ldpc_blocks, num_ldpc_codewords); fprintf(' 总信息比特: %d, 实际解码比特: %d\n\n', ... total_info_bits, info_bits_actual); %% BER存储 ber_results = zeros(num_snr_points, 1); last_constellation = []; % 存储最后一个SNR点的星座图 %% 主循环 - 不同SNR下的仿真 for snr_idx = 1:num_snr_points current_snr = snr(snr_idx); fprintf('\n正在仿真 SNR = %d dB...\n', current_snr); % 错误统计初始化 total_errors = 0; total_bits = 0; % 多次迭代以获得更准确的BER估计 num_iterations = 10; for iter = 1:num_iterations %% 发射端处理 % 生成随机二进制数据 (额外生成8%的冗余数据) data = randi([0 1], total_info_bits, 1); % LDPC编码 encoded_data = zeros(codeword_bits_per_block * num_ldpc_blocks, 1); for blk = 1:num_ldpc_blocks start_idx = (blk-1)*info_bits_per_block + 1; end_idx = blk*info_bits_per_block; encoded_block = ldpcEncoder(data(start_idx:end_idx)); encoded_data((blk-1)*codeword_bits_per_block+1 : blk*codeword_bits_per_block) = ... encoded_block; end % 截取刚好够用的编码后数据 tx_encoded = encoded_data(1:required_encoded_bits); % 数字调制 (QPSK) mod_data = qammod(tx_encoded, mod_order, 'InputType', 'bit', 'UnitAveragePower', true); % 串并转换 mod_data = reshape(mod_data, N, num_symbols); % IFFT变换 ofdm_symbols = ifft(mod_data, N); % 添加循环前缀 ofdm_symbols_cp = [ofdm_symbols(end-cp_len+1:end, :); ofdm_symbols]; % 并串转换 tx_signal = ofdm_symbols_cp(:); %% 信道传输 rx_signal = awgn(tx_signal, current_snr, 'measured'); %% 接收端处理 % 串并转换 rx_signal_parallel = reshape(rx_signal, N+cp_len, num_symbols); % 去除循环前缀 rx_symbols_no_cp = rx_signal_parallel(cp_len+1:end, :); % FFT变换 rx_data_freq = fft(rx_symbols_no_cp, N); % 信道均衡 (简单零 forcing均衡) H_est = ones(N, 1); % 假设理想信道估计 rx_data_eq = rx_data_freq ./ H_est; % 解调 - 输出LLR用于LDPC解码 rx_llr = qamdemod(rx_data_eq(:), mod_order, 'OutputType', 'approxllr', 'UnitAveragePower', true); %% LDPC解码 % 将接收数据分割为LDPC码字 rx_data_decoded = zeros(info_bits_actual, 1); for blk = 1:num_ldpc_codewords start_idx = (blk-1)*codeword_bits_per_block + 1; end_idx = min(blk*codeword_bits_per_block, length(rx_llr)); codeword_llr = rx_llr(start_idx:end_idx); % 解码时处理可能的LLR长度不足 if length(codeword_llr) < codeword_bits_per_block codeword_llr = [codeword_llr; zeros(codeword_bits_per_block-length(codeword_llr), 1)]; end decoded_bits = ldpcDecoder(codeword_llr); rx_data_decoded((blk-1)*info_bits_per_block+1 : blk*info_bits_per_block) = ... decoded_bits; end %% 性能评估 - 比较实际传输的信息比特 [errors, bits] = biterr(data(1:info_bits_actual), rx_data_decoded); total_errors = total_errors + errors; total_bits = total_bits + bits; % 保存最后一个SNR点的星座图 if snr_idx == num_snr_p修改为正确完整的代码
06-21
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值