在 MATLAB 中,Y = fft(X,n,dim)
返回沿维度 的傅里叶变换dim
。例如,如果X
是一个矩阵,则fft(X,n,2)
返回每一行的 n 点傅里叶变换。但是,在 R 中是不同的。你知道解决这个问题的任何功能吗?所以考虑n
和dim
,得到一个n
长度复向量?请参阅示例中的那个n>ncol(X)
.
MATLAB代码
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
x1 = cos(2*pi*50*t); % First row wave
x2 = cos(2*pi*150*t); % Second row wave
x3 = cos(2*pi*300*t); % Third row wave
n = 2^nextpow2(L);
dim = 2;
X = [x1; x2; x3];
Y_right = fft(X,n,dim); %Result: 3*1024 complex double
Y_wrong = fft(X); %Result: 3*1000 complex double (I am looking for the above result)
R代码
Fs <- 1000
T <- 1/Fs
L <- 1000
t <- (0:(L-1))*T
x1 <- cos(2*pi*50*t)
x2 <- cos(2*pi*150*t)
x3 <- cos(2*pi*300*t)
n<-2^ceiling(log2(abs(L)))
dim <- 2
X <- t(matrix(c(x1, x2, x3), ncol=3))
Y <- fft(X)
# Result: 3*1000 cplx and it is not the same as `Y_wrong` (operates along each row)
#To get Y_wrong:
Y <- matrix(0, nrow=3, ncol=1000)
for (i in 1:ncol(X)) {
Y[,i] <- fft(X[,i], inverse = T)
}
我的目标是得到Y_right
,和Y认为通过使用apply
我们得到的一样Y_wrong
。先感谢您。