Thông báo

Collapse
No announcement yet.

Phát FSK chuẩn V23 bằng PIC 18F452 +DAC 12bit

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

  • #46
    Mã C# cho pp1 tạm gọi pp 3T

    Code:
    using System;
    
    namespace FSK
    {
    	class FSKClass
    	{
    		static int InputValue = 0;
    		static int Phase = 0;
    		static int PhaseShift = 0;
    		static int FS = 8000;
    		static int F0 = 1300;
    		static int F1 = 2100;
    		static int DeltaW0;
    		static int DeltaW1;
    		static System.IO.StreamWriter file;
    		[STAThread]
    		static void Main(string[] args)
    		{
    			DeltaW0 = Round(360*F0/FS);
    			DeltaW1 = Round(360*F1/FS);
    			InputValue = 202;
    			file = new System.IO.StreamWriter("c:\\test.txt");
    
    			FSK();
    			file.Close();
    			Console.ReadLine();
    		}
    		static void FSK()
    		{
    			for (int i=0; i<=40000;i++)
    			{	if ((i % 750) == 0)		SampleInt();
    				if ((i % 5000) == 0)	BaudInt(i);
    			}
    		}
    		static void SampleInt()
    		{
    			Phase += PhaseShift;
    			if (Phase >= 360) Phase = Phase - 360;
    			file.WriteLine("{0}",LookupSin(Phase));
    		}
    		static void BaudInt(int i)
    		{
    			if (i!=0) Phase += Round(PhaseShift*(i % 750)/750);
    			if ((InputValue & 1) == 0)
    			{
    				PhaseShift = DeltaW0;
    			} 
    			else
    			{
    				PhaseShift = DeltaW1;
    			}
    			Console.WriteLine("{0} {1}",InputValue & 1,PhaseShift);
    			InputValue = InputValue >> 1;
    			if (i!=0) Phase -= Round(PhaseShift*(i % 750)/750);
    		}
    		static int LookupSin(int degrees)
    		{
    			return Round((1+Math.Sin(Math.PI*degrees/180))*2048);
    		}
    		static int Round(double v)
    		{
    			return System.Convert.ToInt32(v);
    		}
    	}
    }
    File txt dữ liệu và hình ảnh với giá trị 11001010 bit thấp phát trước.
    Last edited by qmk; 23-02-2006, 17:28.
    Vẫn biết mỗi lần xa là một lần về lại...

    Comment


    • #47
      Hihi... chúc anh qmk lấy giải cho bằng được, phát huy lên anh, xem anh MH có thể "*" được ko?

      Comment


      • #48
        ĐN: Hàm số f(x) gọi là liên tục tại x=x0 thuộc TXĐ khi và chỉ khi lim f(x)=f(x0) khi x tiến dần tới x0.
        Vẫn biết mỗi lần xa là một lần về lại...

        Comment


        • #49
          các bạn cho ý kiến xem trao giải cho ai? qmk hay 3T hay đồng giải nhất?
          Câu hỏi phụ: Muốn dùng MCU tốc độ thấp hơn thì dùng cách tra bảng. Cách đó như thế nào? Cách tạo bảng số liệu đó. Câu này không dùng để chấm điểm trao giải.
          Nếu có tên trúng giải xin cho địa chỉ liên hệ qua email để trao.
          Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

          Biến tần
          Máy giặt
          Lò vi sóng
          Bếp từ.
          Tủ lạnh.
          Điều hòa

          Comment


          • #50
            static int LookupSin(int degrees)
            {
            return Round((1+Math.Sin(Math.PI*degrees/180))*2048);
            }

            Cho chạy hàm này từ 0 - 359 sẽ có bảng tra hàm sin với biên đội 12bit. 2048 tương đương với 0.

            Tiếp theo giải cách 2 là đạo hàm bằng nhau.
            Cách này kô tự tin lắm nhờ mọi người góp ý.
            Đầu tiên là một tẹo về lý thuyết.

            Giả sử tại thời điểm t=0 chuyển chu kỳ.
            Lúc này trước đó đang là tần số F0 biểu diễn bởi hàm
            f0(t) = sin(2.pi.F0.t + Pha0) -> f0'(t) = 2.pi.F0.cos(2.pi.F0.t + Pha 0)
            Sau đó là tần số F1
            f1(t) = sin(2.pi.F1.t + Pha1) -> f1'(t) = 2.pi.F1.cos(2.pi.F1.t + Pha1)
            Đạo hàm liên tục
            f1'(t) = f0'(t)
            F0/F1.cos(2.pi.F0.t + Pha0) = cos(2.pi.F1.t + Pha)
            t = 0;
            Pha1 = acos(F0*cos(Pha0)/F1)
            Pha0 bằng bao nhiêu. Nếu đầu tiên Pha0 bằng 0. Thì ở bit thứ n Pha 0 là Pha1 của bit thứ n-1.

            Cái đau đầu ở đây là là Arccos chỉ cho kết quả từ 0 - Pi (0 - 180). Cho nên làm sao để phân biệt.
            Vẫn biết mỗi lần xa là một lần về lại...

            Comment


            • #51
              Thực ra chỉ cần tất cả 4 bảng, 2 bảng giá trị SIN của 2 tần số và 2 bảng chuyển đổi góc pha giữa 2 tần số. Cái này tính sẵn trên PC. Mối bảng 2K phần tử là OK.

              các bạn cho ý kiến xem trao giải cho ai nhé? ( 1LCD16x2 + 1 ModulRF)
              Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

              Biến tần
              Máy giặt
              Lò vi sóng
              Bếp từ.
              Tủ lạnh.
              Điều hòa

              Comment


              • #52
                Hai cách giải của 3T và qmk giống nhau, 3T đưa lời giải trước(theo em là khá hợp lý), qmk lời giải sau có vẻ đầy đủ hơn.
                Theo em, cả 2 đều đạt giải, nhưng 3T có ý tưởng đúng trước, nên chăng bác qmk nhường cho 3T...he he..
                Nhưng đáp án cuối cùng của anh Mh là gì? em vẫn ko tin là vừa liên tục, vừa trơn(đạo hàm trái = phải) như anh nói?
                -------------------

                Comment


                • #53
                  To: Bác Hà. Thực ra chỉ có thể là quan hệ giữa sin và độ hoặc rad. Em kô hiểu 2 bảng tra sin làm gì.
                  Theo cách 3T thì sử dụng 1 bảng tra W ra sin(W):
                  sin(W)
                  Giờ ta chỉ cần thiết lập qui luật biến đổi của W. Không cần phân biệt pha, tần số... cho phức tạp.
                  Với mỗi chu kỳ lấy mẫu:
                  W(n) = W(n-1) + DeltaW (tốc độ chuyển pha)
                  DeltaW sẽ tính từ tần số rất dễ.
                  Với mỗi chuyển bit tại delta n* (n* là số thực) khi đó chỉnh lại giá trị.
                  Theo cách của 3T thì là chia đều tốc độ chuyển pha ra mỗi bên đóng góp theo thời gian.

                  Vote 1 phiếu cho 3T.
                  Vui thôi, tranh thủ ôn lại tý kiến thức quên gần hết.
                  Last edited by qmk; 23-02-2006, 18:53.
                  Vẫn biết mỗi lần xa là một lần về lại...

                  Comment


                  • #54
                    Nguyên văn bởi qmk
                    F0/F1.cos(2.pi.F0.t + Pha0) = cos(2.pi.F1.t + Pha)
                    t = 0;
                    Pha1 = acos(F0*cos(Pha0)/F1)
                    Pha0 bằng bao nhiêu. Nếu đầu tiên Pha0 bằng 0. Thì ở bit thứ n Pha 0 là Pha1 của bit thứ n-1.

                    Cái đau đầu ở đây là là Arccos chỉ cho kết quả từ 0 - Pi (0 - 180). Cho nên làm sao để phân biệt.
                    Pha1 = +-acos(F0*cos(Pha0)/F1)+K*2Pi, nên chỗ phase - thì chọn k=1

                    Anh ới, bài toán có một số chỗ vô nghiệm đấy anh. Ví dụ: tại biểu thức:
                    cos(2.pi.F1.t + Pha)=F0/F1.cos(2.pi.F0.t + Pha0) ;
                    F0=2300;F1=1300;
                    cos(2.pi.F1.t + Pha)=1.77*cos(2.pi.F0.t + Pha0) ;
                    Khi |cos(2.pi.F0.t + Pha0)|>0.56 thì vô nghiệm.
                    Bởi vậy, phải đưa yếu tố biên độ vào may ra mới có thể được.

                    Comment


                    • #55
                      Cho nên anh qmk ko nên giải cách 2 để đỡ mất thời gian...hihi...

                      Comment


                      • #56
                        À, có vẻ cách tính chuyển pha của 3T chính xác hơn cách của bác qmk, vì 3T quan tâm tới yếu tố thời gian.
                        -------------------

                        Comment


                        • #57
                          Đây là bài toán để chế tạo MODEM V23. Dùng PIC và DAC và 1 PLL . 2 bảng tra SIN (2048 phần tử) để tra từ góc ( ô mễ ga t + phi) ra giá trị thực và 2 bảng để chuyển đổi góc pha của 2 tần số. Với mỗi góc pha của 1300Hz sẽ có 1 giá trị tương ứng của pha của tần số 2100Hz. Độ chính xác thì đề bài đã cho là dùng DAC 12 bit. Do đó sai số 1 bit / 2048 là chấp nhận đựơc. Nếu tính chính xác hơn nữa thì DAC cũng không đáp ứng được.
                          Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

                          Biến tần
                          Máy giặt
                          Lò vi sóng
                          Bếp từ.
                          Tủ lạnh.
                          Điều hòa

                          Comment


                          • #58
                            Giúp Em với!

                            Các anh chị ai có sơ đồ mạch nguyên lý phát FSK post lên cho em với. thanks nhiều!

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X