7

matlab配列を(ゼロ)パディングする最も簡単な方法は何ですか?
つまり、与えられ[1,2,3,4]、長さ6が返されます[1,2,3,4,0,0]

バックグラウンド

データに対してfftを実行する前に、ウィンドウ関数を適用したいデータ配列があります。

私はデータをfftに直接渡すために使用しますが、これは2の次の累乗にゼロパディングしますが、ウィンドウ関数で乗算できるように、fftの前にゼロパディングが必要になります。

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

私は、持っていないImageProcessingToolboxの一部としてpadarrayを知っています。

4

4 に答える 4

9

編集

この方法は、移調されたときに壊れないため、ベクトルにはおそらくさらに適しています。元のベクトルが変更されるため、望ましくない場合があることに注意してください。

myVec = 1:7;
myVec(end+3)=0

または、ゼロと持っているベクトルを連結して、それを使用して新しい変数を作成することもできます。

myVec = 1:7;
requiredpadding = 10-7;
myVecPadded=[myVec zeros(1,requiredpadding)]
于 2013-02-15T16:28:12.023 に答える
3

パディングを行うための組み込み関数はありませんがx、最小の長さを指定してベクトルをパディングするための小さな関数を次に示しnます。

function y = pad(x, n)
y = x;
if length(x) < n
    y(n) = 0;
end
于 2013-02-15T17:50:27.847 に答える
1

これにより、配列の2の最も近い累乗のゼロが埋め込まれるはずaです。

a(2^ceil(log2(length(a))))=0;

于 2013-02-15T17:45:21.823 に答える
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次元で拡張します。

于 2014-03-16T19:01:01.867 に答える