使用倍频程/matlab查找绘图可能交叉的位置
我有几个数据点绘制在下面,我想找到振幅值与4交叉时的频率值。我在下面的示例中包括了一个示例以及数据点。我用图表圈出了答案,但我不知道如何用数学方法计算它,并得到我想要的所有频率值。如何使用octave/matlab实现这一点?还有一个数学术语来描述我要做的事情吗 在这个例子中,我试图获得5个频率(但这只是一个例子),我知道有两个答案是30和80,但不确定如何获得其余的频率。完整的名单可能有数千人我使用的是倍频程3.8.1使用倍频程/matlab查找绘图可能交叉的位置,matlab,octave,discrete-mathematics,nonlinear-functions,Matlab,Octave,Discrete Mathematics,Nonlinear Functions,我有几个数据点绘制在下面,我想找到振幅值与4交叉时的频率值。我在下面的示例中包括了一个示例以及数据点。我用图表圈出了答案,但我不知道如何用数学方法计算它,并得到我想要的所有频率值。如何使用octave/matlab实现这一点?还有一个数学术语来描述我要做的事情吗 在这个例子中,我试图获得5个频率(但这只是一个例子),我知道有两个答案是30和80,但不确定如何获得其余的频率。完整的名单可能有数千人我使用的是倍频程3.8.1 clear all,clf, clc,tic %graphics_tool
clear all,clf, clc,tic
%graphics_toolkit gnuplot %use this for now it's older but allows zoom
freq=[20,30,40,50,60,70,80];
amp_orig=[2,4,3,7,1,8,4];
amp_inv=[6,4,5,1,7,0,4];
plot(freq,amp_orig,'-bo')
hold on
plot(freq,amp_inv,'-r*')
xlabel ("Frequency");
ylabel ("Amplitude");
谢谢如果您有权访问Matlabs Mapping Toolbox,则可以使用函数
polyxpoly()
轻松解决您的问题。它将找到两个图形的交点。它们甚至不必是直线,也可以是多边形。以下是您案例的一个示例:
%graphics_toolkit gnuplot %use this for now it's older but allows zoom
freq=[20,30,40,50,60,70,80];
amp_orig=[2,4,3,7,1,8,4];
amp_inv=[6,4,5,1,7,0,4];
plot(freq,amp_orig,'-bo')
hold on
plot(freq,amp_inv,'-r*')
xlabel ('Frequency');
ylabel ('Amplitude');
%// find and add intersections
[xi,yi] = polyxpoly(freq,amp_orig,freq,amp_inv)
plot(xi, yi,'ro','markersize',20) %// draw the red circles automatically :-)
结果看起来像这样试着从文件交换开始,它在八度音阶下似乎工作得很好x0
是感兴趣的频率:
>> [x0,y0,iout,jout] = intersections(freq,amp_orig,freq,amp_inv)
x0 =
30.000
30.000
42.500
55.000
64.286
80.000
y0 =
4.0000
4.0000
4.0000
4.0000
4.0000
4.0000
iout =
2.0000
2.0000
3.2500
4.5000
5.4286
7.0000
jout =
2.0000
2.0000
3.2500
4.5000
5.4286
7.0000
这有用吗?要回答你的另一个问题,你要做的是找到线的交点。问题很好地概述了各种技术。@amo谢谢,但此函数不能与octave 3.8.1 Hanks一起使用,但我使用的是octave,而且映射工具箱似乎没有polyxpoly函数yet@RickT好的,
polyxpoly()
是映射工具箱的一部分,我应该在回答中提到这一点。太糟糕了,这会让你的问题变得很容易。