(42) 在 MATLAB 中使用 fftshift 绘制零心功率谱
最编程
2024-10-19 14:12:29
...
文章目录
- 前言
- 一、MATLAB代码
- 二、仿真结果画图
前言
在分析信号的频率分量时,将零频分量平移到频谱中心会很有帮助。本例给出绘制以零为中心的功率谱的方法。
一、MATLAB代码
代码如下:
f = 1; % 余弦波的振荡频率,简称频率
fs = 32; % 数字信号的采样频率(sampling frequency ),简称采样率
Ts = 1/fs; % 采样周期,也即采样值的时间间隔
L = 320; % 一个采样值称为一个sample,L为sample的个数
t = (0:L-1)*Ts; % 时间向量
x = cos(2*pi*f*t); % 生成余弦波x
% 画出生成余弦波的时域波形
figure()
plot(t,x,'LineWidth',1.5)
% title('余弦信号的时域波形')
title(['余弦波的时域波形(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s)'])
grid on
xlabel('t/s')
ylabel('cos(2*pi*f*t)')
%% 计算余弦波信号功率谱,并绘制以零频为中心的功率谱。
% 计算余弦波信号功率谱
N = length(x);
X = fft(x, N); % 计算时域信号x的傅里叶变换
f = (0:N-1)*(fs/N); % 频率范围。频率刻度从0开始,0对应直流分量
power = abs(X).^2/N; % 功率
% 绘制以零频为起点的功率谱
figure()
plot(f,power,'LineWidth',1)
grid on
title('余弦信号的功率谱(零频在起点)')
xlabel('频率(Hz)')
ylabel('功率谱幅度|Y|')
% 平移负频分量
Y = fftshift(X); % X的第1-160个值是直流分量到fs/2-fs/N的频率分量
powershift = abs(Y).^2/N; % 以0为中心的功率
fshift = (-N/2:N/2-1)*(fs/N); % 以0为中心的频率范围
% 绘制以零频为中心的功率谱
figure()
plot(fshift,powershift,'LineWidth',1)
grid on
title('余弦信号的功率谱(零频在中心)')
xlabel('频率(Hz)')
ylabel('功率谱幅度|Y|')
二、仿真结果画图
信号的时域波形图:
零频分量在频谱起点的频谱图:
零频分量在功率谱的起点位置,并不够直观。下面给出零频分量在功率谱的中心位置的功率谱谱。
绘制以零为中心的功率谱:
上一篇: Spring Boot 视频网站:技术选择与架构设计
下一篇: 常见的前端开发面试问题及其答案