专栏
标签
Syslab 中 fft 有部分功能不对标 matlab?
技术分享
发布于 2025-08-06 16:24:57
查看 1过去300天

问题现象

Syslab中fft有部分功能不对标matlab,如下:
image.png

解决方法

对标Matlab,Julia中不支持的函数或功能同元开发了相应的函数库,可尝试在帮助文档搜索”ty_"加相应的函数名。

由于fft函数是Julia自带的函数,无法进行修改,针对上述问题,可以采用ty_fft函数的第二、第三个语法来替代fft部分不对标matlab的功能。

补充:ty_fft函数用法

函数库:TyMath

语法:

Y=ty_fft(x)

Y=ty_fft(X,n)

Y=ty_fft(X,n,dims)

说明:快速博里叶变换

示例:FFT的插值

通过填充零来对信号的傅里叶变换进行插值,

指定信号的参数,采样频率为80Hz,信号持续时间为0.8秒。

using TyMath

using TyPlot

Fs=80

T= 1/Fs

L=65

t=(0:L-1)*T

创建一个2Hz正弦信号及其高次谐波的叠加。该信号包含一个2Hz余弦波、一个4Hz余弦波和一个6Hz正弦波

X=@.3cos(2π2t)+2cos(2π4t)+sin(2π6t);

在时域中绘制该信号。

plot(t,X)

title(“Signal superposition in time domain”)

xlabel(“t (ms)”)

ylabel(“X(t)”)

image.png

计算信号的博里叶变换。

Y= ty_fft(x);

计算信号的单侧幅值频谱。

f=Fs*(0:(L-1)/2)/L;

P2 =abs.(Y/L);

P1=P2[1:(L+12];

P1[2:end]=2*P1[2:end];

在频域中绘制单侧频谱。由于信号的时间采样相当短,傅里叶变换的频率分辨率不够精确,不足以显示4Hz附近的峰值频率。

p1ot(f,P1,“-o”)

title(“Single-Sided Spectrum of Original Signal”)

xlabel(“f (Hz)”)

ylabel(“IP1(f)|”)

image.png

为了更好地评估峰值频率,您可以通过用零填充原始信号来增加分析窗的长度。这种方法以更精确的频率分辩率自动对信号的傅里叶变换进行插值。

从原始信号长度确定是下一个2次幂的新输入长度。用尾随零填充信号X以扩展其长度。计算填零后的信号的傅里叶变换,

N=nextpow(2,L);

Y =ty_fft(x,n);

计算填零后的信号的单侧幅值频谱。由于信号长度n从65增加到128,频率分辨率变为Fs/n,

即0.625HZ。

f=Fs*(0:(n/2)/n;

P2 =abs.(Y/L);

P1=P2[1:n÷2+1];

P1[2:end-1]=2*P1[2:end-1];

绘制填零后的信号的单侧频道。此新频谱在0.625Hz的频率分辩率内显示2Hz、4Hz和6Hz附近的峰值频率

plot(f,P1,“-o”)

title(“Single-Sided Spectrum of Padded Signal”)

xlabel(“f (Hz)”)

ylabel(“IP1(f)|”)

image.png

有关ty_fft函数的有关信息可以参阅帮助文档:
image.png

所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
科学计算

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天