目录
1.背景
关于频谱分析主要学习的过程分别是FS, FT, DTFT, DFT, DFS, FFT。实际工程中都是数字域进行数据处理,因此基本上都是对采样后的数据进行FFT(DFT)操作。对于一个时域信号,总是不自觉的想知道其频谱是何面貌。本节基于Matlab工具软件,绘制出一个时域信号的频谱图。
2.程序及原理分析
clear all; clc; close all;
fs= 128; %信号最大频率30Hz,采样率128Hz.
N=128; %采样深度点数为128,频率分辨率为fs/N=1Hz
t=(0:N-1)/fs; %离散时间,采样间隔为1/fs
y=1+cos(2*pi*30*t); %获取采样后的信号离散采样值
Y=fft(y,N)/N; %fft变换后,双边带乘以1/N,单边带2/N
freq=(0:N-1)*fs/N; %根据fs和N,计算出序列中数据点对应的频率
freq1=((-N/2):N/2-1)*fs/N; %数字域频谱关于fs呈现周期,将[fs/2 fs]搬移到[-fs/2 0]
Y1=fftshift(Y); %将FFT后的序列后半部分搬移到前面组成新序列
%作图
subplot (3,1,1)
stem(freq,abs(Y(1:N)),'k');
xlabel('频率(Hz)');ylabel('幅值');
set(gcf,'color','w');
subplot (3,1,2)
stem(freq1,abs(Y(1:N)),'k');
xlabel('频率(Hz)');ylabel('幅值');
set(gcf,'color','w');
subplot (3,1,3)
stem(freq1,abs(Y1(1:N)),'k');
xlabel('频率(Hz)');ylabel('幅值');
set(gcf,'color','w');
3.FFT绘制
图 1 采样后的波形y
图 2 Y=fft(y,N)/N;
图 3 Y1=fftshift(Y);
对Y进行fftshift()操作,就是把图1右半部分(序号65~128)放到左半部分前面(序号0~64),重新构成新的序列Y1。
备注:图1到图3过程中序列的横坐标没有量纲,仅仅是序列的序号。MATLAB中序列从1开始。
图 4标有频率刻度的频谱
4.问题
关于采样频率fs和采样深度如何选择?