小编Kat*_*tyB的帖子

如何绘制光谱图功能的结果?

在我的图中,我有2个轴,第一个是信号的时间序列,第二个是信号的时间序列ifft.我想添加一个包含信号频谱图的第3轴.我怎样才能做到这一点?

% Create the raw signal
fs = 40;
t = 0:( 1/fs ):4;
y1 = [ sin( 2*pi*5*t( t<=2 ) ), sin( 2*pi*10*t( t>2 ) ) ];

% Compute the ifft of the signal
Fy1 = abs(ifft(y1));
N = numel(t);
idx = 1:numel(Fy1) / 2;
f = fs*(0:(N-1)) / N;

% Plot the raw signal as a time series
subplot(311);
plot(t,y1,'k');
xlabel('Time (s)');
ylabel('Amplitude');

% Plot the spectrum of the signal
subplot(312);
plot(f(idx),2*Fy1(idx),'k')
xlabel('Frequency (cycles/second)');
ylabel('Amplitude');
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用该 …

matlab spectrogram

5
推荐指数
1
解决办法
2万
查看次数

将每两周一次的年度温度数据插入到matlab中的每小时测量中

我有一个每两周记录一次的年度温度测量数据集.数据类似于以下内容:

t = 1:14:365;
% GENERATE DATA
y = 1 + (30-1).*rand(1,length(t));
y1 = 20*sin(2*pi*t/max(t));        % Annual variation °C
y1(y1<0) = [];
tt = 365/14;
time = 1:tt:365;
plot(time,y1,'-o');
Run Code Online (Sandbox Code Playgroud)

它明显遵循年度温度循环.

由此我想知道是否可以在数据上添加正弦函数(代表昼夜温度范围)?例如,从每两周一次的数据,如果我们插值系列有8760次测量,即每小时测量,该系列是可信的,将需要通过一个昼夜温差循环,除了每年的温度循环为特征.此外,昼夜温度周期需要是当时温度测量的函数,即在夏季比冬季更大.所以也许最好先使用线性插值来获取数据来表示每小时的间隔,然后添加正弦函数.有没有把它写入脚本的方法?或者有没有人对如何准确地实现这一点有意见?

time matlab interpolation

4
推荐指数
1
解决办法
661
查看次数

在R中使用biwavelet包

任何人都可以建议为什么以下示例代码不起作用:

require(biwavelet)
t <- seq(1/24, 365, 1/24)
A <- 2
fs <- 1/24
y <- A + sin(2*pi*fs*t)
d = cbind(t,y)
wt.t1 <- wt(d)
plot(wt.t1)
Run Code Online (Sandbox Code Playgroud)

它会生成错误说明:

Error in image.default(x$t, yvals, t(zvals), zlim = zlims, ylim = rev(range(yvals)),  : 
  invalid z limits
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

额外:

回应Gavin Simpsons回答:如果我保持数据仅包含一个频率但改变时间向量,则代码工作正常.

require(biwavelet)
A <- 2
fs <- 1/24
y <- A + sin(2*pi*fs*t)
d <- cbind(seq(1,8760), y) 
wt.t1 <- wt(d)
plot(wt.t1)
Run Code Online (Sandbox Code Playgroud)

r wavelet biwavelet

3
推荐指数
1
解决办法
1077
查看次数

突出显示伪彩色图中的某些值

关于在matlab中绘制伪彩色图,我有一个非常基本的问题.如果我有一个情节如下:

d1 = 1:4;
d2 = 1:4;
dat = [2,3,4,1;...
    3,4,7,1;...
    8,7,6,1;...
    2,3,3,1];
pcolor(d1,d2,dat);shading interp
Run Code Online (Sandbox Code Playgroud)

那么我可以在这个图上绘制一条线来突出显示某些值,例如通过值= 5画一条线吗?请注意,我想避免使用contourf,并希望在此实例中使用pcolor.

matlab plot

3
推荐指数
1
解决办法
615
查看次数

r - 带NA的时间序列填充

比如说,如果我有一个数据框如下:

Date1 <- seq(from = as.POSIXct("2010-05-01 02:00"), 
             to = as.POSIXct("2010-10-10 22:00"), by = 3600)
Dat <- data.frame(DateTime = Date1,
                  x1 = rnorm(length(Date1)))
Run Code Online (Sandbox Code Playgroud)

每次测量之间的间距是1小时.如何在今年剩余时间内使用NA填充此数据框,其中最终解决方案的长度应为8760,即全年的每小时测量值.例如,我想将DateTime列扩展到2010-01-01 00:00到2010-12-31 23:00,但是对于已添加到原始日期的日期,x1列为NA数据框(如果有意义的话).我想提出一个可以有多年的解决方案,即如果数据从2009年5月延伸到2012年9月那么最终的解决方案应该有这个数据集但是缺少的时间即从2009年1月到2012年12月到用NA填充.我该如何解决这个问题?

r time-series

3
推荐指数
1
解决办法
1311
查看次数

在matlab图的标记内插入字符串

我有一个2D线图:

d3 = [1, 3, 5, 6, 8, 9];
plot(d3, '-ob');
Run Code Online (Sandbox Code Playgroud)

我想知道如何在线图的标记中插入一个值,例如将y值插入标记的中心.例如:

例

这可能吗?

matlab plot

3
推荐指数
1
解决办法
5513
查看次数

广义线性模型的不同可能变量组合

R中是否有方法为具有不同组合的数据帧中的每个不同变量运行GLM,例如

如果我有4个解释变量,我可以将Y建模为

m1 = glm(Y ~ V1, data = d)
m2 = glm(Y ~ V1 + V2, data = d)
m3 = glm(Y ~ V1 + V2 + V3, data = d)
m4 = glm(Y ~ V1 + V2 + V3 + V4, data = d)
Run Code Online (Sandbox Code Playgroud)

但是,我也可以

m5 = glm(Y ~ V1 + V2 + V4, data = d)
Run Code Online (Sandbox Code Playgroud)

等等.

R中是否有方法可以选择数据框中所有不同的变量组合,以查看哪些变量可以作为最佳预测变量?

r

3
推荐指数
1
解决办法
2887
查看次数

更快的matlab插值方法

我使用interp1来提交一些数据:

temp = 4 + (30-4).*rand(365,10);
depth = 1:10;

dz = 0.5; %define new depth interval
bthD = min(depth):dz:max(depth); %new depth vector

for i = 1:length(temp);
    i_temp(i,:) = interp1(depth,temp(i,:),bthD);
end
Run Code Online (Sandbox Code Playgroud)

在这里,我通过将测量值从1 m增量插值到0.5 m增量来增加测量值的分辨率.这段代码工作正常,它给了我正在寻找的矩阵.但是,当我将其应用于我的实际数据时,运行需要很长时间,主要是因为我正在运行一个运行不同单元格的附加循环.有没有办法在不使用循环的情况下实现上述内容,换句话说,是否有更快的方法?

matlab interpolation

2
推荐指数
1
解决办法
1872
查看次数

找到具有大于1的最大连续数值的时间区域

我有两个时间序列:

dat = [0,2,3,0,2,2,0,0,1,0.8,3,4,6,7,4,4,3,0,1,3,2.2,0];
dat2 = dat+.5;
time = 1:length(dat);
plot(time,dat);
hold on;
plot(time,dat2,'r');
Run Code Online (Sandbox Code Playgroud)

我想及时发现这两个向量的连续数值大于1的区域.因此,对于这个特定的例子,两个向量在10到18之间具有大于1的值.但是,它们在其他几个场合也具有大于1的值.我可以通过首先生成一个矩阵来获得大于1的值的索引:

data = [dat',dat2'];
Run Code Online (Sandbox Code Playgroud)

然后使用find

r1 = data>1;
Run Code Online (Sandbox Code Playgroud)

这将为我提供每个值大于1的位置.接下来我想找到在最长持续时间内保持值> 1的时间(在哪些行之间).我怎样才能做到这一点?

matlab find

2
推荐指数
1
解决办法
360
查看次数

通过 R 中的函数传递字符串

我有以下功能:

example_Foo <- function( ...,FigureFolder){

  # check what variables are passed through the function  
  v_names <- as.list(match.call())
  variable_list <- v_names[2:(length(v_names)-2)] 

  # create file to store figures
  subDir <- c(paste(FigureFolder,"SavedData",sep = "\\"))

}
Run Code Online (Sandbox Code Playgroud)

显然这只是该功能的开始,但我已经遇到了一些问题。在这里,我尝试定义最终希望保存结果的目录。使用该函数的示例是:

weight <- c(102,20,30,04,022,01,220,10)
height <- c(102,20,30,04,022,01,220,10)

catg <- c(102,20,30,04,022,01,220,10)
catg <- matrix(height,nrow = 2)

FigureFolder <- "C:\\exampleDat"

# this is the function
example_Foo(catg,FigureFolder)
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

Error in paste(FigureFolder, "SavedData", sep = "\\") : 
  argument "FigureFolder" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

我猜测是由于函数不知道“FigureFolder”是什么,我的问题是如何通过函数传递这个字符串?

r function path

2
推荐指数
1
解决办法
9006
查看次数

标签 统计

matlab ×6

r ×4

interpolation ×2

plot ×2

biwavelet ×1

find ×1

function ×1

path ×1

spectrogram ×1

time ×1

time-series ×1

wavelet ×1