1 奈奎斯特采样率
如果想要不失真的恢复原基带信号,则采样频率要大于最高频率的两倍,该采样频率被称为奈奎斯特采样率。采样率越高,则采样周期越小,则信号越平滑。但是采样率不是越高越好,随着采样率的提高。信号处理的时间会变长。
2 fftshift说明
以下是Matlab的帮助文件中对fftshift的说明:
Y = fftshift(X) rearranges the outputs of fft, fft2, and fftn by moving the zero-frequency component to the center of the array. It is useful for visualizing a Fourier transform with the zero-frequency component in the middle of the spectrum. For vectors, fftshift(X) swaps the left and right halves of X.
fftshift的作用是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来.
3 频谱图的横坐标如何和真实的频率对应
频谱的横坐标为f,其中f=([0:L-1])*Fs/L-Fs/2。其中,L表示序列的长度,即总的采样点数;Fs表示采样频率。
为什么通过f=([0:L-1])-Fs/2就可以实现横坐标表示真实频率呢?因为FFT之后的频谱图的横坐标为n,n=0,1,2… N-1。实际我们通过MATLAB画信号的频谱图时,横坐标的范围为0 ~ Fs。现在的问题转化为两者之间如何对应。n/L表示单位化,再乘以Fs表示单位距离所对应的的频率大小。所以可以用([0:L-1])*Fs/L来对应真实的频率。
4 频谱图的纵坐标如何和真实的幅度值对应
P=abs(Y)/L; % 换算成实际的幅度。
根据功率信号FFT得到的频谱图是功率谱,能量信号FFT得到的频谱图是能量谱。由于正弦信号是一个功率信号,所以FFT得到的频谱图是功率谱。
5 源代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 幅度谱和相位谱
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 参数设置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fs=2e6; % 采样频率(Hz)
N=1000; % 采样点数
f1=2e4; % 信号频率
f2=5e4;
t=0:1/fs:(N-1)/fs; % 采样时刻
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 原始信号
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s=3*cos(2*pi*f1*t+pi*0.25)+5*cos(2*pi*f2*t+pi*0.5);% 原始信号
figure(1)
plot(t,s,'b');grid minor;
xlabel('时间t');ylabel('幅度值');
title('原始信号');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 傅里叶变换
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y = fftshift(fft(s));
L=length(s);
P=abs(Y)/L; % 换算成实际的幅度
f=(0:L-1)*fs/L-fs/2; % 换算成实际的频率值
figure(2)
plot(f,P); grid minor;
xlabel('频率f/Hz');ylabel('幅度');
title('幅度-频率曲线图');
Pyy=[];
for i=1:N
Pyy(i)=phase(Y(i))*180/pi; % 计算相位
end
figure(3)
plot(f,Pyy); grid minor;
xlabel('频率f/Hz');ylabel('相位值');
title('相位-频率曲线图');
6 仿真结果
1)采样后的序列的时域波形
根据上图可知,采样之后的序列是周期序列,其周期是0.1ms,即频率为10KHz。
为两个频率分量(f1=2e4; f2=5e4;)的最小公倍数。
2)采样后的序列的幅度谱
1、想想有没有频谱展宽现象?
2、为什么是双边谱(正负频率都有频率分量)? 具体见博客《实信号到解析信号的方法》
3)采样后的序列的相位谱