使用嵌入式matlab功能块的simulink模型内部信号的频率内容?

时间:2013-06-17 11:07:54

标签: simulink matlab-coder

我试图在模拟运行时获取有关位移信号(例如,Vx)的频率信息。

我的想法是利用嵌入式Matlab功能块支持的fft命令。

我执行的第一件事是将位移信号'Vx'的值存储在长度为'L'的缓冲区中。

第二件事是计算存储在缓冲区中的那些值的fft,并计算与最大幅度对应的索引值。

第三件事是从索引值,采样频率和缓冲区长度中获取频率。

嵌入式Matlab代码如下: -

  Function[freq_Vx,buffero_Vx] = fcn(Vx,bufferi_Vx)
  % This block supports the Embedded MATLAB subset.
  % See the help menu for details. 


  buffo_Vx = [Vx;buffi_Vx(1:end-1)];                 % buffer which stores the values of signal 'Vx'
  Fs = 2000;
  nfft = 2^nextpow2(length(buffo_Vx)); 
  [max_Vx,index_Vx] = max(abs(fft(buffo_Vx,nfft)));
  freq_Vx = index_Vx*Fs/length(buffo_Vx);

  end

这是在模拟运行时获取信号频率成分的正确方法吗?

1 个答案:

答案 0 :(得分:0)

我相信您在模型中“实时”处理数据的方法是合理的,但我相信index_Vx*Fs/length(buffo_Vx)无法提供所需的结果,而buffo_Vx = [Vx;buffi_Vx(1:end-1)];可能需要为buffo_Vx = [Vx; bufferi_Vx(1:end-1)];`查看此link进行频率转换。

出于诊断目的,请查看Simulink Extras - > Simulink库浏览器上的其他Sinks块。

Browser

光谱密度应该会有所帮助。