Các đầu vào cho interp1
không phải lúc nào cũng như tầm thường như họ có vẻ - nếu bạn đang cố gắng để tăng tỷ lệ mẫu của bạn đến một số tiền nhất định mà không một ca lệch, không chỉ tăng số lượng các phần tử trong khi ghim các điểm kết thúc. Bạn đang yêu cầu điều kiện thứ hai, để giải pháp đó đã được đăng, nhưng tôi nghĩ rằng nó cũng đáng để thể hiện cách kiểm soát tốc độ lấy mẫu.
Đi câu trả lời hoàn toàn hợp lệ Shai cho tăng số lượng các yếu tố mà không quan tâm đến sự thay đổi trong tỷ lệ mẫu, đối với trường hợp này:
v = [1 2 3 4 10]; % 1x5
newNum = 10; % double the number
X = linspace(0,1,numel(v));
Xi = linspace(0,1,newNum);
iv = interp1(X, v, Xi, 'linear')
này nói rằng chúng ta muốn tăng số lượng các yếu tố 5-10 - - nhân đôi số phần tử - trong khi ghim các điểm kết thúc. Xác định tỷ lệ mẫu ban đầu cho v
thành 1, sau đó tỷ lệ mẫu là iv
là bao nhiêu?
>> iv = interp1(linspace(0,1,numel(v)), v, linspace(0,1,newNum))
iv =
Columns 1 through 8
1.0000 1.4444 1.8889 2.3333 2.7778 3.2222 3.6667 4.6667
Columns 9 through 10
7.3333 10.0000
>> fs_v = X(2) - X(1) % even spacing
fs_v =
0.2500
>> fs_vi = Xi(2) - Xi(1)
fs_vi =
0.1111
>> fs_v/fs_vi
ans =
2.2500
Nhiều hơn gấp đôi. Vâng, rõ ràng khi bạn nghĩ về nó, nhưng hãy xem xét nếu đây là những gì bạn muốn. Bạn nhận được kết thúc được ghim tại iv(1)=1
và iv(end)=10
, nhưng bạn không chỉ định thay đổi về tỷ lệ mẫu.
Bây giờ, giả sử bạn muốn tăng tỷ lệ mẫu chính xác gấp đôi. Bạn không thể nhận được rằng và có hai đầu gắn ở 1 và 10. Để xác định một Xi
đem đến cho bạn sự thay đổi tỷ lệ mẫu phải:
scale = numel(v)/newNum; % i.e. 0.5
X = 1:numel(v);
Xi = (1:newNum)*scale + 0.5 * (1 - scale); % centered
Kết thúc sẽ không được ghim, nhưng tỷ lệ mẫu sẽ đã tăng gấp đôi:
>> iv = interp1(X, v, Xi, 'linear', 'extrap')
iv =
Columns 1 through 8
0.7500 1.2500 1.7500 2.2500 2.7500 3.2500 3.7500 5.5000
Columns 9 through 10
8.5000 11.5000
>> (X(2) - X(1))/(Xi(2) - Xi(1))
ans =
2
Ít nhất trong xử lý tín hiệu, bạn thường sau khi thay đổi tỷ lệ mẫu không được tính.