![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#3 |
Đệ 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 ![]() 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); ................ } 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)) ...... 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. |
![]() |
![]() |
|
|