主要内容

从MATLAB函数生成一个多线程的墨西哥人文件使用展开

这个例子展示了如何使用dspunfold从MATLAB函数来生成一个多线程的墨西哥人文件®函数。

注意:以下假定当前主机至少有2个物理CPU核心。提供的截图,加速和延迟值收集使用主机与8个物理CPU核心。

需要MathWorks™产品:s manbetx 845

  • DSP系统工具箱™

  • MATLAB®编码器™

介绍

dspunfold生成一个多线程的墨西哥人从MATLAB函数使用展开技术文件。这个MATLAB函数可以包含一个算法是无状态的(没有国家)或状态(状态)。

使用dspunfold

考虑到MATLAB函数spectralAnalysisExample。这个函数执行以下算法:

1)计算输入的片面的谱估计

2)计算总谐波失真(THD),信号噪声比(信噪比),信号噪声和失真率(SINAD)和伪自由动态范围(SFDR)光谱

类型spectralAnalysisExample
函数(THD),信噪比、SINAD SFDR] = spectralAnalysisExample (x) % % 2015 - 2016版权MathWorks,公司持续powerSpectrum如果isempty (powerSpectrum) powerSpectrum = dsp.SpectrumEstimator (“FrequencyRange”、“单向的”,…“SampleRate”, 8000年,…' SpectralAverages ', 1);%得到片面的谱估计Pxx = powerSpectrum结束(x);%计算测量(amp, harmSum、totalNoise maxSpur] =…getHarmonicDistortion (…getFrequencyVector (powerSpectrum)、Pxx getRBW (powerSpectrum), 6);(THD = 10 * log10 (harmSum / amp (1));信噪比= 10 * log10 (amp (1) / totalNoise);SINAD = 10 * log10 (amp (1) / (harmSum + totalNoise)); SFDR = 10*log10(amp(1)/maxSpur);

加速算法,一种常见的方法是生成一个墨西哥人文件使用codegen函数。下面是一个例子,如何当使用一个输入4096双打。dspunfoldDCTExample_mex,生成的墨西哥人文件是单线程的。

codegenspectralAnalysisExamplearg游戏{(1:4096)}
代码生成成功。

要生成一个多线程的墨西哥人文件,可以使用dspunfold函数。参数- s表明算法在spectralAnalysisExample没有州。

dspunfoldspectralAnalysisExamplearg游戏{(1:4096)}- s0
状态长度:0框架,重复:1、输出延时:8帧,线程:4分析:spectralAnalysisExample。m创建线程的墨西哥人文件:spectralAnalysisExample_st。mexa64创建多线程的墨西哥人文件:spectralAnalysisExample_mt。mexa64创建分析器文件:spectralAnalysisExample_analyzer.p

这将生成以下文件:

  • 多线程的墨西哥人文件,spectralAnalysisExample_mt

  • 单线程的墨西哥人文件,spectralAnalysisExample_st(这是相同的墨西哥人文件获得使用codegen函数)

  • 自我诊断分析仪的功能,spectralAnalysisExample_analyzer

测量加速多线程的墨西哥人文件相对于单线程的墨西哥人文件,看到dspunfoldBenchmarkSpectrumExample函数的例子:

类型dspunfoldBenchmarkSpectrumExample
dspunfoldBenchmarkSpectrumExample %函数用来测量多线程加速的墨西哥人文件%使用单线程的墨西哥人dspunfold vs文件获得%版权2015年MathWorks公司清楚spectralAnalysisExample_st;%为基准精度目的明确spectralAnalysisExample_mt;%为基准精度目的numFrames = 1 e5;inputFrame = (1:4096) ';%首次运行排除在时间测量spectralAnalysisExample_st (inputFrame);抽搐;%度量执行时间为单线程的墨西哥人帧= 1:numFrames spectralAnalysisExample_st (inputFrame);结束timeSingleThreaded = toc;%首次运行排除在时间测量spectralAnalysisExample_mt (inputFrame);抽搐; % measure execution time for the multi-threaded MEX for frame = 1:numFrames spectralAnalysisExample_mt(inputFrame); end timeMultiThreaded = toc; fprintf('Speedup = %.1fx\n',timeSingleThreaded/timeMultiThreaded);

dspunfoldBenchmarkSpectrumExample措施的执行时间spectralAnalysisExample_stspectralAnalysisExample_mt处理numFrames帧。最后它打印加速,多线程的墨西哥人文件执行时间之间的比例和单线程的墨西哥人文件执行时间。

dspunfoldBenchmarkSpectrumExample;
加速x = 1.7

加速可以提高更多的通过增加重复的值,这将在稍后讨论。

DSP演变生成一个多线程的墨西哥人文件缓冲区多个信号帧,然后同时处理这些帧,使用多个内核。这个过程介绍了确定性输出延迟。执行“帮助spectralAnalysisExample_mt”显示更多关于多线程的墨西哥人的信息文件,其中一个是输出延迟的价值。对于这个示例,多线程的墨西哥人的输出文件的延迟16帧相对于它的输入,这不是单线程的墨西哥人的文件。下面是生成的阴谋dspunfoldShowLatencySpectrumExample,它显示单线程和多线程的墨西哥人的输出文件。注意,多线程的墨西哥人的输出由16帧延迟,相对于单线程的墨西哥人。

dspunfoldShowLatencySpectrumExample;

图spectralAnalysisExample_mt输出延迟包含一个坐标轴对象。坐标轴对象与标题输出延迟8帧包含帧索引,官ylabel包含3线类型的对象。这些对象代表单线程的墨西哥人,多线程的墨西哥人,多线程的墨西哥人转移到8帧。

验证结果多线程墨西哥人与生成的分析器

当创建一个文件使用多线程的墨西哥人dspunfold,单线程的墨西哥人文件也一起创建一个分析器函数。对于这个示例,分析仪的名称spectralAnalysisExample_analyzer

分析器的目的是提供一个快速的方法来测量加速多线程的墨西哥人相对于单线程的墨西哥人,还和检查如果多线程的墨西哥人的输出和单线程的墨西哥人比赛。输出通常不匹配当一个错误的国家指定长度值。

下面的例子执行多线程的墨西哥人的分析器文件,dspunfoldFIRExample_mt。

Fs = 8000;NumFrames = 10;t = (1 / Fs) * (0:4096 * NumFrames-1);t = t。';f = 100;x =罪(2 *π* f * t) + . 01 * randn(大小(t));spectralAnalysisExample_analyzer (x)
分析多线程文件spectralAnalysisExample_mt.mexa64墨西哥人。为达到最佳效果,请避免与计算机进行交互并停止其他进程,直到分析仪。加速延迟= 8帧= 1.2 x
ans =结构体字段:延迟:8加速:1.2200通过:1

每个分析器的输入对应的输入dspunfoldFIRExample_mt墨西哥人文件。请注意,每个输入的长度(第一个维度)大于预期的长度。例如,dspunfoldFIRExample_mt预计首次输入一帧4096年翻一番,而4096 * 10样本提供spectralAnalysisExample_analyzer。分析器解释这个输入10帧的4096个样本。分析器之间交替这10个输入帧(在一个循环的方式),同时检查如果多线程和单线程的墨西哥人文件的输出匹配。

注意:对分析仪正确检查多线程之间的数值匹配墨西哥人,单线程的墨西哥人,建议您至少提供2帧为每个输入不同的值。

指定国家和重复值

让我们修改光谱测量实例通过设置光谱谱估计的平均长度4,而不是1。谱估计现在运行平均当前估计和三个估计。这个算法有一个状态3帧的长度。MATLAB函数spectralAnalysisWithStatesExample包含修改后的算法:

类型spectralAnalysisWithStatesExample
函数(THD),信噪比、SINAD SFDR] = spectralAnalysisWithStatesExample (x) % % 2015 - 2016版权MathWorks,公司持续powerSpectrum如果isempty (powerSpectrum) powerSpectrum = dsp.SpectrumEstimator (“FrequencyRange”、“单向的”,…“SampleRate”, 8000年,…“SpectralAverages”, 4);%得到片面的谱估计Pxx = powerSpectrum结束(x);%计算测量(amp, harmSum、totalNoise maxSpur] =…getHarmonicDistortion (…getFrequencyVector (powerSpectrum)、Pxx getRBW (powerSpectrum), 6);(THD = 10 * log10 (harmSum / amp (1));信噪比= 10 * log10 (amp (1) / totalNoise);SINAD = 10 * log10 (amp (1) / (harmSum + totalNoise)); SFDR = 10*log10(amp(1)/maxSpur);

构建多线程墨西哥人文件,我们必须提供相对应的状态长度两个FIR滤波器。指定- s 3时调用dspunfold表明国家长度不超过3帧。

加速可以增加更多的通过增加重复(- r)调用时提供dspunfold。默认值是1重复。增加这个值使多线程墨西哥人缓冲更多的帧在内部,它开始处理之前,多线程的效率增加,但代价更高的输出延迟。还要注意,允许的最大状态长度(threads-1) * * FrameSize重复帧。如果指定的状态长度超过该值,dspunfold落单线程的墨西哥人。如果应用程序延迟可以被容忍的,增加重复的值允许生成一个多线程的墨西哥人有更长的状态。

下面的命令生成一个多线程的墨西哥人使用重复5和一个国家的价值函数的长度3帧:

dspunfoldspectralAnalysisWithStatesExamplearg游戏{(1:4096)}- s3- r5
状态长度:3帧,重复:5,输出延迟:40帧,线程:4分析:spectralAnalysisWithStatesExample。m创建线程的墨西哥人文件:spectralAnalysisWithStatesExample_st。mexa64创建多线程的墨西哥人文件:spectralAnalysisWithStatesExample_mt。mexa64创建分析器文件:spectralAnalysisWithStatesExample_analyzer.p

分析器可以用来验证多线程的墨西哥人的数值结果,并提供加速和延迟信息:

L = 4096;NumFrames = 10;正弦= dsp.SineWave (“SamplesPerFrame”L * NumFrames,“SampleRate”,8000);x = sin () + 0.01 * randn (L * NumFrames, 1);spectralAnalysisWithStatesExample_analyzer (x)
分析多线程文件spectralAnalysisWithStatesExample_mt.mexa64墨西哥人。为达到最佳效果,请避免与计算机进行交互并停止其他进程,直到分析仪。延迟= 40帧加速= 0.8 x
ans =结构体字段:延迟:40加速:0.8438通过:1

仿真例子

这个函数dspunfoldNoisySineExample演示了使用多线程的墨西哥人估计嘈杂的正弦波的光谱特征。测量绘制在一个时间范围。多线程的性能相比,墨西哥人是MATLAB仿真和单线程的墨西哥人的性能。多线程的墨西哥人的收益仍明显即使带来的开销testbench的策划和输入信号生成。

dspunfoldNoisySineExample

MATLAB Sim /单线程的墨西哥人加速:2.4 MATLAB Sim /多线程墨西哥人加速:2.0

引用

[1]DSP在维基百科上展开:展开(DSP实现)