结合yangzj的建议后的改良版
% 方案1:“x = a*cos(2*pi*w*t)”的形式: % ------------------------------------------------------------------------- % 注意:1.时域的持续时间范围应较大; % 2.频率w与序列k的对应关系:w = k * df; % 3.采样频率 fs 应大于 w 的2倍 % 4.结果曲线的峰值的横坐标对应的就是 w 和 -w 值 fs = 10; %采样频率 N = 1024; %采样点数 t = (0:N-1)/fs; %采样时间序列s a = 0.75; w = 4; x = a*cos(2*pi*w*t); subplot(2,1,1); plot(t, x); xlabel('t/s'); xf = fft(x,N)/N; xf = fftshift(xf); %双边复数谱 df = fs/N; %频率分辨率Hz f = (-N/2+1:N/2)*df; %频域序列 subplot(2,1,2); plot(f, abs(xf)); xlabel('f/Hz'); % 方案2:“x = a*cos(w*t)”的形式: % ------------------------------------------------------------------------- % 注意:1.时域的持续时间范围应较大; % 2.频率w与序列k的对应关系:w = 2 * pi* k * df; % 3.采样频率 fs 应大于 w/(2*pi) 的2倍 % 4.结果曲线的峰值的横坐标对应的就是 w 和 -w 值 fs = 10; %采样频率 N = 1024; %采样点数 t = (0:N-1)/fs; %采样时间序列s a = 0.75; w = 20; x = a*cos(w*t); subplot(2,1,1); plot(t, x); xlabel('t/s'); xf = fft(x,N)/N; xf = fftshift(xf); %双边复数谱 df = fs/N; %频率分辨率Hz f = 2*pi*(-N/2:N/2-1)*df; %频域序列 subplot(2,1,2); plot(f, abs(xf)); xlabel('f/Hz'); [ 本帖最后由 eight 于 2006-9-9 15:58 编辑 ] |
原帖由 ijkl56 于 2006-8-30 17:03 发表
前面给出的采样频率fs=1024,序列长度N=1024,那么频率分辨率为df=fs/N=1,当信号载频fc不为整数时,即不是频率分辨率的整数倍时,fft后得到的线谱实际上相对于载频有偏移,即频谱泄漏或栅栏效应,有不少文章来解决这个问 ...
原帖由 ijkl56 于 2006-9-1 11:54 发表
比如单频正弦信号载频是118.7Hz,而频率分辨率是1Hz,那么在matlab中做完FFT后,实际线谱峰值应该在119Hz或者118Hz,在这种情况下,估计信号加噪后的载频,无法精确得到118.7Hz,只能接近
原帖由 liule 于 2006-8-30 12:13 发表
请教各位!您们分析的信号都是用函数产生的。但对于实际的信号应该怎么处理?
例如:实际中采到的转速信号
n=[4652
4623
4728
4606
4675
4664
4752
4618
4675
4658
4752
4612
4669
4646
4716
45 ...
原帖由 liule 于 2006-8-30 12:13 发表
请教各位!您们分析的信号都是用函数产生的。但对于实际的信号应该怎么处理?
例如:实际中采到的转速信号
n=[4652
4623
4728
4606
4675
4664
4752
4618
4675
4658
4752
4612
4669
4646
4716
45 ...
原帖由 songzy41 于 2006-10-14 08:08 发表
对于实际中的信号,应先进行预处理,去除直流分量和趋势项,再作FFT的分析。
GMT+8, 2024-11-26 11:55 , Processed in 0.063178 second(s), 25 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.