【【迭代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.pswp.cn/news/536789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536789.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第十四章Java博客

lambda就是數學中的“λ”的讀音&#xff0c;lambda表達式是基于λ演算而得名的&#xff0c;因為lambda抽象&#xff08;lambda abstraction&#xff09;表示一個匿名的函數&#xff0c;于是開發語言也將lambda表達式用來表示匿名函數&#xff0c;也就是沒有函數名字的函數。C#…

maven管理工具使用package打包的時候無法將lib文件夾下的第三方jar包打入,上線打jar包后運行異常問題

問題描述&#xff1a; 調用第三方接口的時候通過手動引入了第三方的兩個jar包到我本項目的lib文件夾下&#xff0c;并在pom文件添加入下配置&#xff1a; <dependency><groupId>cn.xxxx.xxxx.core</groupId><artifactId>xxxx-core</artifactId>…

Spring Boot 中實現跨域的幾種方式

前言 在現代Web應用中&#xff0c;由于安全性和隱私的考慮&#xff0c;瀏覽器限制了從一個域向另一個域發起的跨域HTTP請求。解決這個問題的一種常見方式是實現跨域資源共享&#xff08;CORS&#xff09;。Spring Boot提供了多種方式來處理跨域請求&#xff0c;本文將介紹其中的…

C語言字符串處理提取時間(ffmpeg返回的時間字符串)

【1】需求 需求&#xff1a;有一個 “00:01:33.90” 這樣格式的時間字符串&#xff0c;需要將這個字符串的時間值提取打印出來&#xff08;提取時、分、秒、毫秒&#xff09;。 這個時間字符串從哪里來的&#xff1f; 是ffmpeg返回的時間&#xff0c;也就是視頻的總時間。 下…

vs快捷鍵

ctrlMo 折疊代碼塊 ctrlML 打開代碼塊

電子電器架構(E/E)演化 —— 主流主機廠域集中架構概述

電子電器架構(E/E)演化 —— 主流主機廠域集中架構概述 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。…

系列七(實戰)、發送 接收單向消息(Java操作RocketMQ)

一、發送 & 接收單向消息 1.1、概述 發送單向消息&#xff0c;適用于發送方不關心或者不在意消息的發送結果&#xff0c;這種方式的吞吐量很大&#xff0c;但是存在消息丟失的風險&#xff0c;對于重要消息要慎用&#xff01;該種方式通常適用于對消息沒有那么嚴格的場景中…

類和對象的創建和實例化

1. 類的概述 1.1 具體示例 類是描述一類事物的特征和行為的統稱&#xff0c;抽象的不存在的&#xff0c;泛指的概念&#xff0c;例如&#xff1a;描述一個人&#xff0c;從外觀上&#xff08;特征&#xff09;和言行舉止&#xff08;行為&#xff09;上進行描述外觀上&#xff…

c 語言學習:輸出階乘的算式

c 語言學習&#xff1a;輸出階乘的算式 代碼 #include "stdio.h"int fact(int num){if (num < 1){printf("1 ");return 1;} else {printf("%d x ",num);return num * fact(num-1);} }int main(){int num 10; // printf("plz inpu…

【華為OD題庫-107】編碼能力提升計劃-java

題目 為了提升軟件編碼能力&#xff0c;小王制定了刷題計劃&#xff0c;他選了題庫中的n道題&#xff0c;編號從0到n-1&#xff0c;并計劃在m天內按照題目編號順序刷完所有的題目(注意&#xff0c;小王不能用多天完成同一題) 在小王刷題計劃中&#xff0c;小王需要用time[i]的時…

老鷹目標檢測數據集VOC格式60張

老鷹是天空中的王者&#xff0c;它們擁有極佳的飛行能力。它們能以驚人的速度在天空中翱翔&#xff0c;尤其擅長高空俯沖捕食。老鷹的視力非常敏銳&#xff0c;能夠準確地發現地面上的獵物&#xff0c;并迅速下落抓取。它們的爪子強而有力&#xff0c;足以擊倒比自己體型龐大的…

云計算與大數據之間的羈絆(期末不掛科版):云計算 | 大數據 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目錄 前言&#xff1a;一、云計算1.1 云計算的基本思想1.2 云計算概述——什么是云計算&#xff1f;1.3 云計算的基本特征1.4 云計算的部署模式1.5 云服務1.6 云計算的關鍵技術——虛擬化技術1.6.1 虛擬化的好處1.6.2 虛擬化技術的應用——12306使用阿里云避免了高峰期的崩…

NAT路由器,將內網ip轉換為外網ip

Network Address Translation&#xff0c;網絡地址翻譯。 概念 NAT就是在局域網內部使用內部地址&#xff0c;而當內部節點要與外部網絡通信時&#xff0c;在網關將內部地址替換為公用地址&#xff0c;從而在外部網關正常使用。 NAT表是轉換的核心 NAT路由器有NAT表&#xf…

0基礎學習VR全景平臺篇第131篇:曝光三要素—光圈

上課&#xff01;全體起立~ 大家好&#xff0c;歡迎觀看蛙色官方系列全景攝影課程&#xff01; 我們經常從電視或書刊上看到這樣的照片&#xff0c;照片的主體清晰&#xff0c;前后鏡朦朧虛化&#xff0c;整體看起來非常的漂亮。那這樣的照片是如何拍出來的呢&#xff1f;他和…

為什么要出現并發?并發的三要素

大家好&#xff0c;我是"java繼父"伯約&#xff0c;假如這篇對大家有幫助的話求一個贊&#xff0c;另外文章末尾放了我從小白到架構師多年的學習資料。 1.為什么需要多線程 眾所周知&#xff0c;CPU、內存、I/O 設備的速度是有極大差異的&#xff0c;為了合理利用 C…

Vue編寫登錄注冊頁面前端校驗

登錄注冊校驗 template頁面 <div class"app-login"><!--登錄 --><div class"form"><el-form ref"form" size"large" autocomplete"off" v-if"isLogin" :model"registerData" :r…

FXCM福匯官網:深入解析BOLL指標的喇叭口形態及含義

BOLL指標是一種通過布林線&#xff08;Bollinger Bands&#xff09;的上軌線、中軌線和下軌線的相互關系來判斷市場趨勢和波動性的技術分析工具。BOLL指標的喇叭口形態包括開口型、收口型和緊口型&#xff0c;它們各自具有獨特的含義。 《FXCM福匯官網開戶》 1. 開口型喇叭口…

cesium實現二三維聯動

記錄項目中實現二三維地圖聯動 效果如下&#xff1a; 第一步&#xff1a;現在頁面中加載二三維地圖&#xff08;地圖的初始化已省略&#xff09; <template><div><div><button click"show">二三維聯動</button></div><div&…

Go Web 編程

Go Web 編程 更新于 1年前 一步步帶你進入 Go Web 編程的世界,讓我們開始探索吧! 文檔類型:系統文檔 文章統計:96 篇,字數 12.52 萬,點贊 508 文章列表所有討論 基本信息 關于本書 第一章. Go 環境配置 01.0. Go 環境配置 01.1. 安裝 Go 01.2. GOPATH 與工作空間 …

經典文獻閱讀之--RenderOcc(使用2D標簽訓練多視圖3D Occupancy模型)

0. 簡介 3D占據預測在機器人感知和自動駕駛領域具有重要的潛力&#xff0c;它將3D場景量化為帶有語義標簽的網格單元。最近的研究主要利用3D體素空間中的完整占據標簽進行監督。然而&#xff0c;昂貴的注釋過程和有時模糊的標簽嚴重限制了3D占據模型的可用性和可擴展性。為了解…