- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个实现噪声门算法的 Matlab 脚本。它遍历输入信号的长度(我在同一个脚本中创建的)并逐个样本地处理。该算法本身不需要太多内存(它将两个值传递给下一次迭代,即 x_peak_old
和 g_old
)。然而,为了监控算法的内部过程,我创建了一些额外的调试向量,它们与输入信号的长度相同,并在每个循环中得到更新。我会根据需要对它们进行评论。
但是,我的问题是其中一个向量的行为异常。如果我禁用此向量并点击“运行”,脚本将立即执行并完成。但是,当我在每个循环中为这个特定向量赋值并运行脚本时,计算需要几秒钟时间,并且我的 CPU 的一个核心在此期间处于 100% 负载。
代码如下:
clear all; close all;
% ***** Parameter *****
Fs = 44100; % Samplerate
ta = 5; % Attack time in ms
tr = 300; % Release time in ms
th = -8; % Threshold in dB
R = 0.05; % Ratio in dB/dB
% ***** Test signal *****
f0 = 20000; % Frequency in Hz
a = (0:Fs) ./ Fs;
aflip = fliplr(a);
sine = sin((2 * pi * f0 / Fs) .* (0:Fs));
sinedecay = zeros(1, Fs);
for k = 1:(Fs+1)
sinedecay(k) = sine(k)*aflip(k);
end
zeropad = zeros(1, Fs);
% Sine only
% x = [zeropad sine sinedecay zeropad];
% Triangle Rectangle Sine
x = [zeropad a (1-a) -a a-1 zeropad ones(1, Fs) (-1).*ones(1,Fs) zeropad sine sine sinedecay zeropad];
% Dirac
%x = [zeropad 1 zeropad];
siglen = length(x);
x_axis = (1:siglen) ./ Fs;
% ***** Output signal *****
y = zeros(1, siglen);
% ***** Debug signals *****
%threshold = 10^(th/20) .* ones(1, siglen);
%xpeakt = zeros(1, siglen);
%peaklogt = zeros(1, siglen);
%ctrl_logt = zeros(1, siglen);
f_t = zeros(1, siglen);
gt = zeros(1, siglen);
% ***** Derived parameters *****
AT = 1/(1+ta*Fs/1000);
RT = 1-1/(1+tr*Fs/1000);
TH_log = log2( 10^(th/20));
S = 1 - 1/R;
% ***** Initial parameters *****
x_peak_old = 0;
g_old = 0;
% ***** Lets go! *****
for i = 1:siglen
% Peak measurement
p0 = abs(x(i));
x_peak = x_peak_old * RT;
if (p0 > x_peak)
x_peak = p0 * AT + x_peak_old *(1-AT);
end
x_peak_old = x_peak;
% xpeakt(i) = x_peak; % DEBUG
x_peak_log = log2(x_peak);
% peaklogt(i) = x_peak_log; % DEBUG
% Compare with threshold
ctrl_log = TH_log - x_peak_log;
if (ctrl_log < 0)
ctrl_log = 0;
end
% ctrl_logt(i) = ctrl_log; %DEBUG
% Calculation of weight factor
f = S * ctrl_log;
f_t(i) = f; %DEBUG
g = 2^f;
% Smoothing filter for weight factor
if (g > g_old)
coeff = 1-AT;
else
coeff = 1-RT;
end
temp = g;
g = coeff * g + (1-coeff) * g_old;
g_old = temp;
% THE FOLLOWING LINE CAUSES PROBLEMS
gt(i) = g; % DEBUG
% Calculation output signal
y(i) = x(i) * g;
end
% ***** Plot input, output and debug signals *****
figure;
subplot(211);
plot(x_axis, x);
hold on; grid on;
%plot(x_axis, threshold);
%plot(x_axis, xpeakt); %DEBUG
%plot(x_axis, peaklogt); %DEBUG
%plot(x_axis, ctrl_logt); %DEBUG
plot(x_axis, f_t); %DEBUG
%plot(x_axis, gt); %DEBUG
subplot(212);
plot(x_axis, y);
导致问题的那一行是接近尾声的那一行:
gt(i) = g; % DEBUG
然而,就在几行之前,在同一个循环中,我以相同的方式将一个值赋给一个向量:
f_t(i) = f; %DEBUG
两个向量的初始化方式相同。此循环中有更多向量以完全相同的方式处理,但只有 gt(i)
向量表现奇怪。
我在两台运行 Matlab R2014b 的不同机器上测试了这个脚本。是什么导致了这个问题?
最佳答案
只需将变量 gt
的名称更改为其他名称(内置函数的名称除外)。
我认为这正是 Mathworks 在告诉您不建议重载内置函数时警告您的情况。
gt
function 是简写运算符 >
的完整形式。
运行脚本之前:
>> which gt
built-in (C:\TLAB13a\toolbox\matlab\ops\@double\gt) % double method
在运行你的脚本之后:
>> which gt
gt is a variable.
我可以在 Matlab R2013a 中重现所描述的行为(使用调试变量大约需要 7.5 秒,没有调试变量需要 0.1 秒)。
请注意,在 R2016a 上,此行为不存在(两个版本均约为 0.12 秒)。较新的 Matlab 引擎不会那么容易被重载的内置函数混淆。
在你的情况下,对于使用旧版 Matlab 的人来说,只需将变量名从 gt
更改为其他任何名称(除了另一个内置函数的名称),gtx
例如,即使使用调试变量也能使脚本运行良好且快速。
关于Matlab - 看似简单的指令导致高CPU负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42693543/
我正在寻找一种方法来创建根据价格选择我的产品的过滤器(选择下拉菜单)。 我知道这样的查询是完全可能的: SELECT * FROM products ORDER BY price ASC SELECT
函数参数中或显示尺寸时(高度,宽度)的顺序是否有约定? 最佳答案 我不知道大量的语言,但我使用过的语言(宽度,高度)。它更适合沿着 (x, y) 坐标线。 关于language-agnostic -
在我的表单中,我让用户输入房间的长度高度和宽度以获得 m2、m3 和瓦特的计算值。但是用户也应该能够直接输入 height 和 m2 来获取值。我尝试了很多语法,但 if else 不能正常工作。我知
我在 Elasticsearch 中创建了一个索引,看起来像 {"amazingdocs":{"aliases":{},"mappings":{"properties":{"Adj Close":{"
我有以下功能,我需要清除数据库中的所有图片列并移动到文件系统。当我一次性完成这一切时,内存太多并且会崩溃。我切换到递归函数并执行 20 次写入和批量操作。 我需要为大约 6 个表执行此操作。我的 Re
我正在编写一个函数来计算 PI 的值,并将其作为 double 值返回。到目前为止,一切都很好。但是一旦函数到达小数点后14位,它就不能再保存了。我假设这是因为 double 有限。我应该怎么做才能继
2020年是中国CDN行业从98年诞生到今天快速发展的第二十四年,相关数据显示,全国感知网速持续上扬,达到了3.29兆/秒,标志着在宽带中国的政策指导下,中国的网速水平正在大步赶上世界发达国家的水平
在 aerospike 集合中,我们有四个 bin userId、adId、timestamp、eventype,主键是 userId:timestamp。在 userId 上创建二级索引以获取特定用
$('#container').highcharts('Map', { title : { text : 'Highmaps basic demo'
有没有办法显示自定义宽度/高度的YouTube视频? 最佳答案 在YouTube网站上的this link中: You can resize the player by editing the obj
我使用 Highcharts ,我想在 Highcharts 状态下悬停时制作动态不同的颜色。 正如你可以看到不同的颜色,这就是我做的 var usMapChart , data = [] ; va
在所有节点上运行 tpstats 后。我看到很多节点都有大量的 ALL TIME BLOCKED NTR。我们有一个 4 节点集群,NTR ALL TIME BLOCKED 的值为: 节点 1:239
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
对于我的脚本类(class),我们必须制作更高/更低的游戏。到目前为止,这是我的代码: import random seedVal = int(input("What seed should be u
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
对于我的脚本类(class),我们必须制作更高/更低的游戏。到目前为止,这是我的代码: import random seedVal = int(input("What seed should be u
我已经 seen >2 字节的 unicode 代码点,如 U+10000 可以成对编写,如 \uD800\uDC00。它们似乎以半字节 d 开头,但我只注意到了这一点。 这个 split Actio
有人可以帮我理解为什么我的饼图百分比计算不正确吗?看截图: 根据我的计算,如 RHS 上所示,支出百分比应为 24.73%。传递给 Highcharts 的值如下:- 花费:204827099.36-
我阅读了有关该问题的所有答案,但我还没有找到任何解决方案。 我有一个应用程序,由我的 api 服务器提供。 Wildfly 8.1 和 Mysql 5.6。当查看时间到来时(Wildfly 服务器连接
我正在用选定的项目创建圆形导航。当用户单击任何项目时,它将移动到定义的特定点。一切都很好,除了当你继续点击项目时,当动画表现不同并且项目在 360 度圆中移动并且它被重置直到你重复场景时,我希望它
我是一名优秀的程序员,十分优秀!