未定义函数';快速傅立叶变换';对于类型为';sym';MATLAB
我试图用周期为π的正弦波制作一个高达30Hz的频谱。我写了一段代码,但我不断得到错误:输入参数类型为“sym”的未定义函数“fft”未定义函数';快速傅立叶变换';对于类型为';sym';MATLAB,matlab,fft,Matlab,Fft,我试图用周期为π的正弦波制作一个高达30Hz的频谱。我写了一段代码,但我不断得到错误:输入参数类型为“sym”的未定义函数“fft” sint = sin(t); Tmax = 2*pi; %the end sample value Ts = 0.1; %the sampling rate N = (Tmax/Ts)+1; %The number of samples Fs = 1/Ts; t = 0:Ts:Tmax; plot(t,sint); f = 0:fs/(N-1):30; z
sint = sin(t);
Tmax = 2*pi; %the end sample value
Ts = 0.1; %the sampling rate
N = (Tmax/Ts)+1; %The number of samples
Fs = 1/Ts;
t = 0:Ts:Tmax;
plot(t,sint);
f = 0:fs/(N-1):30;
z = fftshift(fft(sint));
plot(f,z);
fft
是一种数值算法,它接受数值输入,而不是符号输入。我怀疑你在将t
声明为符号。只需移动该t
分配,并在代码开头定义采样频率Fs
、采样时间Ts
和最大时间Tmax
,就可以开始了。如果我能提出一些建议,请在一个图形中显示时域,在另一个图形中显示频域。使用子批次
帮助您完成此操作。我还建议您绘制幅值,因为FFT通常会给出复数系数。幅度是我们通常看到的关于信号中频率内容的大小
我还有一个建议,就是改变声明f
向量的方式。我不知道一般意义上的f
的结束元素是什么,它看起来与t
的定义方式不一致。我对f
向量做了一个更改,使其能够工作。因为您正在应用fftshift
,所以开头从-Fs/2
开始,结尾是Fs/2
。因此:
%// Move here
Tmax = 2*pi; %the end sample value
Ts = 0.1; %the sampling rate
Fs = 1/Ts;
t = 0:Ts:Tmax;
sint = sin(t);
N = (Tmax/Ts)+1; %The number of samples
figure; subplot(2,1,1); %// Change
plot(t,sint);
%f = 0:fs/(N-1):30; %// Change here
f = linspace(-Fs/2, Fs/2, numel(t)+1);
f(end) = [];
z = fftshift(fft(sint));
subplot(2,1,2); %// Change
plot(f,abs(z)); %// Change
fft
是一个数值函数,不接受符号参数。使用linspace
或其他相关方法以数字方式定义t
,应该可以。这里还有一个象征性的flourier转换,但我看不出在这里使用它的真正原因:谢谢!但是如果我只找到bn(sin-Fourier级数的系数)并通过exp^jwt的叠加应用FT,它会起作用吗?我刚刚应用了你的代码,但我仍然得到相同的错误…我没有得到任何错误。请注意,我必须纠正一些拼写错误,如fs
,fs
。尝试通过执行全部清除来清除您的工作区代码>然后重试。此外,我还更新了我的代码。@AbylIkhsanov-根据定义,傅里叶变换可以在输入信号和exp(-jwt)
的倍数之间找到相关性。同样地,看看这个定义:-傅里叶级数的每个项被定义为实(a\n
)和虚(b\n)
分量的组合。因此,您可以通过检查FFT分解的虚部来找到您的b_n
。这真的很有帮助!谢谢你。“阿比利奇萨诺夫-我的荣幸:”如果你不需要更多的帮助,请考虑接受我的回答。祝你好运再次编辑我的代码。它现在应该为你运行了。