欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

(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|')

二、仿真结果画图

信号的时域波形图:

在这里插入图片描述

零频分量在频谱起点的频谱图:

在这里插入图片描述
零频分量在功率谱的起点位置,并不够直观。下面给出零频分量在功率谱的中心位置的功率谱谱。

绘制以零为中心的功率谱:

在这里插入图片描述