Как обнулить 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-м измерении.