如何对matlab数组进行零填充?
对matlab数组进行(零)填充的最简单方法是什么?如何对matlab数组进行零填充?,matlab,Matlab,对matlab数组进行(零)填充的最简单方法是什么? i、 e.给定[1,2,3,4]和长度6返回[1,2,3,4,0,0] 背景 我有一个数据数组,我想在对数据运行fft之前应用一个窗口函数 我曾经直接将数据传递给fft,fft会将其零点填充到下一个2的幂,但是现在我需要它在fft之前进行零点填充,这样我就可以乘以窗口函数 fs = 100; % Sample frequency (Hz) t = 0:1/fs:10-1/fs;
i、 e.给定
[1,2,3,4]
和长度6返回[1,2,3,4,0,0]
背景
我有一个数据数组,我想在对数据运行fft之前应用一个窗口函数
我曾经直接将数据传递给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
我知道这是图像处理工具箱的一部分,但我没有。EDIT
这种方法对于向量可能更好,因为当它们被转置时,它不会中断,请注意,它将改变原始向量,这可能不可取:
myVec = 1:7;
myVec(end+3)=0
或者,您可以将零和向量连接起来,并使用它创建一个新变量
myVec = 1:7;
requiredpadding = 10-7;
myVecPadded=[myVec zeros(1,requiredpadding)]
对于一个数组
a
,它应该用0填充到最接近的2次幂:
a(2^ceil(log2(长度(a)))=0
没有内置函数进行填充,但这里有一个小函数用于填充向量x
,给定最小长度n
function y = pad(x, n)
y = x;
if length(x) < n
y(n) = 0;
end
功能y=pad(x,n)
y=x;
如果长度(x)
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 1]
将扩展到第三维。看来您忘记删除结尾:
,所以我为您修复了它。有趣的是,我没有意识到MATLAB会用零填充未指定的数组索引。@ZZZ-如果a
的原始长度是2的幂呢?我怀疑,在这种情况下,您会覆盖最后一个元素!谢谢答案是肯定的,但我相信这是工具箱的一部分,不是内置的。你说得对,我的错。它是图像处理工具箱的一部分。