Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 24784|回復: 11
打印 上一主題 下一主題

[問題求助] 請問~Verilog 設計資料排序~

  [複製鏈接]
1#
發表於 2010-4-11 15:41:07 | 顯示全部樓層
對於3x3的median filter你可以考慮22排序(這是我之前自己用的方法), 只要多排幾次就有答案
- ~: l, q  ~/ ?至於real time本來就不是問題, 除非你要在FPGA跑超過300MHz以上的clock rate (就算要跑更高速也是可以的, 只要從演算法著手修改就行了), 用ASIC的話速度就不是重點了.
& q# ^4 Y1 o# t% B) w/ m) G9 G3 w2 U* m; o
舉個4進4出的例子:" w! e2 @* f* E( {
input [word length] a[4];+ `1 d- ]% h- c8 R- ]5 [' c
reg [word length] b[4], c[4];& \7 o3 {. T4 X  {6 |  T: J
第一次排序3 p( f  S9 @$ k" d6 m
b[0]=min(a[0], a[1]);2 g$ s9 V$ U9 O
b[1]=max(a[0], a[1]);
- K7 `1 v& ~; s" |& U, Z. b- qb[2]=min(a[2], a[3]);
5 ^% m6 B' t) K0 W/ [b[3]=max(a[2], a[3]);
" G4 r2 A5 B2 R2 R第二次排序
" }+ b5 l7 c1 ]/ r2 I# \c[0]=min(b[0], b[2]); //real minmum
1 a+ V( `6 }3 N; B3 x! s/ jc[1]=max(b[0], b[2]);3 X0 [& F# D9 k/ J
c[2]=min(b[1], b[3]);
9 y% F2 ]# m0 S( _c[3]=max(b[1], b[3]);//real maximum& t1 A! E6 X5 l$ A, G
第三次修正項) @$ I$ q* x6 U: i! ~) q8 ^
d[0]=c[0]; //real minmum
' f( ~7 I) T5 _( s8 N' o- Wd[1]=min(c[1], c[2]);! b3 |! }9 u  V- n! E
d[2]=max(c[1], c[2]);
6 I3 C  s$ I) D+ od[3]=c[3];//real maximum% x& C- Q& W5 j% h& ]4 Z
//d[0]~d[3]就是依序小到大的答案0 q! L+ n8 L* O

. a  p' e  G8 r8 `( E這個方法對你只有拋磚引玉的效果 (照做當然也會成功), 對於median filter, 建議你修改一下這個方法, 並且省略很多不需要的運算 (因為你只需要留下中間值, 其他的值並不需要)6 l" q9 W% @0 p  s

9 @3 l- R& |1 Q! \1 A) d實做的考量
' T5 a5 y" d5 e, ?1. 實做上min()跟max()應該是一起做的
: i9 `9 V; v" g$ H1 X4 I. a/ [ if(a>b)
' G% q; j+ X9 U3 F9 G2 g     min = b;
/ p* E3 y3 M. i4 |8 y0 t5 c     max = a;
1 e' F' T3 ?8 G5 Y  else
4 ^) e; W4 ^/ V    min = a;
& w( _) h; c) [7 _. f' y6 E    max = b;; a! X8 R1 a, f3 Q4 P) [
2. 另外實做時, 考慮硬體的複雜度及執行的速度, 適度的修改一定有其必要性.
( H9 m5 F& @, S; R) f  V% D( Y3. 如果要做adaptive median filter的話, 除了中間值以外要多留下幾個項.
/ o; y* u9 ^2 B* d) ^P.S. 用我的方法寫conference paper記得要掛我名字哦...XD
2#
發表於 2010-4-12 22:31:10 | 顯示全部樓層
啪啪啪" L5 d3 {0 |" k2 `6 l6 `
其實你的想法已經跟我的想法是一樣的了, 我想已經你知道我一開始講的那個方法的最大問題了3 Y( c+ e# x! \! H+ @
最大問題在於, 第二次的結果只保証最大值及最小值是對的, 對於修正項, 需要更多的運算
. k2 y: m( [- Q: g當亂度能包含所有的項時, 答案一定是對的/ L  j: s$ \# K
所以關鍵就在於如何用最少的運算次數達到最大的亂度.( C/ e! q) k* A# v6 K) P/ p3 Z
左上到右下不用再算的理由是, 左上一定是最小值, 右下一定是最大值, 所以根本不用算! g. e: _7 Z6 o2 E3 }7 W' t
所以在最大的亂度中, 8-1=7次應是最多的運算了, 8 i: [; J( w( t
( l; D& F0 N" y2 O- N
有人有更佳解嗎?
3#
發表於 2010-4-19 20:39:23 | 顯示全部樓層
沒聲大大, 其實大家都很棒啊.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-3 10:07 PM , Processed in 0.105006 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表