dspunfold
运行入口点MATLAB®函数带有要测试的输入。确保函数没有运行时错误。调用codegen
并确保它成功生成一个MEX文件。
使用。生成多线程MEX文件dspunfold
.属性指定状态长度- s
选择。状态长度必须至少与MATLAB函数中的算法长度相同。默认情况下,- s
被设置为0
,表示该算法是无状态的。
运行生成的分析器函数。使用通过
标记,以验证多线程MEX文件和单线程MEX文件的输出结果是否匹配。另外,检查分析仪功能显示的加速和延迟是否令人满意。
如果输出结果不匹配,则增加状态长度并再次生成多线程MEX文件。或者,使用自动状态长度检测(指定使用- s汽车
)来确定与输出匹配的最小状态长度。
如果输出结果匹配,但加速和延迟不令人满意,则增加重复因子使用- r
或者增加使用的线程数- t
.另外,还可以调整状态长度。调整dspunfold
选项并生成新的多线程MEX文件,直到您对结果感到满意为止。
使用。获取生成多线程MEX文件的最佳实践dspunfold
的“提示”部分dspunfold
.
运行入口点MATLAB函数
创建入口点MATLAB函数。
函数[y, mse] = AdaptiveFilter (x,噪音)持续的rlsf1 ffilt noise_var如果Isempty (rlsf1) rlsf1 = dsp。RLSFilter (32,“ForgettingFactor”, 0.98);ffilt = dsp。FIRFilter (“分子”fir1(32升至));%未知系统noise_var = 1的军医;结束D = ffilt(x) + noise_var * noise;%期望信号[y,e] = rlsf1(x, d);mse = 10 * log10 (sum (e。^ 2));结束
这个函数模拟了一个RLS滤波器,它对输入信号进行滤波x
,使用d
作为所需的信号。函数返回过滤后的输出y
滤波器出现了错误e
.
运行AdaptiveFilter
使用您想要测试的输入。验证函数运行时没有错误。
AdaptiveFilter (randn (1000 1), randn (1000,1));
调用codegen
在AdaptiveFilter
并生成一个MEX文件。
codegenAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}
使用生成一个多线程的MEX文件dspunfold
设置状态长度为32
样品和重复因子1
.提供一个大于或等于MATLAB函数中的算法的状态长度。当至少有一个frameinputs
被设置为真正的
,状态长度考虑在样本。
dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s32- f真正的
分析MATLAB输入函数AdaptiveFilter创建多线程MEX文件AdaptiveFilter_mt。mexw64创建分析器文件AdaptiveFilter_analyzer
运行生成的分析器功能
分析器考虑输入的实际值。为了提高分析器的有效性,在输入的第一个维度上提供至少两个不同的帧。
AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……Warning: The output results of The multi-thread MEX file AdaptiveFilter_mt. txtmexw64与单线程MEX文件AdaptiveFilter_st.mexw64的输出结果不匹配。在生成多线程MEX文件AdaptiveFilter_mt.mexw64时,检查是否为dspopened函数提供了正确的状态长度值。有关此问题的最佳实践和可能的解决方案,请参阅dsp展开函数参考页金宝搏官方网站中的“技巧”一节。> In code .internal.warning (line 8) In AdaptiveFilter_analyzer ans = Latency: 8 Speedup: 3.4686 Pass: 0
增加状态长度
分析仪未通过检定。显示的警告消息表明提供了错误的状态长度值dspunfold
函数。将状态长度增加为1000
示例并重复上一节的过程。
dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s1000- f真正的
分析MATLAB输入函数AdaptiveFilter创建多线程MEX文件AdaptiveFilter_mt。mexw64创建分析器文件AdaptiveFilter_analyzer
运行生成的分析器。
AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 8帧加速= 1.8x ans =延迟:8加速:1.7778通过:1
分析仪通过了验证。建议您为analyzer函数提供不同的数值,并确保analyzer函数通过。
提高加速和调整延迟
如果您想提高加速,并且您的系统能够承受更大的延迟,那么将重复因子增加到2
.
dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s1000- r2- f真正的
分析MATLAB输入函数AdaptiveFilter创建多线程MEX文件AdaptiveFilter_mt。mexw64创建分析器文件AdaptiveFilter_analyzer
运行分析器。
AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 16帧加速= 2.4倍ans =延迟:16加速:2.3674通过:1
重复这个过程,直到达到满意的加速和延迟。
使用自动状态长度检测
选择一个大于或等于算法状态长度的状态长度。如果不容易确定您的算法的状态长度分析,使用自动状态长度检测工具。通过设置调用自动状态长度检测- s
来汽车
.该工具检测分析器通过验证的最小状态长度。
dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s汽车- f真正的
分析MATLAB输入函数AdaptiveFilter搜索最小状态长度(这可能需要一段时间)检查无状态…检查1000…足够检查500…检查不足750…检查875…足够检查812…检查843…足够检查827…检查不足835…检查839… Sufficient Checking 837 ... Sufficient Checking 836 ... Sufficient Minimal state length is 836 Creating multi-threaded MEX file AdaptiveFilter_mt.mexw64 Creating analyzer file AdaptiveFilter_analyzer
最小状态长度为836
样本。
运行生成的分析器。
AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 8帧加速= 1.9x ans =延迟:8加速:1.9137通过:1
分析仪通过了验证。