从SIMULINK到工作区FFT?

Ahm*_*Was 6 workspace matlab simulink

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

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
Run Code Online (Sandbox Code Playgroud)

但是,为简单起见,我在SIMULINK中有一个正弦波发生器,我需要绘制PSD.我做了类似以下的事情: 在此输入图像描述

然后我得到了一个名为"Sinwave"的变量,我怎么可能应用上面的Matlab代码来绘制PSD?

请注意,变量Sinewave是1x1双倍时间序列.我试图用Sinwave替换x,但它没有用.

更新:应用答案

我应用了推荐的内容,但是我的输出与使用Matalb的输出不同.这是我使用的代码:

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
Run Code Online (Sandbox Code Playgroud)

这个用于SIMULINK导出的正弦波 在此输入图像描述

但是,来自matlab代码的代码如下: 在此输入图像描述

我需要输出来自matalb ,在噪声层中具有所有这些涟漪.如何获得准确的输出?

请注意我已经使用了两者的确切值.

更新2:SIMULINK正弦波设置

1-正弦波块

在此输入图像描述

2-到工作区块

在此输入图像描述

3-解算器

在此输入图像描述

Nav*_*van 2

Timeseries 对象包含一个数据字段,其中应包含正弦波数据。您可以这样做x = Sinwave.Data;,然后可以使用其余的代码。或者,您也可以将“到工作区”块的“保存格式”属性设置为“数组”。这将使 Sinwave 成为常规 MATLAB 数组。然后您可以简单地将 x 替换为 Sinwave。