Thông báo

Collapse
No announcement yet.

Hobby project ... FFT/IFFT

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #46
    Ai tốt bụng test thêm giùm đi hoặc có cách nào test chuyên nghiệp hơn ko?

    Comment


    • #47
      Jeff kỳ này viết systemC hết xẩy rồi. Khi nào xét nghiệm xong ở floating point model rồi thì dùng systemC data type để chuyển qua bit accurate model nhe.

      Jeff thử dùng header file để làm typedef thì sau này chuyển qua data type khác sẽ dễ dàng hơn. Ví dụ

      // typedef.h
      #ifndef BIT_ACCURATE
      typedef float my_data_t;
      #else
      typedef sc_fixed<64,32> my_data_t;
      #endif

      Dùng my_data_t ở những chỗ dùng float. Thêm typedef nếu cần.

      Chúc thành công
      Tony
      Last edited by tonyvandinh; 25-05-2010, 07:28.
      Chúc một ngày vui vẻ
      Tony
      email : dientu_vip@yahoo.com

      Comment


      • #48
        Nguyên văn bởi tonyvandinh Xem bài viết
        Jeff kỳ này viết systemC hết xẩy rồi. Khi nào xét nghiệm xong ở floating point model rồi thì dùng systemC data type để chuyển qua bit accurate model nhe.

        Jeff thử dùng header file để làm typedef thì sau này chuyển qua data type khác sẽ dễ dàng hơn. Ví dụ

        // typedef.h
        #ifndef BIT_ACCURATE
        typedef float my_data_t;
        #else
        typedef sc_fixed<64,32> my_data_t;
        #endif

        Dùng my_data_t ở những chỗ dùng float. Thêm typedef nếu cần.

        Chúc thành công
        Tony

        Uhm, okie a. Em đang tính coi cái phần fixed-point này chứ viết kiểu integer hơi mệt. Thanks.

        Comment


        • #49
          Thêm 2 test vectors
          Attached Files

          Comment


          • #50
            Báo cáo là đã test FFT-floating-point cấu trúc R2SDF với 16k-point và 64k-point. Không vấn đề gì.
            Có thể bắt đầu chuyển sang Bit_accurate với fix-point của SystemC

            Comment


            • #51
              Ngoài kiểm tra kiểu hộp đen (black-box testing) như thế này còn phải test kiểu nào nữa không nhỉ?

              Comment


              • #52
                Đã chuyển sang mô phỏng với Fixed-point

                Phương pháp kiểm tra và so sánh kết quả khi thay đổi độ rộng của input (bitwidth):
                - Dùng Matlab tạo 1 chuỗi số nguyên random từ 0 tới 3, cái này dùng làm data, dùng hàm qammod để tạo số phức biểu diễn data ở dạng constellation:
                X(k) = a+ bi, a, b = +/-1
                - Dùng Matlab tạo ifft từ chuỗi X(k) ... W=ifft(x) ... rồi in mảng W ra file.
                - Khi dùng SystemC chạy mô phỏng FFT, output sẽ được mảng Y, đem Y so sánh với mảng ban đầu X.
                - Sai số giữa Y và X được đánh giá bằng thông số MER (modulation error ratio), trong đó:

                ERROR = \sum_{}^{k} |Y(k)-X(k)|^2
                SIGPOW=mean(|X(k)|^2)
                MER = 10log10(SIGPOW/ERROR)

                Kết quả:
                Với 16bit twiddle factor:
                Input Bit MER(dB)
                8 | 27.38
                9 | 33.40
                10 | 39.21
                11 | 45.14
                12 | 51.16
                13 | 57.22
                14 | 63.24

                Sai số này là do quá trính tính toán bằng số fixed-point (quantization noise)... Kết quả này khá khớp với công thức: "thêm 1 bit sẽ tảng thêm khoảng 6dB "
                Attached Files
                Last edited by jefflieu; 05-06-2010, 02:23.

                Comment


                • #53
                  Mắc kẹt chỗ này gần 1 tháng rồi.
                  Vừa bận vừa bí thiết kế chỗ Block Floating Point.
                  Haiz. Ai có cao kiến gì hok?

                  Comment


                  • #54
                    Nguyên văn bởi jefflieu Xem bài viết
                    Mắc kẹt chỗ này gần 1 tháng rồi.
                    Vừa bận vừa bí thiết kế chỗ Block Floating Point.
                    Haiz. Ai có cao kiến gì hok?
                    Jeff thử "profile" mấy variables mà chuyển từ floating to fixed point để xem sai số ở chỗ nào. Để profile cho một variable, thì chạy simulation rồi dùng printf để viết tất cả giá trị ra bài. Sau đó dùng excel để sort là sẽ biết minimum và maximum và từ đó có thể quyết đoán độ dài (bit width, cho nguyên và phân số, etc ), . Khi chuyển qua fixed point, cũng nên để ý tới "overflow" mode (by default, thường ở mode wrap over). Chuyển qua saturation có thể bị ít sai số hơn.

                    Chúc Jeff thành công.
                    Chúc một ngày vui vẻ
                    Tony
                    email : dientu_vip@yahoo.com

                    Comment


                    • #55
                      Nguyên văn bởi tonyvandinh Xem bài viết
                      Jeff thử "profile" mấy variables mà chuyển từ floating to fixed point để xem sai số ở chỗ nào. Để profile cho một variable, thì chạy simulation rồi dùng printf để viết tất cả giá trị ra bài. Sau đó dùng excel để sort là sẽ biết minimum và maximum và từ đó có thể quyết đoán độ dài (bit width, cho nguyên và phân số, etc ), .
                      Em chuyển qua fixed-point rồi và tăng bitwidth lên sau mỗi lần tính ... nên ít khả năng overflow.
                      Nhưng nếu tăng bitwidth lên như vậy sẽ mất nhiều memory bit.
                      Phương pháp block-floating-point là dùng fixed point + một số gọi là exponent (khác biệt với dùng số float là, số exponent này được dùng chung cho 1 stage, tức là mọi số sẽ được scale với cùng 1 số exponent).
                      Vấn đề là làm sao biết được max, min trong lúc chạy (run-time) để scale cho phù hợp.

                      Khi chuyển qua fixed point, cũng nên để ý tới "overflow" mode (by default, thường ở mode wrap over). Chuyển qua saturation có thể bị ít sai số hơn.
                      Oke, noted.

                      Comment


                      • #56
                        Nguyên văn bởi jefflieu Xem bài viết
                        Vấn đề là làm sao biết được max, min trong lúc chạy (run-time) để scale cho phù hợp.
                        Như đã đề cập trước, nếu in (dùng fprintf) tất cả giá trị trong khi chạy simulation (run time) và khi variable còn ở float rồi dùng excel để xếp thứ tự (sorting) thì sẽ biết được min và max trong testcase đó.
                        Chúc một ngày vui vẻ
                        Tony
                        email : dientu_vip@yahoo.com

                        Comment


                        • #57
                          Nguyên văn bởi tonyvandinh Xem bài viết
                          Như đã đề cập trước, nếu in (dùng fprintf) tất cả giá trị trong khi chạy simulation (run time) và khi variable còn ở float rồi dùng excel để xếp thứ tự (sorting) thì sẽ biết được min và max trong testcase đó.
                          Như vậy thì làm sao chạy real-time?

                          Comment


                          • #58
                            Thôi tạm bỏ qua phần Block-floating-point vây. Làm tiếp HDL coding.

                            Comment


                            • #59
                              Lười quá chưa viết code HDL bạn ạ.

                              Comment


                              • #60
                                Hoho, 2 năm

                                Comment

                                Về tác giả

                                Collapse

                                jefflieu Email minh trực tiếp nếu bạn cần download tài liệu gấp Tìm hiểu thêm về jefflieu

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X