【【迭代16次的CORDIC算法-verilog实现】】

迭代16次的CORDIC算法-verilog实现 -32位迭代16次verilog代码实现

CORDIC.v

module cordic32#(parameter         DATA_WIDTH    =      8'd32  ,     // we set data widthparameter         PIPELINE      =      5'd16        // Optimize waveform)(input                              clk       ,input                              rst_n     ,input    signed    [DATA_WIDTH - 1 : 0]   phase     ,input                              ena       ,output  reg signed [DATA_WIDTH - 1  : 0]   sin_out   ,output  reg signed [DATA_WIDTH - 1  : 0]   cos_out);// -----------------------------------------------  \\//    next is define and parameter                  \\// ------------------------------------------------- \\
reg    signed     [DATA_WIDTH - 1 : 0]     phase_reg    ;reg    signed     [DATA_WIDTH - 1 : 0]     phase_reg1    ;reg    signed     [DATA_WIDTH - 1 : 0]     X0           ;reg    signed     [DATA_WIDTH - 1 : 0]     Y0           ;reg    signed     [DATA_WIDTH - 1 : 0]     Z0           ;wire   signed     [DATA_WIDTH - 1 : 0]     X1 , Y1 , Z1 ;wire   signed     [DATA_WIDTH - 1 : 0]     X2 , Y2 , Z2 ;wire   signed     [DATA_WIDTH - 1 : 0]     X3 , Y3 , Z3 ;wire   signed     [DATA_WIDTH - 1 : 0]     X4 , Y4 , Z4 ;wire   signed     [DATA_WIDTH - 1 : 0]     X5 , Y5 , Z5 ;wire   signed     [DATA_WIDTH - 1 : 0]     X6 , Y6 , Z6 ;wire   signed     [DATA_WIDTH - 1 : 0]     X7 , Y7 , Z7 ;wire   signed     [DATA_WIDTH - 1 : 0]     X8 , Y8 , Z8 ;wire   signed     [DATA_WIDTH - 1 : 0]     X9 , Y9 , Z9 ;wire   signed     [DATA_WIDTH - 1 : 0]     X10 , Y10 , Z10 ;wire   signed     [DATA_WIDTH - 1 : 0]     X11 , Y11 , Z11 ;wire   signed     [DATA_WIDTH - 1 : 0]     X12 , Y12 , Z12 ;wire   signed     [DATA_WIDTH - 1 : 0]     X13 , Y13 , Z13 ;wire   signed     [DATA_WIDTH - 1 : 0]     X14 , Y14 , Z14 ;wire   signed     [DATA_WIDTH - 1 : 0]     X15 , Y15 , Z15 ;wire   signed     [DATA_WIDTH - 1 : 0]     X16 , Y16 , Z16 ;reg    signed     [DATA_WIDTH - 1 : 0]     XN15 , YN15     ;reg [1:0] quadrant[PIPELINE : 0] ;integer i ;// We will convert all new angles to the first quadrant//always@(posedge clk or negedge rst_n)beginif( rst_n == 0 )beginphase_reg <= 0 ;phase_reg1 <= 0 ;endelse if( ena == 1)beginphase_reg1 <= phase ;case(phase[DATA_WIDTH - 1 : DATA_WIDTH - 2])2'b00 :phase_reg <= phase                 ;2'b01 :phase_reg <= phase - 32'h40000000  ;   // -902'b10 :phase_reg <= phase - 32'h80000000  ;   // -1802'b11 :phase_reg <= phase - 32'hC0000000  ;   // -270default :phase_reg <= 32'h00   ; endcaseendend// We begin the initialization operation// we set 0.607253*???2^31-1???,32'h4DBA775Falways@(posedge clk or negedge rst_n)beginif(rst_n == 0 )beginX0 <= 0 ;Y0 <= 0 ;Z0 <= 0 ;endelse if(ena == 1)beginX0 <= 32'h4DBA775F ;Y0 <= 0            ;Z0 <= phase_reg    ;endend// for instantiation - 16
INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd0 ),.ANGLE      ( 32'h20000000 )
)u_INTERATION0(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X0         ),.Y0         ( Y0         ),.Z0         ( Z0         ),.X1         ( X1         ),.Y1         ( Y1         ),.Z1         ( Z1         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd1 ),.ANGLE      ( 32'h12E4051D )
)u_INTERATION1(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X1         ),.Y0         ( Y1         ),.Z0         ( Z1         ),.X1         ( X2         ),.Y1         ( Y2         ),.Z1         ( Z2         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd2 ),.ANGLE      ( 32'h09FB385B )
)u_INTERATION2(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X2         ),.Y0         ( Y2         ),.Z0         ( Z2         ),.X1         ( X3         ),.Y1         ( Y3         ),.Z1         ( Z3         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd3 ),.ANGLE      ( 32'h051111D4 )
)u_INTERATION3(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X3         ),.Y0         ( Y3         ),.Z0         ( Z3         ),.X1         ( X4         ),.Y1         ( Y4         ),.Z1         ( Z4         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd4 ),.ANGLE      ( 32'h028B0D43 )
)u_INTERATION4(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X4         ),.Y0         ( Y4         ),.Z0         ( Z4         ),.X1         ( X5         ),.Y1         ( Y5         ),.Z1         ( Z5         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd5 ),.ANGLE      ( 32'h0145D7E1 )
)u_INTERATION5(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X5         ),.Y0         ( Y5         ),.Z0         ( Z5         ),.X1         ( X6         ),.Y1         ( Y6         ),.Z1         ( Z6         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd6 ),.ANGLE      ( 32'h00A2F61E )
)u_INTERATION6(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X6         ),.Y0         ( Y6         ),.Z0         ( Z6         ),.X1         ( X7         ),.Y1         ( Y7         ),.Z1         ( Z7         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd7 ),.ANGLE      ( 32'h00517C55 )
)u_INTERATION7(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X7         ),.Y0         ( Y7         ),.Z0         ( Z7         ),.X1         ( X8         ),.Y1         ( Y8         ),.Z1         ( Z8         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd8 ),.ANGLE      ( 32'h0028BE53 )
)u_INTERATION8(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X8         ),.Y0         ( Y8         ),.Z0         ( Z8         ),.X1         ( X9         ),.Y1         ( Y9         ),.Z1         ( Z9         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd9 ),.ANGLE      ( 32'h00145F2F )
)u_INTERATION9(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X9         ),.Y0         ( Y9         ),.Z0         ( Z9         ),.X1         ( X10         ),.Y1         ( Y10         ),.Z1         ( Z10         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd10 ),.ANGLE      ( 32'h000A2F98 )
)u_INTERATION10(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X10         ),.Y0         ( Y10         ),.Z0         ( Z10         ),.X1         ( X11         ),.Y1         ( Y11         ),.Z1         ( Z11         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd11 ),.ANGLE      ( 32'h000517CC )
)u_INTERATION11(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X11         ),.Y0         ( Y11         ),.Z0         ( Z11         ),.X1         ( X12         ),.Y1         ( Y12         ),.Z1         ( Z12         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd12 ),.ANGLE      ( 32'h00028BE6 )
)u_INTERATION12(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X12         ),.Y0         ( Y12         ),.Z0         ( Z12         ),.X1         ( X13         ),.Y1         ( Y13         ),.Z1         ( Z13         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd13 ),.ANGLE      ( 32'h000145F3 )
)u_INTERATION13(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X13         ),.Y0         ( Y13         ),.Z0         ( Z13         ),.X1         ( X14         ),.Y1         ( Y14         ),.Z1         ( Z14         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd14 ),.ANGLE      ( 32'h0000A2FA )
)u_INTERATION14(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X14         ),.Y0         ( Y14         ),.Z0         ( Z14         ),.X1         ( X15         ),.Y1         ( Y15         ),.Z1         ( Z15         )
);INTERATION#(.DATA_WIDTH ( 8'd32 ),.shift      ( 5'd15 ),.ANGLE      ( 32'h0000517D )
)u_INTERATION15(.clk        ( clk        ),.rst_n      ( rst_n      ),.ena        ( ena        ),.X0         ( X15         ),.Y0         ( Y15         ),.Z0         ( Z15         ),.X1         ( X16         ),.Y1         ( Y16         ),.Z1         ( Z16         )
);// iteration over always@(posedge clk or negedge rst_n)
beginif(rst_n == 0)for(i = 0 ; i < PIPELINE ; i=i+1)quadrant[i] <= 0 ;elseif(ena == 1)beginfor(i = 0 ; i < PIPELINE ; i=i+1)quadrant[i+1] <= quadrant[i] ;quadrant[0] <= phase_reg1[DATA_WIDTH - 1 : DATA_WIDTH - 2] ;end
end//------------------------------------------  \\//------------------------------------------  \\
//  Prevent overflow caused by small decimals and negative complement
//always @(posedge clk or negedge rst_n)if(rst_n == 0)XN15<=0;else if(X15[31:30] == 2'b11)//小于0XN15<=~X15 + 1'b1;else if(X15[31:30] == 2'b10)//大于1XN15<=32'h80000000 - X15 + 32'h80000000;else XN15 <= X15;always @(posedge clk or negedge rst_n )if(rst_n == 0)YN15 <=0;else if(Y15[31:30] == 2'b11)//小于0 YN15 <=~Y15 + 1'b1;else if(Y15[31:30] == 2'b10)//大于1YN15 <=32'h80000000 -Y15 + 32'h80000000;else YN15 <=Y15;// 
//   The results of different phases are also different//   phase[DATA_WIDTH -1 : DATA_WIDTH -2]//  00 first  quadrant//  01 second quadrant//  10 third  quadrant//  11 Fourth Quadrantalways@(posedge clk or negedge rst_n)
beginif(rst_n == 0)begincos_out <= 0 ;sin_out <= 0 ;endelse if( ena == 1)begincase(quadrant[16]) 2'b00 :begincos_out <= XN15 ;sin_out <= YN15 ;end2'b01 :begincos_out <= ~YN15 + 1'b1;sin_out <= XN15        ;end2'b10 :begincos_out <= ~XN15 + 1'b1  ;sin_out <= ~YN15 + 1'b1 ;end2'b11 :begincos_out <= YN15        ;sin_out <= ~XN15 + 1'b1 ;endendcaseend
end
endmodule

ITERATION.v

module INTERATION #(parameter   DATA_WIDTH       =    8'd32       ,parameter   shift            =    5'd0        ,parameter   ANGLE            =    32'h20000000)(input                                  clk     ,input                                  rst_n   ,input                                  ena     ,input       signed  [DATA_WIDTH - 1 : 0]      X0      ,input       signed  [DATA_WIDTH - 1 : 0]      Y0      ,input       signed  [DATA_WIDTH - 1 : 0]      Z0      ,output  reg signed  [DATA_WIDTH - 1 : 0]      X1      ,output  reg signed  [DATA_WIDTH - 1 : 0]      Y1      ,output  reg signed  [DATA_WIDTH - 1 : 0]      Z1);always@(posedge clk or negedge rst_n)beginif( rst_n == 0)beginX1 <= 0 ;Y1 <= 0 ;Z1 <= 0 ;endelse if( ena == 1)beginif(Z0[DATA_WIDTH - 1] == 0 )begin// X1 <= X0 - {{shift{ Y0[DATA_WIDTH - 1] }} ,Y0[DATA_WIDTH - 1 : shift] } ;// Y1 <= Y0 + {{shift{ X0[DATA_WIDTH - 1] }} ,X0[DATA_WIDTH - 1 : shift] } ;X1 <= X0 - (Y0>>>shift);Y1 <= Y0 + (X0>>>shift);Z1 <= Z0 - ANGLE                                                    ;endelse if(Z0[DATA_WIDTH - 1] == 1 )begin//X1 <= X0 + {{shift{ Y0[DATA_WIDTH - 1 ] }} ,Y0[DATA_WIDTH - 1 : shift] } ;// Y1 <= Y0 - {{shift{ X0[DATA_WIDTH - 1 ] }} ,X0[DATA_WIDTH - 1 : shift] } ;X1 <= X0 + (Y0>>>shift) ;Y1 <= Y0 - {X0>>>shift} ;Z1 <= Z0 + ANGLE                                                    ;endendendendmodule

CORDIC_tb.v

module cordic_tb #(parameter         DATA_WIDTH    =      8'd32  ,     // we set data widthparameter         PIPELINE      =      5'd16        // Optimize waveform    
);
reg                                 clk       ;
reg                                 rst_n     ;
reg          [DATA_WIDTH - 1 : 0]   phase     ;
reg                                 ena       ;
wire         [DATA_WIDTH - 1  : 0]   sin_out   ;
wire         [DATA_WIDTH - 1 : 0]   cos_out   ;integer i;
cordic32#(.DATA_WIDTH ( DATA_WIDTH ),.PIPELINE   ( PIPELINE )
)u_cordic32(.clk        ( clk        ),.rst_n      ( rst_n      ),.phase      ( phase      ),.ena        ( ena        ),.sin_out    ( sin_out    ),.cos_out    ( cos_out    )
);initial
begin#0 clk = 1'b0;ena   = 1'b1 ;#10 rst_n = 1'b0;#10 rst_n = 1'b1;#20000000 $stop;
end initial
beginrepeat(10)begin#0 phase = 32'd0;for(i=0;i<131072;i=i+1)begin#10;phase <= phase + 32'h8000;endend
end
always #10
beginclk = ~clk;
endendmodule 

README.md

在完成CORDIC的7次迭代之后 我在思考一个问题 8位进行了7次迭代 最后迭代至0号称没有误差了
我们是否可以通过 扩展至32位 进行多次迭代  将误差不断的缩小 本次数据参考至 网上的其他教程 我并没有自己去计算 我把结构优化一下 修改成更加便于理解使用的形式还有一件事 是 进制 与 Π 转化的问题 
对于 8位 其实我们 一开始将Π 设定为 1000_0000
那么对于 Π/4 是否就是1000_0000 的 四分之一 对于二进制 其实就是整体的数字进行移位 
我们将1000_0000 移动至 0010_0000 于此 而对于 32位我们32'h8000000 就是一个Π
而 32’h2000_0000 就是四分之Π 还有一件事 说明 我在写例化的时候 将数据完全完整的例化了下来 写的很长 这样并不是很好 
后面学习中 我看别人是 这么处理的 
genvar die;
generatefor (die = 0; die <Pipeline; die=die+1)begin: dieLoopalways @(posedge CLK_SYS or negedge RST_N)if (!RST_N) beginxn[die+1] <= 32'h0;yn[die+1] <= 32'h0;zn[die+1] <= 32'h0;endelse begin             if(zn[die][31]==1'b0)//角度符号判断beginxn[die+1] <= xn[die] - (yn[die]>>>die);yn[die+1] <= yn[die] + (xn[die]>>>die);zn[die+1] <= zn[die] - rot[die];  endelse beginxn[die+1] <= xn[die] + (yn[die]>>>die);yn[die+1] <= yn[die] - (xn[die]>>>die);zn[die+1] <= zn[die] + rot[die];  endendend
endgenerate# 还有一件事 对于溢出的考量 
我们所作溢出的考量 其实我们设定了32'h8000_0000 这既是Π的值 也是 1的设定 
但是在实际的运用和计算中 我们其实永远也达不到1 嘿嘿 
因为我们把最高位设计成了 符号位 
那么最大 也就是1 我们约等于 32'h7fff_ffff
这里需要注意的是[31:28] 是 7 也就是0111 非常重要的一个结论 我们最高位0代表了符号位
那么对于设计到第一象限的[31:30] 的值可以取 00 01 但是 10 11我们要对其进行合适的转化
所以便有了我们  对溢出的操作 always @(posedge clk or negedge rst_n)if(rst_n == 0)XN15<=0;else if(X15[31:30] == 2'b11)//小于0XN15<=~X15 + 1'b1;else if(X15[31:30] == 2'b10)//大于1XN15<=32'h80000000 - X15 + 32'h80000000;else XN15 <= X15;always @(posedge clk or negedge rst_n )if(rst_n == 0)YN15 <=0;else if(Y15[31:30] == 2'b11)//小于0 YN15 <=~Y15 + 1'b1;else if(Y15[31:30] == 2'b10)//大于1YN15 <=32'h80000000 -Y15 + 32'h80000000;else YN15 <=Y15;注意在设计的时候 定义成reg signed 的形式 将其设计为有符号位 

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/223078.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十大经典排序算法(个人总结C语言版)

文章目录 一、前言二、对比1.排序算法相关概念1.1 时间复杂度1.2 空间复杂度1.3 排序方式1.4 稳定度 2.表格比较3.算法推荐3.1 小规模数据3.2 中等规模数据3.3 大规模数据3.4 特殊需求 三、排序算法1.冒泡排序&#xff08;Bubble Sort&#xff09;1.1 简介1.2 示例代码&#xf…

【模式识别】探秘判别奥秘:Fisher线性判别算法的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《模式之谜 | 数据奇迹解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1 初识模式识…

C++结合OpenCV:掌握图像基础与处理

本文详细介绍了使用 OpenCV4 进行图像处理的基础知识和操作。内容包括图像的基础概念、色彩空间理解、以及如何在 C 中进行图像读取、显示和基础操作。 1.图像的基本概念与术语 图像表示 在计算机视觉中&#xff0c;图像通常表示为一个二维或三维的数组。二维数组表示灰度图像&…

VS(Visual Studio)更改文件编码

vs默认编码是GB2312,更改为UTF-8 工具->自定义

小白实战教学:开发同城外卖跑腿APP

本文将以"小白实战教学"为主题&#xff0c;向大家介绍如何从零开始&#xff0c;开发一款简单而实用的同城外卖跑腿APP。 一、准备工作 在开始之前&#xff0c;我们需要做一些准备工作。首先&#xff0c;确保你已经安装好了开发环境&#xff0c;包括合适的集成开发环…

随机森林 2(决策树)

通过 随机森林 1 的介绍&#xff0c;相信大家对随机森林都有了一个初步的认知&#xff0c;知道了随机和森林分别指的是什么&#xff0c;以及决策树根据什么选择内部节点。本文将会从森林深入到树&#xff0c;去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建&…

【MySQL】MySQL的数据类型

MySQL的数据类型 一、数据类型分类二、数值类型1、整数类型2、bit类型3、小数类型 三、字符串类型四、时间日期类型五、enum和set类型enum和set查找 数据类型的作用&#xff1a; 决定了存储数据时应该开辟的空间大小和数据的取值范围。决定了如何识别一个特定的二进制序列。 …

pdf 在线编辑

https://smallpdf.com/edit-pdf#rapp 参考 https://zh.wikihow.com/%E5%B0%86%E5%9B%BE%E5%83%8F%E6%8F%92%E5%85%A5PDF

服务器经常死机怎么办?如何处理

关于服务器死机这一话题相信大家是不会陌生的&#xff0c;平时在使用服务器的过程中&#xff0c;或多或少都是会有遇到过。轻则耽误业务开展&#xff0c;重则造成数据丢失&#xff0c;相信每个人都不想碰到服务器死机的情况。下文我也简单的介绍下服务器死机的原因以及对应的预…

计算机网络——计算机网络的概述(一)

前言&#xff1a; 面对马上的期末考试&#xff0c;也为了以后找工作&#xff0c;需要掌握更多的知识&#xff0c;而且我们现实生活中也已经离不开计算机&#xff0c;更离不开计算机网络&#xff0c;今天开始我们就对计算机网络的知识进行一个简单的学习与记录。 目录 一、什么…

01_数据结构和算法概述

01_数据结构和算法概述 0.1 什么是数据结构&#xff1f;官方解释&#xff1a; 0.2 数据结构分类物理结构分类&#xff1a; 0.3 什么是算法&#xff1f;官方解释&#xff1a;大白话&#xff1a; 0.4 算法初体验 0.1 什么是数据结构&#xff1f; 官方解释&#xff1a; 数据结构是…

React学习计划-React16--React基础(三)收集表单数据、高阶函数柯里化、类的复习

1. 收集表单数据 包含表单的组件分类 受控组件——页面中所有输入类的DOM,随着输入&#xff0c;把值存维护在状态里&#xff0c;需要用的时候去状态里取值&#xff08;推荐&#xff0c;避免了过渡使用ref&#xff09;非受控组件——页面中所有输入类的DOM&#xff0c;现用现取…

WEB渗透—PHP反序列化(八)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

springboot使用Validated实现参数校验

做为后端开发人员&#xff0c;一定有前端传的数据是可能会出错的警惕性&#xff0c;否则程序就可能会出错&#xff0c;比如常遇到的空指针异常&#xff0c;所以为了程序运行的健壮性&#xff0c;我们必须对每一个参数进行合法校验&#xff0c;就能避免很多不必要的错误&#xf…

50 个具有挑战性的概率问题 [01/50]:袜子抽屉

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff08;Fifty Challenge Problems in Probability with Solutions&#xff09;一书。我认为…

XM平台官网开户注册流程图解

注册前准备 在进行XM外汇官网注册之前&#xff0c;首先需要准备必要的信息&#xff0c;包括个人身份信息、联系方式以及相关财务信息。确保这些信息的准确性是保证注册流程顺利进行的关键。 一、要访问XM外汇官方网站&#xff0c;首先打开您的浏览器。在浏览器的地址栏中输入…

Graylog配置日志保留策略

找了半天没找到说的清楚的&#xff0c;只能抠官方文档 graylog的归档&#xff08;日志持久化&#xff09;只有付费版才能用&#xff0c;所以日志只能存在es中 1.理解官方给出的几个概念 轮转策略 (Index Rotation Strategy): 轮转策略定义了何时创建新的索引以及何时关闭旧的索…

十二、W5100S/W5500+RP2040之MicroPython开发<MQTT旧版OneNET示例>

文章目录 1. 前言2. 平台操作流程3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发…

从零开发短视频电商 在AWS上用SageMaker部署自定义模型

文章目录 简介使用model.tar.gz1.从huggingface上下载模型2.自定义代码3.打包为tar 文件4.上传model.tar.gz到S35.部署推理 使用hub1.在sagemaker上新建个jupyterlab2.上传官方示例ipynb文件3.指定HF_MODEL_ID和HF_TASK进行部署和推理 inference.py官方示例 简介 原始链接&…

【QT表格-6】QTableWidget的currentCellChanged实现中途撤销

背景&#xff1a; 【QT表格-1】QStandardItem的堆内存释放需要单独delete&#xff0c;还是随QStandardItemModel的remove或clear自动销毁&#xff1f;-CSDN博客 【QT表格-2】QTableWidget单元格结束编辑操作endEditting_qtablewidget 单元格编辑事件-CSDN博客 【QT表格-3】Q…