繁体   English   中英

Matlab中信号的频谱

[英]Frequency spectrum of signal in Matlab

这是我用来在Matlab中绘制频域函数的代码:

    dt = 1/10000; % sampling rate
    et = 0.1; % end of the interval
    t = 0:dt:et; % sampling range
    y = 2+sin(2.*pi.*50.*t)+18.*sin(2.*pi.*90.*t)+6.*sin(2.*pi.*180.*t); %     sample the signal
    subplot(2,1,1); % first of two plots
    plot(t,y); grid on % plot with grid
    xlabel('Time (s)'); % time expressed in seconds
    ylabel('Amplitude'); % amplitude as function of time
    Y = fft(y); % compute Fourier transform
    n = size(y,2)/2; % 2nd half are complex conjugates
    amp_spec = abs(Y)/n; % absolute value and normalize
    subplot(2,1,2); % second of two plots
    freq = (0:100)/(2*n*dt); % abscissa viewing window
    stem(freq,amp_spec(1:101)); grid on % plot amplitude spectrum
    xlabel('Frequency (Hz)'); % 1 Herz = number of cycles/second
    ylabel('Amplitude'); % amplitude as function of frequency

问题是,当我放大图表时,我看不到50Hz,90Hz和180Hz的峰值。

我的代码中出了什么问题?

问题是为了获得完美的光谱(峰值在50,90,180和0),你的间隔应该是所有频率的乘数。

说明:考虑y=sin(2.*pi.*t) 使用您的代码将其绘制为:

1) et = 1-dt;

2) et = 1;

在第一种情况下,如果放大,您将看到峰值完全在1 Hz。 在第二种情况下,它不是(也非常接近)。

为什么? 因为您正在处理有限数量的点,因此,有限数量的频率。 如果1 Hz是这组频率之一(第1种情况),那么在所有其他频率的零点处,您将获得1 Hz的完美峰值。

在情况2中,您的集合中没有1 Hz的频率,因此您将在最近的频率上获得峰值(并且它将具有有限的宽度)。

最终,在您的原始代码中,您的整个频率中没有50,90,180 Hz的频率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM