当前位置: 首页 > news >正文

2023年全国研究生数学建模竞赛华为杯B题DFT类矩阵的整数分解逼近求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯

B题 DFT类矩阵的整数分解逼近

原题再现:

  一、问题背景
  离散傅里叶变换(Discrete Fourier Transform,DFT)作为一种基本工具广泛应用于工程、科学以及数学领域。例如,通信信号处理中,常用DFT实现信号的正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)系统的时频域变换(见图1)。另外在信道估计中,也需要用到逆DFT(IDFT)和DFT以便对信道估计结果进行时域降噪(见图2)。
在这里插入图片描述
  在芯片设计中,DFT计算的硬件复杂度与其算法复杂度和数据元素取值范围相关。算法复杂度越高、数据取值范围越大,其硬件复杂度就越大。目前在实际产品中,一般采用快速傅里叶变换(Fast Fourier Transform,FFT)算法来快速实现DFT,其利用DFT变换的各种性质,可以大幅降低DFT的计算复杂度(参见[1][2])。然而,随着无线通信技术的演进,天线阵面越来越大,通道数越来越多,通信带宽越来越大,对FFT的需求也越来越大,从而导致专用芯片上实现FFT的硬件开销也越大。为进一步降低芯片资源开销,一种可行的思路是将DFT矩阵分解成整数矩阵连乘的形式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  可以看到在该方案中,分解后的矩阵元素均为整数,从而降低了每个乘法器的复杂度;另外A_1~A_4的稀疏特性可以减少乘法运算数量。可以看出,这其实是一种精度与硬件复杂度的折中方案,即损失了一定的计算精度,但是大幅降低了硬件复杂度。在对输出信噪比要求不高的情况下可以优先考虑此类方案。
在这里插入图片描述
  目前使用FFT进行DFT计算的方案硬件复杂度较高,因为我们希望研究一种替代方案来降低DFT计算的硬件复杂度,但同时我们对精度也有一定要求。请针对以下问题分别设计分解方法,既能最小化RMSE,同时又使得乘法器的数量尽量少。
  A中矩阵的个数K的取值并没有限制,也是优化的变量之一。但需要注意,一般情况下,K越小,硬件复杂度越低,但是如果增加矩阵的个数可以使得矩阵中包含更多的简单元素(0、±1、±j或(±1±j)),硬件复杂度也可能会降低,因此,需要根据硬件复杂度C的定义合理的设计K。

  问题1:首先通过减少乘法器个数来降低硬件复杂度。由于仅在非零元素相乘时需要使用乘法器,若A_k矩阵中大部分元素均为0,则可减少乘法器的个数,因此希望A_k为稀疏矩阵。对于N=2^t,t=1,2,3,…的DFT矩阵F_N,请在满足约束1的条件下,对最优化问题(6)中的变量A和β进行优化,并计算最小误差( 即(6)的目标函数,下同)和方案的硬件复杂度C(由于本题中没有限定A_k元素的取值范围,因此在计算硬件复杂度时可默认q=16)。

  问题2:讨论通过限制A_k中元素实部和虚部取值范围的方式来减少硬件复杂度的方案。对于N=2^t,t=1,2,3,4,5的DFT矩阵F_N,请在满足约束2的条件下,对A和β进行优化,并计算最小误差和方案的硬件复杂度C。

  问题3:同时限制A_k的稀疏性和取值范围。对于N=2^t,t=1,2,3,4,5的DFT矩阵F_N,请在同时满足约束1和2的条件下,对A和β进行优化,并计算最小误差和方案的硬件复杂度C。

  问题4:进一步研究对其它矩阵的分解方案。考虑矩阵F_N=F_N1⊗F_N2,其中F_N1 和F_N2分别是N_1和N_2维的DFT矩阵,⊗表示Kronecker积(注意F_N非DFT矩阵)。当N_1=4, N_2=8时,请在同时满足约束1和2的条件下,对A和β进行优化,并计算最小误差和方案的硬件复杂度C。

  问题5:在问题3的基础上加上精度的限制来研究矩阵分解方案。要求将精度限制在0.1以内,即RMSE≤0.1。对于N=2^t,t=1,2,3…的DFT矩阵F_N,请在同时满足约束1和2的条件下,对A和β,P进行优化,并计算方案的硬件复杂度C。

  附录一:名词解释
  复数乘法次数/复乘次数:进行复数乘法的次数,例如(1+2j)×(2+2j)为一次复乘。
  硬件复杂度:本题中,仅考虑乘法器带来的硬件复杂度,硬件复杂度仅与乘法器个数和每个乘法器的复杂度相关
  乘法器个数:本题中,乘法器个数即为复乘次数
  单个乘法器的复杂度:单个乘法器的复杂度与乘法器的设计方法和输入数据的位宽等因素相关。在本题中,将乘法器的复杂度简化为仅与输入数据的取值范围相关。对于复数g∈{x+jy│x,y∈P},P={0,±1,±2,…,±2^(q-1) },其与任意复数z相乘的复杂度为q。

整体求解过程概述(摘要)

  离散傅里叶变换(Discrete Fourier Transform,DFT)傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。在芯片设计中,DFT计算的硬件复杂度与其算法复杂度和数据元素取值范围相关。算法复杂度越高、数据取值范围越大,其硬件复杂度就越大。常规的降低硬件复杂度的方法如快速傅里叶变换已经渐渐无法满足芯片日益增长的需求。因此,急需设计新的算法,此算法不仅能是误差控制在一定范围内,又能有效降低 DFT 过程带来的硬件复杂度过大的问题。
  针对第一问,本问不用考虑分解后矩阵A的取值范围的问题,只需要满足分解后的矩阵每行至多只有2个非零元素,以及最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择了三种模型来计算 DFT 矩阵的最小误差和硬件复杂度。奇异值分解法通过特征向量将DFT矩阵进行分解,同时还达到了降维的目的,通过将DFT矩阵分解成三个矩阵来使误差达到最小;分块矩阵分解法通过将 DFT 矩阵分解成一个个小的分块矩阵,因为维数越小分块子矩阵形式越简单,误差显著降低;矩阵乘法拟合则利用 DFT 矩阵的对称性和穷举法将矩阵分解成多个矩阵连乘的形式。
  针对第二问,本问不用考虑每行非零元素个数的问题,只需要满足分解后的矩阵每个元素的取值范围,以及在N=2,4,8,16,32的情况以及最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择了三种模型来计算 DFT 矩阵的最小误差和硬件复杂度。蝶形运算分解法运用了快速傅里叶变换的思想,在此基础上利用蝶形变换将DFT矩阵进行分解;分块矩阵分解法和矩阵乘法拟合在解决问题二是仍然适用。
  针对第三问,本问需要同时考虑每行非零元素个数的以及分解后的矩阵每个元素的取值范围的约束条件,在此基础上,在最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择了两种模型来计算 DFT 矩阵的最小误差和硬件复杂度,即分块矩阵分解法和矩阵乘法拟合。这两种方法在多种约束条件下仍能够很好的解决问题。
  针对第四问,本问需要考虑如何对4点DFT矩阵与8点DFT矩阵的Kronecker积的矩阵FN进行矩阵分解,在最小误差尽可能低的约束条件下,计算出近似矩阵的硬件复杂度。本问选择通过SVD+穷举法的模型来计算DFT矩阵的最小误差和硬件复杂度。首先对4点DFT矩阵与8点DFT矩阵进行SVD分解,之后利用Kronecker积的性质将FN矩阵转化为多个矩阵相乘的形式。
  针对第五问,本问需要同时考虑每行非零元素个数的以及分解后的矩阵每个元素的取值范围的约束条件,在此基础上增加将精度限制在0.1以内,即RMSE≤0.1的要求,计算出近似矩阵的硬件复杂度。本问选择分块矩阵分解模型对第三问结果矩阵进行进一步优化,在满足题目要求下,计算出分解后矩阵的最小误差和硬件复杂度。

模型假设:

  1. 硬件复杂度仅考虑乘法器的复杂度,硬件复杂度与乘法器个数和每个乘法器的复杂度成正比。
  2. 单个乘法器的复杂度简化为仅与复数中实部和虚部的取值范围相关。
  3. 乘法器个数定义为复数乘法的次数,且与0,±1,±j±1±j相乘时不计入乘法次数。

问题分析:

  DFT 是对信号向量进行线性正交变换的一个过程,对一个 N 维的信号直接进行 N 点 DFT 需要进行N2次复数乘法和 N(N − 1)次加法,对于硬件复杂度和算力要求较高。所以需 要设计快速算法将 DFT 计算成本降低,通常使用的方式为使用快速傅里叶变换算法(FFT) 来实现 DFT 过程但 FFT 的硬件开销不满足现有需求需要设计方案降低 FFT 的硬件开销。 一种合理的方式为使用矩阵连乘来拟合 DFT 矩阵,通过设计合理的矩阵可以降低 FFT 中 的硬件开销并满足精度要求。 FFT 中的硬件复杂度主要由矩阵连乘中复数乘法的次数和乘法器的复杂度决定,减少 复数乘法的次数并降低每个乘法器的复杂度可以有效的使得 FFT 中的硬件开销变小。连乘 中矩阵尽可能稀疏会使得乘法的次数有效减少,而乘法器的复杂度可以通过减少乘法元素 的有效位数有效的降低乘法器的复杂度。因此为降低 FFT 中的硬件开销,需要对连乘中矩 阵的稀疏性和元素有效位数进行合理设计,在精度尽可能大的条件下硬件复杂度降低。
  在设计好的矩阵稀疏性和元素有效位数约束下,根据不同维度的 DFT 矩阵来优化需要 连乘的矩阵个数、每个矩阵元素的值和矩阵缩放因子来得到最优的矩阵连乘形式。但在规定矩阵元素虚部和实部均为整数的条件下,直接对每个矩阵元素中的值进行优化为一个庞 大的多元整数优化问题,不是一个明智的思路。因此需要分析 DFT 矩阵的性质和旋转因子Wn的性质并利用这些性质设计合理的优化方案,从而在可能的范围内求解出最合适的矩阵连乘形式。

模型的建立与求解整体论文缩略图

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

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序代码如下:
NNN=8;O_FN=zeros(1,NNN);O_FN_decom= zeros(1,NNN);for i=3:NNN+2N=2^i;FN=produce_DFT(N);[FN_decom,N_length]=my_CT(N);O_FN(i−2)= calculate_On(FN,N);for j=1:N_lengthO_FN_decom(i−2)=O_FN_decom(i−2)+calculate_On(FN_decom{j},N);endendsemilogy(2.^(3:NNN+2),O_FN,'−*')gridonholdonsemilogy(2.^(3:NNN+2),O_FN_decom,'−*')for i=1:NNNline([2^(i+2),2^(i+2)],[O_FN(i),O_FN_decom(i)],'LineStyle','−−','Color','g');endxlabel('N:矩阵维数')ylabel('C:硬件复杂度')legend('C(F_N)','C(F_N的精确分解)')
function result= produce_DFT(N)result=zeros(N,N);w=exp(((−2*pi)/N)*1i);result(:,1)=ones(N,1);temp=ones(N,1);for i=2:Ntemp(i)=w*temp(i−1);endresult(:,2)=temp;for i=3:Nresult(:,i)=result(:,i−1).*temp;end
function [result,t]=my_CT(N)w=exp(((2*pi)/N)*1i);t=log2(N);result=cell(1,t+1);P_eye= eye(N);for i=1:ttemp= zeros(N,N);P_temp= zeros(N,N);Ni=N/(2^(i−1));Ni_2= Ni/2;re_temp=zeros(Ni,Ni);P=zeros(Ni,Ni);for j=1:Ni/2re_temp(j,j)=1;re_temp(j,j+Ni_2)= w^(2^(i−1)*(j−1));P(j,2*j−1)=1;endfor j=Ni_2+1:Nire_temp(j,j−Ni_2)= 1;re_temp(j,j)=−w^(2^(i−1)*(j−1−Ni_2));P(j,2*(j−Ni_2))=1;endfor j=1:2^(i−1)temp(1+Ni*(j−1):Ni*j,1+Ni*(j−1):Ni*j)=re_temp;P_temp(1+Ni*(j−1):Ni*j,1+Ni*(j−1):Ni*j)=P;endresult{i}= temp;P_eye= P_temp*P_eye;endresult{t+1}=P_eye;t=t+1;
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • idea多模块启动
  • 【北京迅为】《STM32MP157开发板使用手册》- 第三十九章 消息队列实验
  • k8s常用指令续:
  • 避免死锁发生的策略
  • 240919-Pip先在线下载不安装+再离线安装
  • AI助力智慧农田作物病虫害监测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建花田作物种植场景下棉花作物常见病虫害检测识别系统
  • 一道涉及 Go 中的并发安全和数据竞态(Race Condition)控制的难题
  • 【Kubernetes】常见面试题汇总(十八)
  • 对目录的操作、获取文件信息
  • [PTA]7-6 整数分解为若干项之和
  • 【conda】macOS how to install conda?
  • 【Vue】VueRouter路由
  • Oracle 19c 安装教程学习
  • AV1 Bitstream Decoding Process Specification--[4]:语法结构
  • monaco editor 在react中的使用
  • php的引用
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • classpath对获取配置文件的影响
  • CSS实用技巧干货
  • If…else
  • JAVA SE 6 GC调优笔记
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • spring security oauth2 password授权模式
  • zookeeper系列(七)实战分布式命名服务
  • 关于List、List?、ListObject的区别
  • 关于使用markdown的方法(引自CSDN教程)
  • 机器学习学习笔记一
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 项目管理碎碎念系列之一:干系人管理
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 国内开源镜像站点
  • ​iOS安全加固方法及实现
  • #1015 : KMP算法
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $.ajax()
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (排序详解之 堆排序)
  • (十六)Flask之蓝图
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (轉貼) UML中文FAQ (OO) (UML)
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET DataGridView数据绑定说明
  • .net 获取url的方法
  • .net后端程序发布到nignx上,通过nginx访问
  • .Net实现SCrypt Hash加密
  • .so文件(linux系统)