2015-07-30 24 views
9

Tôi có ma trận được lưu trữ theo thứ tự hàng lớn. Tôi đang cố gắng để tính toán DCT của một ub-ma trận bằng cách sử dụng FFTW, và tôi nhận được vô nghĩa. Trong các đoạn văn sau đây, tôi sẽ mô tả vấn đề và giải pháp của tôi, và tôi muốn sự giúp đỡ của bạn trong việc hiểu tại sao nó không hoạt động.Mảng biến đổi thực tế FFTW biến đổi

Với một số il, tôi muốn để tính toán DCT của một tiểu ma trận trong đó bao gồm tất cả các hàng kk mod l == i. Ví dụ: giả sử rằng l = 3i = 2. Trong ma trận sau, ma trận phụ mà tôi muốn biến đổi được đánh dấu màu đỏ (2 mod 3 = 2, 5 mod 3 = 2, 8 mod 3 = 2).

Matrix

Các nguồn và đích mảng có cách bố trí tương tự, và ma trận biến đổi nên được lưu trữ trong cùng một vị trí trong mảng đích.

void transform(double* src, double* dest, size_t rows, size_t cols, size_t l, size_t i) 
{ 
    int rank = 2; 
    fftw_iodim64 dims[] = { 
     { rows/l, l, l }, 
     { cols, rows, rows } }; 
    fftw_r2r_kind kind = FFTW_REDFT10; 

    fftw_plan plan = fftw_plan_guru64_r2r(rank, dims, 0, NULL, src + l, dest + l, &kind, FFTW_ESTIMATE | FFTW_UNALIGNED | FFTW_PRESERVE_INPUT); 
    fftw_execute(plan); 
    fftw_destroy_plan(pla); 
} 

Cập nhật

Tôi đã thử nghiệm nó đối với trường hợp đơn giản khi i=l=1. Ngay cả trong trường hợp đó tôi cũng nhận được vô nghĩa. Tôi đã thử nghiệm với ma trận 3x4, chính xác là một trong các vectơ cơ sở DCT:

A(i,j) = cos((i + 0.5)*2*pi/3) * cos((j + 0.5)*3*pi/4) 

Tôi hy vọng sẽ nhận được kết quả khi tất cả các phần tử (gần bằng không) trừ một. Nhưng tôi nhận được ma trận kết quả trông giống như sau:

0    -2.22045e-016 1.33227e-015 2.22045e-016 
2.22045e-016 -2.77556e-016 9.99201e-016 5.55112e-017 
-8.88178e-016 -1.62359  7.83938  1.62359 

Có vẻ khá lạ.

Cập nhật 2

Tôi cũng đã thử nghiệm với một ma trận đơn giản nơi (0,0) phần tử là 1 và còn lại là zero. Trong trường hợp này, quá, i=l=1 (ma trận phụ là toàn bộ ma trận). Dưới đây là kết quả:

 2  2  2  0 
1.73205 1.73205 1.73205  0 
     1  1  1  0 
+0

Bạn có thể thử nghiệm với một số đầu vào rõ ràng (mẫu đơn giản của 1 và 0) và xem đầu ra bạn nhận được không? Có thể đăng nó ở đây để người ta có thể có được một ý tưởng những gì đang xảy ra? –

+0

Tôi đã làm một việc khác. Tôi đã điền vào ma trận phụ với một trong các vectơ cơ sở DCT. Những gì tôi nhận được là cái gì đó là * không * tất cả các số không ngoại trừ một phần tử khác không. Tôi nhận được nhiều yếu tố khác không trong kết quả. – Alex

+0

Bạn không chỉ định bất cứ nơi nào mà bước tiến đầu vào của bạn là 2 * hàng. –

Trả lời