问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

傅里叶变换详解:幅度谱、功率谱和相位谱的计算与分析

创作时间:
作者:
@小白创作中心

傅里叶变换详解:幅度谱、功率谱和相位谱的计算与分析

引用
CSDN
1.
https://blog.csdn.net/weixin_43853598/article/details/139629557

傅里叶变换是信号处理领域的重要工具,它可以帮助我们分析信号在频域的特性。本文将通过一个具体的MATLAB示例,介绍如何计算和绘制信号的幅度谱、功率谱和相位谱。

FFT函数介绍

在开始之前,我们先简要介绍MATLAB中用于计算快速傅里叶变换(FFT)的函数fft

  • Y = fft(X):返回X的离散傅里叶变换(DFT)结果。对于二维矩阵,默认按列进行变换。
  • Y = fft(X,N):返回X数据中前N点的DFT结果,等同于fft(X(1:N))
  • Y = fft(X,N,dim):返回沿维度dim的傅里叶变换。例如,dim=1表示沿列进行傅里叶变换,dim=2表示沿行进行傅里叶变换。

信号生成与傅里叶变换

我们首先生成一个包含两个频率成分的信号:

clear all; close all; clc; % 清理工作区,关闭所有窗口,清空文本
Fs = 100; % 采样频率
t = 0:1/Fs:5-1/Fs; % 时间向量
x = sin(2*pi*5*t) + cos(2*pi*10*t-pi/2); % 信号

这个信号由两个分量组成:一个5Hz的正弦波和一个10Hz的余弦波。

幅度谱计算

接下来,我们计算信号的傅里叶变换,并绘制单边幅度谱:

figure(1);
subplot(311)
plot(x)
title('Original Time Domain Signal')

% 计算信号的傅里叶变换
y = abs(fft(x));
ly = length(y);
y = y(1:ly/2+1);  % 保留单边谱

% 单边频谱只保留一半能量,为了表示真实的振幅,需要将直流和奈奎斯特频率外的其余分量乘2。
y(2:end-1) = 2*y(2:end-1);  

f = (0:ly/2)/ly*Fs;

subplot(312)
plot(f,y)
title('One-Sided Magnitude Spectrum of x(t)')
xlabel('Frequency (Hz)')
ylabel('2 * |y|')
grid

subplot(313)
plot(f,10*log10(y))  % 转为dB格式
title('One-Sided Magnitude Spectrum of x(t)')
xlabel('Frequency (Hz)')
ylabel('Power (dB)')
grid

功率谱计算

功率谱表示信号在每个频率分量上的功率。我们可以通过以下方式计算:

figure(2)
subplot(311)
temp = y.^2/ly;
plot(f,temp)
title('One-Sided Power Spectrum of x(t)')
xlabel('Frequency (Hz)')
ylabel('Power')
grid

% 功率谱密度计算
subplot(312)
temp = y.^2/(ly * Fs);
plot(f,temp)
title('One-Sided Power Spectrum Density of x(t)')
xlabel('Frequency (Hz)')
ylabel('Power density')
grid

% 使用periodogram函数校验
subplot(313)
temp = periodogram(x, [], ly, Fs);
plot(f,temp)
title('One-Sided Power Spectrum Density of x(t)')
xlabel('Frequency (Hz)')
ylabel('Power density')
grid

相位谱计算

相位谱反映了信号在不同频率成分上的相位信息:

figure(3)
y = fft(x);
y = y(1:ly/2+1);
threshold = max(abs(y)) * 0.1;  % 设置幅度阈值
significant_indices = find(abs(y) > threshold);
theta = angle(y);  

stem(f(significant_indices), theta(significant_indices))
title('Phase Spectrum of x(t)')
xlabel('Frequency (Hz)')
ylabel('Phase/\pi')
grid

结果分析

通过上述代码,我们可以得到以下结果:



从结果可以看出:

  1. 原始信号由5Hz和10Hz两个频率成分组成
  2. 幅度谱清晰地显示了这两个频率成分的幅度
  3. 功率谱和功率谱密度反映了信号在不同频率上的能量分布
  4. 相位谱显示5Hz处为正弦波(相位偏移π/2),10Hz处为余弦波(无相位偏移)

通过这个示例,我们可以看到傅里叶变换在信号分析中的强大作用。希望这篇文章能帮助你更好地理解傅里叶变换及其相关谱分析的基本概念和实现方法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号