Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对matlab数组进行零填充?_Matlab - Fatal编程技术网

如何对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;

对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;                % 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的幂呢?我怀疑,在这种情况下,您会覆盖最后一个元素!谢谢答案是肯定的,但我相信这是工具箱的一部分,不是内置的。你说得对,我的错。它是图像处理工具箱的一部分。