View Single Post
Old 08-11-2008, 02:27 PM   #3
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Ý tưởng chương trình của em thế này :
- Dùng ADC thu thập dữ liệu lưu vào mảng inputsignal[] được lưu trên RAM
- Sử dụng bộ lọc FIR để lọc thông cao tín hiệu inputsignal[] với hệ số bộ lọc lưu trong mảng FIRpre_emphasis[] ( được lưu trong bộ nhớ chương trình) được truy cập nhờ vào không gian ánh xạ PSV.
- Tín hiệu sau khi lọc lưu vào mảng outputsignal[] lưu trên RAM
Đoạn code trích lược như sau em chưa hiểu cách viết lắm, chỉ dựa trên các tài liệu của của C30 và các bài viết của anh Nam nên cách viết còn nhiều chổ sai, chưa đúng, rất mong anh Nam sửa dùm em).
Code:
#include "p30f6014a.h"
#include "dsp.h"
....
....
//Luoc qua cau hinh ban dau
extern void  FIRDelayInit ( FIRStruct * filter); // khai bao prototype cho ham FIRDelayInit
extern  fractional * FIR (int numSamps, fractional * dstSamps, fractional * srcSamps,  
                                              FIRStruct * filter);
fractional  __attribute__ ((space(auto_psv), aligned(128)))
           FIRpre_emphasis[2]={0x7FFF, 0x8666};   //mang he so bo loc FIR duoc luu
                                                                   // trong bo nho chuong trinh
fractional inputsignal[256];                               // inputsignal mac dinh luu trong RAM
fractional outputsignal[256];                             // outputsinal mac dinh luu trong RAM

int main(void)
  {
   ........
   ........
  // xem nhu la da co 256 mau du lieu dang fractional thu duoc tu ADC trong  
  // trong inputsignal[256]
   FIRDelayInit(&FIRpre_emphasis);
   FIR(256, &outputsignal, &inputsignal, &FIRpre_emphasis);
  ................
  }
Anh Nam cho em hỏi một vài câu hỏi. Mong anh giảng giải giúp em.
1. Cách khai báo 1 mảng trong bộ nhớ chương trình của em như vậy là đúng hay sai, có tối ưu việc sử dụng bộ nhớ chương trình chưa?
2. aligned(128) : tức là vùng nhớ được canh lề theo 128 bytes một (theo cách giảng của anh trong tutorial 2). Nhưng thú thật em chưa hiểu nghĩa tiếng Việt của từ "canh lề" này lắm. Mong anh giảng lại giúp em.
3. Việc khai báo 2 mảng inputsignal và outputsignal như trên của em sẽ được lưu mặc định vào vùng nhớ X của RAM gần có phải ko? Vì em định thêm ..near space(xmemory) nhưng nghĩ không cần nên thôi.
4. Trong Tutorial 2 của anh, anh có khai báo một bảng giá trị cho LED trong ROM, anh viết như sau :
Code:
      const unsigned __attribute__ ((space(psv), address(0x200))
      ......
Trong khai báo đó thì từ khóa nào để C30 nhận biết là dữ liệu được lưu trên ROM. Có thể em đã có câu trả lời nhưng em hỏi lại anh cho chắc và hiểu rõ hơn.
5. Nếu như em đoán đúng thì inputsignal sẽ được lưu trên X memory => dữ liệu từ trong hệ số bộ lọc bằng cách nào đó sẽ phải ánh xạ qua bên vùng nhớ Y memory. Anh Nam giảng giải giúp em chổ này.
6. Câu hỏi cuối cùng : trong prototype khai báo cho hàm FIR, em thấy có giá trị trả về dạng fractional nhưng em đọc hoài trong tài liệu hướng dẫn vẫn không thấy nó trả về con số gì. Vậy nó trả về con số gì vậy anh Nam.

Em biết câu hỏi hơi dài và anh không có nhiều thời gian nhưng em rất mong anh giúp em hiểu hết "đống lung tung" này. Em cảm ơn anh rất nhiều.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn