Matlab 如何避免输出值为无穷大?
我编写了以下代码,根据发送方和接收方之间的距离以及接收方的SNR阈值来计算所需的传输功率。然而,我得到了所需强度(Req_I)和所需传输功率(Req_Pt)的巨大值。如果我在计算传输功率的技术或代码本身中出错,请提出解决方案 致意Matlab 如何避免输出值为无穷大?,matlab,communication-protocol,acoustics,Matlab,Communication Protocol,Acoustics,我编写了以下代码,根据发送方和接收方之间的距离以及接收方的SNR阈值来计算所需的传输功率。然而,我得到了所需强度(Req_I)和所需传输功率(Req_Pt)的巨大值。如果我在计算传输功率的技术或代码本身中出错,请提出解决方案 致意 Pt=12; %Transmit power in watts spreading=1.5; %Spreading factor f
Pt=12; %Transmit power in watts
spreading=1.5; %Spreading factor
f=10; %Frequency in Kilo Hz.
d=0.5; %Distance in Kilo Meters.
NL=47.69; %Noise Level in db
DI=0; %Directivity Index
pi=3.14159265359;
SNRth=17; %SNR threshold in db
%absorption=10^((0.002+0.11*(f^2/((1+f^2)+0.011*f^2)))/10); %Absorption factor
absorption=10^((0.11*(f^2/(1+f^2))+44*(f^2/(4100+f^2))+2.75*10^(-4)*f^2+0.003)/10);
TL=(d^spreading)*(absorption^d); %Transmission Loss
Req_SL=SNRth+TL+NL+DI; %Required Source Level
Req_I=((10^Req_SL)/10)*(0.67*10^(-18)); %Required Intensity
Req_Pt=Req_I*4*pi; %Required Transmission Power
TL因子的计算可能是错误的,也许你忘了取它的对数 我不知道你的公式是从哪里来的,也不知道你的具体应用。如果您没有正确的公式,可以查看,其中提供了衰减和扩展导致的TL因子的表达式。检查您的单位 原始文件给出了低频传播的表达式(3),即您使用的表达式,但要求输入单位为kHz,而不是Hz。要么你应该使用
f = 10*1e-3; %frequency in kHz
或者你应该使用公式(2)。还请注意衰减单位为dB/km,因此您也应该转换距离,除非您确实对传播500 km感兴趣。请注意,无需自行定义
pi
。Matlab默认知道它。Req_SL=3.4303e+09
,您正在计算(10^Req_SL)
,因此您将获得Inf
。双精度元素的最大值约为10^308
。如果所有数量都使用单位,这将非常有用。这很有可能是您的错误源,因为您的源级别/所需强度非常大。您的吸收表达式应该是:absorption=10^((0.002+0.11*(f^2/((1+f^2)+0.011*f^2)))/10)代码>我的应用是水声传感器网络。介质是声波。我已经重新检查了公式。这是正确的。这是解释公式的文件。论文第1页的方程式1是计算TL的公式。@ConfusinglyCuriousTheThird.。感谢您的回复…我已经更改了代码(请在我的帖子中检查更改的代码)…我现在没有无穷大,但“Req_Pt”的值仍然太高。我试图找出问题,但没有成功。你的频率是10赫兹还是10000赫兹?是10000赫兹