我正在尝试制作频率高达30 Hz的正弦波频谱。我写了一个代码,但我不断收到错误:未定义函数'fft'表示'sym'类型的输入参数
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);
答案 0 :(得分:2)
fft
是数字算法,它接受数字输入,而不是符号。我怀疑你之前宣称t
是象征性的。只需移动t
作业,并在代码开头定义采样频率Fs
,采样时间Ts
和最长时间Tmax
即可。好好去。如果我可以提出建议,请在一个图表中显示时域,在另一个图表中显示频域。使用subplot
来帮助您完成此操作。我还建议您绘制幅度,因为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