Thông báo

Collapse
No announcement yet.

nhờ các bác tư vấn,đề tại:thiết kế FIR thích nghi trên nền fpga

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

  • nhờ các bác tư vấn,đề tại:thiết kế FIR thích nghi trên nền fpga

    đây là đồ án tốt nghiệp của em,hiện giờ về lý thuyết về bộ lọc thì em cũng đã nắm được đôi chút,em trình bày ra đây còn gì thiếu thì các bác bổ xung cho em nhá
    1.Bộ lọc fir thích nghi gồm 2 phần : 1 là bộ lọc FIR 2 là 1 bộ thuật toán thích nghi
    2.Cấu trúc bộ lọc thì em chọn hoặc là kiểu trực tiếp hoắc transpose
    3.Thuật toán thích nghi dử dụng thuật toán LMS,về công thức thì em đã nắm đươc ,tuy nhiên trên mạng lại không có bài nào nói về việc viết thuật toán này =vhdl ???
    em muốn hỏi các bác 1 số cái như thế này
    1.Khi thiết kế bộ lọc FIR thì trong quyển dsp của proakis thì có 2 phần riêng biệt là cấu trúc bộ lọc FIR và thiết kế bộ lọc FIR,cái này em không hiểu lắm???
    2.Em muốn hỏi thêm là e(n)=d(n)-y(n) với d(n) là tín hiệu mong muốn,vậy tín hiệu này lấy từ đâu???
    3.Thày của em nó là có thể mô phỏng qua modelsim,vậy làm sao biết được là mình viết ra là đúng hay sai ???

  • #2
    Nguyên văn bởi boyzzun Xem bài viết
    đây là đồ án tốt nghiệp của em,hiện giờ về lý thuyết về bộ lọc thì em cũng đã nắm được đôi chút,em trình bày ra đây còn gì thiếu thì các bác bổ xung cho em nhá
    1.Bộ lọc fir thích nghi gồm 2 phần : 1 là bộ lọc FIR 2 là 1 bộ thuật toán thích nghi
    2.Cấu trúc bộ lọc thì em chọn hoặc là kiểu trực tiếp hoắc transpose
    3.Thuật toán thích nghi dử dụng thuật toán LMS,về công thức thì em đã nắm đươc ,tuy nhiên trên mạng lại không có bài nào nói về việc viết thuật toán này =vhdl ???
    em muốn hỏi các bác 1 số cái như thế này
    1.Khi thiết kế bộ lọc FIR thì trong quyển dsp của proakis thì có 2 phần riêng biệt là cấu trúc bộ lọc FIR và thiết kế bộ lọc FIR,cái này em không hiểu lắm???
    2.Em muốn hỏi thêm là e(n)=d(n)-y(n) với d(n) là tín hiệu mong muốn,vậy tín hiệu này lấy từ đâu???
    3.Thày của em nó là có thể mô phỏng qua modelsim,vậy làm sao biết được là mình viết ra là đúng hay sai ???
    Ví dụ bạn truyền một tín hiệu có 2 trạng thái, 0 và 1 (1 bit / symbol). Khi bạn truyền ra ngoài, bạn truyền 1 Volt cho logic 1 và -1 Volt cho logic 0.
    Ở tại đầu nhận, trong đièu kiên lý tưởng bạn sẽ nhân được 1 Volt và -1 Volt.
    Nếu không, bạn sẽ nhận được 1 chuỗi ví dụ: 0.5V, 0.8V, 1.1 V ... -0.3 Volt ... v.v.v
    Giờ bạn phải "decode" nó, giả sử bạn nếu dương bạn cho nó là 1 ==> tín hiệu lý tưởng là 1V.
    Nếu âm, tín hiệu bạn truyền đi là -1V ...
    Từ đó bạn tính ngược lai error ... V.V

    Bạn mô phỏng trong matlab (hoăc Scilab) trước đi đã.

    Comment


    • #3
      Bạn tạo 1 tín hiệu ngẫu nhiên, gồm 1 và -1 x(n)
      Tao một hàm h(n) mô phỏng là môi trường của bạn

      y(n) = x(n)*h(n) ... y(n) là tín hiệu nhận được đã bị "distorted" ...

      Nhiệm vụ của LMS algorithm là tìm ra hàm h'(n) sao cho h'(n)*h(n) = delta ... delta là hàm xung ... có giá trị = 1 tai 0 và = 0 tai tất cả các điểm khác

      h'(n) là transfer function của FIR của bạn

      như vậy:

      y(n)*h'(n) = x(n)*h(n)*h'(n) = x(n) ===> bạn khôi phục lại tín hiệu gốc không bị biến dạng.

      Comment


      • #4
        Nguyên văn bởi jefflieu Xem bài viết
        Bạn tạo 1 tín hiệu ngẫu nhiên, gồm 1 và -1 x(n)
        Tao một hàm h(n) mô phỏng là môi trường của bạn

        y(n) = x(n)*h(n) ... y(n) là tín hiệu nhận được đã bị "distorted" ...

        Nhiệm vụ của LMS algorithm là tìm ra hàm h'(n) sao cho h'(n)*h(n) = delta ... delta là hàm xung ... có giá trị = 1 tai 0 và = 0 tai tất cả các điểm khác

        h'(n) là transfer function của FIR của bạn

        như vậy:

        y(n)*h'(n) = x(n)*h(n)*h'(n) = x(n) ===> bạn khôi phục lại tín hiệu gốc không bị biến dạng.
        mình có cái này không hiểu:
        1.sao lại lấy y(n)*h'(n),nếu thế thì y(n) sẽ là đầu vào của bộ lọc fir????bạn có thể mô tả sơ đồ khối cho mình không??? đây là ựng dụng nào cho cho lọc thích nghi???cách giải thích của bạn hơi khác so với những gì mình đọc hiểu
        2.đầu ra của bộ lọc fir thường được biểu diễn qua công thức tổng của các tích mà trong đó các thành phần của 1 tích là 1sample có giá trị cuar tín hiệu đầu vào nhân với giá trị của coeff của FIR,vậy thì đầu ra của bộ lọc FIR sẽ là 1 số ????
        3.Việc update cho các coeff của lọc thích nghi thì thường sử dụng phép lặp,vậy lặp bao nhiêu lần thì mới được
        4.Khi mà thực hiện mô phỏng(chưa chạy trên kit) làm sao để đưa 1 chuỗi tín hiệu vào mạch lọc thích nghi

        Comment


        • #5
          Nguyên văn bởi boyzzun Xem bài viết
          mình có cái này không hiểu:
          1.sao lại lấy y(n)*h'(n),nếu thế thì y(n) sẽ là đầu vào của bộ lọc fir????bạn có thể mô tả sơ đồ khối cho mình không??? đây là ựng dụng nào cho cho lọc thích nghi???cách giải thích của bạn hơi khác so với những gì mình đọc hiểu
          2.đầu ra của bộ lọc fir thường được biểu diễn qua công thức tổng của các tích mà trong đó các thành phần của 1 tích là 1sample có giá trị cuar tín hiệu đầu vào nhân với giá trị của coeff của FIR,vậy thì đầu ra của bộ lọc FIR sẽ là 1 số ????
          3.Việc update cho các coeff của lọc thích nghi thì thường sử dụng phép lặp,vậy lặp bao nhiêu lần thì mới được
          4.Khi mà thực hiện mô phỏng(chưa chạy trên kit) làm sao để đưa 1 chuỗi tín hiệu vào mạch lọc thích nghi
          đầu ra của FIR là 1 số tại một thời điểm, là một chuỗi số theo thời gian

          Việc update cho các coef lặp lại liên tục. Càng ngày các coef sẽ hội tụ và dao động trong một khoảng nào đó.

          Bạn dùng Matlab tạo một tín hiệu hình sin rồi in ra file, vào ctrinh mô phỏng đọc lại.

          Comment


          • #6
            e = d - y, trong công thức này thì y[n] là tín hiệu ở đầu ra của FIR

            Comment


            • #7
              Nguyên văn bởi jefflieu Xem bài viết
              đầu ra của FIR là 1 số tại một thời điểm, là một chuỗi số theo thời gian

              Việc update cho các coef lặp lại liên tục. Càng ngày các coef sẽ hội tụ và dao động trong một khoảng nào đó.

              Bạn dùng Matlab tạo một tín hiệu hình sin rồi in ra file, vào ctrinh mô phỏng đọc lại.
              nếu in ra thì in như thế nào,trong trường hợp này thì phải dùng phần mềm để chuyển qua ak,cái này mình cũng không hay dùng nên không rõ lắm,nếu có thể bác chỉ cho em tài liệu để đọc.

              nễu chuối đã đựoc đưa sang thi đưa nó vào phần testbench như thế nào,bình thường khi test thì mình chỉ ấn định bằng 1 số nhị phân cụ thể,về 1 mảng thì mình chưa thử bao h,bác cũng chỉ cho em chỗ để em đọc với
              PS:có thể dùng khối NCO trong fpga được không nhỉ,em cũng có tài liệu về cái này nhưng mà không biết vấn đề về pha tín hiệu sẽ ntn vì em muôn cái tín hiệu d(n)=NCO+ nhiễu
              Last edited by boyzzun; 19-02-2014, 01:09.

              Comment


              • #8
                Nguyên văn bởi boyzzun Xem bài viết
                nếu in ra thì in như thế nào,trong trường hợp này thì phải dùng phần mềm để chuyển qua ak,cái này mình cũng không hay dùng nên không rõ lắm,nếu có thể bác chỉ cho em tài liệu để đọc.

                nễu chuối đã đựoc đưa sang thi đưa nó vào phần testbench như thế nào,bình thường khi test thì mình chỉ ấn định bằng 1 số nhị phân cụ thể,về 1 mảng thì mình chưa thử bao h,bác cũng chỉ cho em chỗ để em đọc với
                PS:có thể dùng khối NCO trong fpga được không nhỉ,em cũng có tài liệu về cái này nhưng mà không biết vấn đề về pha tín hiệu sẽ ntn vì em muôn cái tín hiệu d(n)=NCO+ nhiễu
                In ra dùng printf thì phải mình không nhớ, bạn vào matlab hoặc scilab kiếm. Có thể print dạng binary hoặc hex hoặc decimal ... Mảng cũng giống vậy thôi, cùng lắm thì phải lặp rồi in ra từng số
                Trong các ctrinh mô phỏng sẽ đọc được integer/hex/binary ...

                Bạn dùng matlab tính luôn cái tín hiệu bị nhiễu rồi xuất ra ...
                t=(0;0.001;1)
                x = sin(2pif*t)
                h = [1 0.5 0.3]
                z = conv(x,h)
                Đem z cho qua bộ lọc của bạn

                Comment


                • #9
                  bác ơi,em bị thế này,khi mà đã viết xong file testbench thì khi mà chạy trên giản đồ(cái giản đồ màu xanh ý) nó không load,kiểu như bị treo ý,mình phải tắt máy bằng tay rồi khởi động lại thì vẫn bị thế,cái này là do máy hay do code viết ra không phù hợp

                  Comment


                  • #10
                    Do code đó ...

                    Comment


                    • #11
                      Nguyên văn bởi jefflieu Xem bài viết
                      Do code đó ...
                      thật không bác,em tham khảo trong quân dsp in fpga mà,nó cũng cho ra kết quả,vậy sao của em lại teo nhỉ
                      PS:em viết trên xilinx,còn ông này viết trên quartus II thì có bị làm sao không nhỉ,bác có biết phần code của the parameterized multiplier megafuntion trong quartus II nội dung của nó như thế nào không,em làm trên xilinx thì dùng bộ nhân bình thường(dùng toán tử *-phần này em đã có bài test trc đó chạy rất ok mà)
                      Last edited by boyzzun; 21-02-2014, 12:00.

                      Comment


                      • #12
                        Nói đùa thôi, bạn đau có post cai gì mà biết nó bị treo cái gì.
                        Xilinx simulator lâu lâu bị điên, cách duy nhất là dò code lại coi có vòng lặp nào bị lỗi hoặc comment code từ từ coi dòng nào gây ra.

                        Comment


                        • #13
                          Nguyên văn bởi jefflieu Xem bài viết
                          Nói đùa thôi, bạn đau có post cai gì mà biết nó bị treo cái gì.
                          Xilinx simulator lâu lâu bị điên, cách duy nhất là dò code lại coi có vòng lặp nào bị lỗi hoặc comment code từ từ coi dòng nào gây ra.
                          èo,hôm nay thử test lại mấy bài trc đây tưng làm mà nó cũng chả chạy đựoc gì cả,xem chừng phải kiểm tra lại tưng khối thôi
                          mà bác cho em hỏi tí,nếu code viết trên quartus II thì hình như không hỗ trợ spartan 3e nhỉ,nếu thế nạp vào liệu có sai không ????
                          Last edited by boyzzun; 21-02-2014, 18:35.

                          Comment


                          • #14
                            Nguyên văn bởi jefflieu Xem bài viết
                            Nói đùa thôi, bạn đau có post cai gì mà biết nó bị treo cái gì.
                            Xilinx simulator lâu lâu bị điên, cách duy nhất là dò code lại coi có vòng lặp nào bị lỗi hoặc comment code từ từ coi dòng nào gây ra.
                            em có gửi file này lên,bác xem giúp xem em code có gì sai không,em nghi là ở phần testbench thôiadaptive.zip

                            Comment


                            • #15
                              Không thấy sai gì, bạn comment bớt, simulate u1/u2/u3 từ từ

                              Comment

                              Về tác giả

                              Collapse

                              boyzzun Tìm hiểu thêm về boyzzun

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

                              Collapse

                              Đang tải...
                              X