Как обнулить pad массив matlab?
каков самый простой способ (нулевой) pad массива matlab?
то есть дано [1,2,3,4]
и длина 6 return [1,2,3,4,0,0]
фон
у меня есть массив данных, к которому я хотел бы применить функцию windowing перед запуском fft на данных.
Я использую для передачи данных непосредственно в БПФ, который будет нулевой колодкой в следующей степени 2, но теперь мне нужно нулевое заполнение перед БПФ, чтобы я мог умножить на функцию окна.
fs = 100; % Sample frequency (Hz)
t = 0:1/fs:10-1/fs; % 10 sec sample
x = (1.3)*sin(2*pi*15*t) ... % 15 Hz component
+ (1.7)*sin(2*pi*40*(t-2)) ... % 40 Hz component
+ (2.5)*randn(size(t)); % Gaussian noise;
m = length(x); % Window length
n = pow2(nextpow2(m)); % Transform length
w = barthannwin( n ); % FFT Window
y = fft(data, n); % DFT
windowed_data = x*w ; % Dimensions do not match as x not padded
y = fft(windowed_data, n); % DFT
Я в курсе padarray как часть панели инструментов обработки изображений, которой у меня нет.
4 ответов
редактировать
этот метод, вероятно, даже лучше для векторов, поскольку он не ломается при их транспонировании, обратите внимание, что он изменит исходный вектор, который может быть нежелательным:
myVec = 1:7;
myVec(end+3)=0
поочередно вы можете просто объединить нули и вектор, который у вас есть, и создать с ним новую переменную.
myVec = 1:7;
requiredpadding = 10-7;
myVecPadded=[myVec zeros(1,requiredpadding)]
нет встроенной функции для заполнения, но вот небольшая функция для заполнения вектора x
учитывая минимальную длину n
.
function y = pad(x, n)
y = x;
if length(x) < n
y(n) = 0;
end
это должно заполнить его нулями до ближайшей степени числа 2 для массива a
:
a(2^ceil(log2(length(a))))=0;
панель инструментов обработки изображений Matlab имеет встроенную функцию для размещения массивов padarray(A,dim,value
для примера:
A = [1, 2, 3, 4];
dimension = [0 1]; % pad with extra columns
size = 2; % how much to pad
B = padarray(A,size*dimension,'post') % 'post' says to pad at the end
% just for demonstration, let's pre-pad the first dimension (rows)
dimension = [1 0];
C = padarray(A,dimension,'pre') % just as an example
% or pad in both directions
dimension = [1 2];
D = padarray(A,dimension) % by default, it will pad both pre and post
возвращает
B =
1 2 3 4 0 0
C =
0 0 0 0
1 2 3 4
D =
0 0 0 0 0 0 0 0
0 0 1 2 3 4 0 0
0 0 0 0 0 0 0 0
вы также можете использовать это для многомерных массивов, вектор измерения просто должен быть расширен соответственно, т. е. dimension = [0 0 1]
будет распространяться в 3-м измерении.