首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从SIMULINK到工作区FFT?

从SIMULINK到工作区FFT?
EN

Stack Overflow用户
提问于 2016-09-20 15:30:53
回答 2查看 2.2K关注 0票数 6

如果我想在Matlab中绘制一个简单的正弦波的PSD,我会做如下的事情:

代码语言:javascript
运行
复制
Fs = 1000;
t = 0:1/Fs:1-(1/Fs);
x = cos(2*pi*100*t) ;

N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;

plot(freq,10*log10(psdx))
grid on

但是假设,为了简单起见,我在SIMULINK中有一个正弦波发生器,我需要绘制PSD。我做了如下事情:

然后,我得到了一个名为"Sinwave“的变量,,如何应用上述Matlab代码来绘制PSD?

请注意,变量Sinewave是1x1双时间序列。我试着用辛波代替x,但没有用。

更新:应用答案

我应用了推荐的输出,但是我的输出与使用Matalb的输出不同。下面是我使用的代码:

代码语言:javascript
运行
复制
Fs = 1000;
x = Sinwave.Data;
N = length(x);
dft = fft(x);
dft = dft(1:N/2+1);
psd = (1/(Fs*N)) * abs(dft).^2;
psd(2:end-1) = 2*psd(2:end-1);
freq = 0:Fs/length(x):Fs/2;

plot(freq,10*log10(psd))
grid on

这个用于SIMULINK输出的正弦波。

但是,matlab代码中的代码如下所示:

我需要输出像这样的matalb 和所有这些涟漪在噪音地板我怎样才能得到准确的输出?

请注意,我对两者都使用了精确的值。

更新2: SIMULIN正弦波设置

1-正弦波块

2-到工作区块

3-解决方案

EN

回答 2

Stack Overflow用户

发布于 2016-09-20 15:58:54

如果您仔细查看您的Sinewave变量,即只需在命令提示符中键入其名称,您将看到以下内容:

代码语言:javascript
运行
复制
  >>  Sinwave
  timeseries

  Common Properties:
            Name: ''
            Time: [51x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [51x1 double]
        DataInfo: [1x1 tsdata.datametadata]

  More properties, Methods

它包含不同的字段,例如TimeData,它们都是数组。例如,我们可以简单地尝试绘制这些图:

代码语言:javascript
运行
复制
plot(Sinwave.Time, Sinwave.Data)

事实上,这给了我们一个很好的正弦波图。我们现在可以尝试用Sinewave.Time代替变量Sinewave.Time,用Sinewave.Data代替x,这样就可以绘制PSD。

如果您不知道采样频率,您可以使用Sinewave.TimeInfo -它包含样本的数量,以及开始和结束时间,来计算采样频率Fs

回答您编辑的问题:用MATLAB代码创建的时间向量t0 : 0.001 : 0.999,长度为1000。但是,您的Simulink仿真从t=00.001的步骤运行到t=1,因此您得到的时间和数据向量的长度为1001!计算假定步骤大小为1/1001而不是1/1000,从而导致不同的结果。要解决这个问题,请将模拟设置中的停止时间更改为0.999。然后,得到的向量大小是正确的,得到的结果与MATLAB计算的结果相同。

票数 4
EN

Stack Overflow用户

发布于 2016-09-20 15:56:31

Timeseries对象包含一个数据字段,该字段应该包含正弦波数据。您可以执行x = Sinwave.Data;,然后可以使用其余的代码。或者,您也可以将“to工作区”块的"Save“属性设置为"Array”。这将使辛波成为一个常规的MATLAB阵列。然后,您可以简单地将x替换为Sinwave。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39598176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档