Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Tạo tín hiệu, tham số của tín hiệu rồi ghi các giá trị gián đoạn của tín hiệu ra 1 file. HELP!!!

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    4

    Mặc định Tạo tín hiệu, tham số của tín hiệu rồi ghi các giá trị gián đoạn của tín hiệu ra 1 file. HELP!!!

    Mình đang mắc bài này quá! Mong các bạn hướng dẫn giùm! :(
    Xây dựng một chương trình có chức năng tạo tín hiệu theo yêu cầu người sử dụng về dạng tín hiệu (bậc thang, dốc,xung vuông,sin hoặc ồn trắng), tham số của tín hiệu (tùy theo dạng tín hiệu chọn như biên độ, tần số, độ dốc, độ rộng xung...). Yêu cầu người sử dụng nhập khoảng thời gian cần tạo giá trị tín hiệu cùng thời gian trích mẫu, sau đó ghi các giá trị gián đoạn của tín hiệu ra 1 file do người dùng nhập.
    Cám ơn mọi người trước!

  2. #2
    Ngày gia nhập
    09 2011
    Bài viết
    4

    hjx, không ai giúp mình sao, gợi ý thôi cũng đc mà. Không cần code. Ý tưởng của mình hiện rất mông lung, rất cần có ý kiến đóng góp của mọi người!

  3. #3
    Ngày gia nhập
    12 2010
    Bài viết
    4

    hỏi thày Chu Đức Việt ý

  4. #4
    Ngày gia nhập
    09 2011
    Bài viết
    4

    làm đc chưa cậu?

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bài này bạn nên tạo 1 class WaveForm, có các hàm public sau :
    C++ Code:
    1. virtual void Input(fstream &fin) = 0;
    2. virtual double F(double x) = 0;
    3. void Output(double samplerate, double tmax, fstream &fout);

    Sau đó bạn lần lượt tạo các class con kế thừa từ các class này : StairCaseWave, ClockWave, SineWave, ... Ứng với mỗi dạng xung, bạn lần lượt hiện thực 2 hàm Input và hàm F. Ví dụ tín hiệu dạng sin thì bạn cần đọc vào biên độ và tần số, mình sẽ hiện thực 2 hàm của class SineWave cho bạn dễ hình dung :
    C++ Code:
    1. void Input(fstream &fin)
    2. {
    3.    fin>>m_A;
    4.    fin>>m_freq;
    5. }
    6.  
    7. double F(double x)
    8. {
    9.    return m_A * sin(m_freq * x);
    10. }

    Hàm Output trong class WaveForm sẽ nhận vào thời gian trích mẫu ( SampleRate ) và thời gian cần tạo trị ( tmax ). Hàm Output sẽ được hiện thực như thế này:
    C++ Code:
    1. double t = 0.0, y;
    2. while (t <= tmax)
    3. {
    4.    y = this->F(x);
    5.    fout<<t<<" "<<y<<endl;  
    6.    t += samplerate;
    7. }

    Để cho dễ nhớ, bạn nên khai báo enum các dạng tín hiệu, ví dụ như :
    C++ Code:
    1. typedef enum WaveFormType
    2. {
    3.    STAIRCASEWAVE,
    4.    CLOCKWAVE,
    5.    SINEWAVE,
    6.    // .....
    7. };

    Hàm main bạn phải mở file và đọc vào giá trị cho biết dạng của tín hiệu. Từ giá trị này bạn switch case tạo class tương ứng. Cuối cùng là gọi các hàm của class để thực hiện công việc mà đề bài yêu cầu.
    C++ Code:
    1. WaveForm *wv = NULL;
    2. int wavetype = 0;
    3.  
    4. fstream fin("input.txt");
    5. fin>>wavetype;
    6.  
    7. switch (wavetype)
    8. {
    9.    // ......  
    10.    case SINEWAVE:
    11.       wv = new SineWave();
    12.       break;
    13. }
    14.  
    15. if (wv == NULL)
    16. {
    17.    fin.close();
    18.    return;
    19. }
    20.  
    21. wv->Input(fin);
    22.  
    23. double samplerate, tmax;
    24. fin>>samplerate>>tmax;
    25. fin.close();
    26.  
    27. fstream fout("output.txt");
    28. wv->Output(samplerate, tmax, fout);
    29. fout.close();
    30.  
    31. delete wv;
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 06-10-2011 lúc 08:28 AM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    09 2011
    Bài viết
    4

    Mặc định Tạo tín hiệu, tham số của tín hiệu rồi ghi các giá trị gián đoạn của tín hiệu ra 1 file. HELP!!!

    Cám ơn meocon rất nhiều. Chỉ tiếc là mình nhỡ nộp bài cho thầy ngày hôm qua mất rồi :( Nhưng chắc chắn mình sẽ tham khảo thêm cách của bạn cho nhưng bài sau.

  7. #7
    Ngày gia nhập
    03 2011
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Bài này bạn nên tạo 1 class WaveForm, có các hàm public sau :
    C++ Code:
    1. virtual void Input(fstream &fin) = 0;
    2. virtual double F(double x) = 0;
    3. void Output(double samplerate, double tmax, fstream &fout);

    Sau đó bạn lần lượt tạo các class con kế thừa từ các class này : StairCaseWave, ClockWave, SineWave, ... Ứng với mỗi dạng xung, bạn lần lượt hiện thực 2 hàm Input và hàm F. Ví dụ tín hiệu dạng sin thì bạn cần đọc vào biên độ và tần số, mình sẽ hiện thực 2 hàm của class SineWave cho bạn dễ hình dung :
    C++ Code:
    1. void Input(fstream &fin)
    2. {
    3.    fin>>m_A;
    4.    fin>>m_freq;
    5. }
    6.  
    7. double F(double x)
    8. {
    9.    return m_A * sin(m_freq * x);
    10. }

    Hàm Output trong class WaveForm sẽ nhận vào thời gian trích mẫu ( SampleRate ) và thời gian cần tạo trị ( tmax ). Hàm Output sẽ được hiện thực như thế này:
    C++ Code:
    1. double t = 0.0, y;
    2. while (t <= tmax)
    3. {
    4.    y = this->F(x);
    5.    fout<<t<<" "<<y<<endl;  
    6.    t += samplerate;
    7. }

    Để cho dễ nhớ, bạn nên khai báo enum các dạng tín hiệu, ví dụ như :
    C++ Code:
    1. typedef enum WaveFormType
    2. {
    3.    STAIRCASEWAVE,
    4.    CLOCKWAVE,
    5.    SINEWAVE,
    6.    // .....
    7. };

    Hàm main bạn phải mở file và đọc vào giá trị cho biết dạng của tín hiệu. Từ giá trị này bạn switch case tạo class tương ứng. Cuối cùng là gọi các hàm của class để thực hiện công việc mà đề bài yêu cầu.
    C++ Code:
    1. WaveForm *wv = NULL;
    2. int wavetype = 0;
    3.  
    4. fstream fin("input.txt");
    5. fin>>wavetype;
    6.  
    7. switch (wavetype)
    8. {
    9.    // ......  
    10.    case SINEWAVE:
    11.       wv = new SineWave();
    12.       break;
    13. }
    14.  
    15. if (wv == NULL)
    16. {
    17.    fin.close();
    18.    return;
    19. }
    20.  
    21. wv->Input(fin);
    22.  
    23. double samplerate, tmax;
    24. fin>>samplerate>>tmax;
    25. fin.close();
    26.  
    27. fstream fout("output.txt");
    28. wv->Output(samplerate, tmax, fout);
    29. fout.close();
    30.  
    31. delete wv;
    Bạn cho mình hỏi nếu là hàm dạng xung vuông thì cần đọc vào những yếu tố nào?và bạn có thể nói rõ hơn đối với dạng ồn trắng thì cần đọc vào yếu tố nào ko

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mấy cái này ko thuộc chuyên ngành cntt bạn àh, nó của bên điện tử. Mình cũng hết ham hố qua học ké bên điện tử nữa rồi. Xung vuông nếu mình nhớ ko lầm là xung răng cưa, được sinh ra từ mạch dao động nghẹt. Nó cần biên độ và tần số. Ồn trắng thì mình ko biết.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    03 2011
    Bài viết
    3

    Cảm ơn bạn nhiều nha

Các đề tài tương tự

  1. Tham số, tham trị, tham biến. Ý nghĩa như thế nào trong lập trình C?
    Gửi bởi toend2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 28-08-2014, 10:24 AM
  2. Dịch ngược File Exe để lấy tham số của nó
    Gửi bởi RadiRadic trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 28-10-2012, 10:01 AM
  3. cách truyền tham số khi gọi form được tạo từ file dll
    Gửi bởi tuanngocpt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 19-06-2012, 03:48 PM
  4. Không mở file từ tham số dòng lệnh được.
    Gửi bởi QuynhChi trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 08-04-2012, 11:29 PM
  5. Lập trình C++ hàm với tham số là tên của file có được không?
    Gửi bởi thnguyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 28-11-2011, 10:51 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn