matlab中fft与periodogram函数的关系+周期性功率信号的知识整理(简议)

周期性功率信号的频谱函数定义

 对于周期性的功率信号的,设一个周期性功率信号x(t)的周期为T0,则将其频谱(frequency spectrum)函数定义为下式积分变换:

式中:F0=1/T0;n为整数,-∞

一般来说,上式中的频谱函数Cn是一个复数,代表在频率nF0上信号分量的复振幅。|Cn|为频率nF0的信号分量的振幅。

同时,对于周期性功率信号来说,其频谱函数Cn是离散的,只在F0的整数倍上取值。由于n可以取负值,所以在负频率上Cn也有值。通常称Cn为双边(频)谱。双边谱中的负频谱仅在数学上有意义;在物理上,并不存在负频率。但是我们可以找到物理上是信号的频谱和数学上的频谱函数之间的关系。——频谱函数的正品率部分和负频率部分存在复数共轭关系,这就是说,负频率和正频率谱的模式偶对称的,相位是奇对称的。摘自《通信原理 第6版》

周期性功率信号的parseval定理

设x(t)是周期性实功率信号,周期等于T0,基频为F0=1/T0,则其傅里叶级数展开式为

X(t)=\sum_{n=-\infty }^{n=+\infty }Cn*e^{2\pi jnf_{0}t}

所以,其平均功率可以写为

上式就是周期性功率信号的parseval定理。它表示周期性功率信号的平均功率等于其频谱的模的平方和。摘自《通信原理 第6版》

关于求取离散信号功率谱的一点试验,仅供各位读者参考。

Fs=1000;
sec=5;%5秒的数据
t=1/Fs:1/Fs:sec;

x = 5*sin(2*pi*40*t) + 3*sin(2*pi*100*t) + rand(size(t));
x = 4*sin(2*pi*50*t) + 1*sin(2*pi*20*t) + 3*sin(2*pi*80*t);
% x = cos(2*pi*100*t) + randn(size(t));

nfft=1024;
        
[Pxx,f]=periodogram(x(1:nfft),rectwin(nfft),nfft,Fs,'twosided');%矩形窗 双边
[Pxx_2,f_2]=periodogram(x(1:nfft),rectwin(nfft),nfft,Fs,'onesided');%矩形窗  单边

y=fft(x(1:nfft), nfft);
y_2=abs(y).^2/(nfft*nfft);
fxP_2 = y_2(1: nfft/2);
fxP_2(2:end) = 2* fxP_2(2:end);%单边功率谱

freq = 0 : Fs/nfft : Fs-Fs/nfft;
freq_2 = 0 : Fs/nfft : Fs/2-Fs/nfft;

figure(1)
subplot(211)

plot(f, Pxx, 'b');
title('双边谱估计-periodogram');
hold on;
subplot(212)
plot(freq,y_2,'r');
title('双边谱估计-fft');

figure(2)
subplot(211)

plot(f_2, Pxx_2, 'b');
title('单边谱估计-periodogram');
hold on;
subplot(212)
plot(freq_2, fxP_2, 'r');
title('单边谱估计-fft');

由于要对比计算的结果,所以并未进行10*log10()的转换。

代码的运行结果为:

matlab中fft与periodogram函数的关系+周期性功率信号的知识整理(简议)_第1张图片

matlab中fft与periodogram函数的关系+周期性功率信号的知识整理(简议)_第2张图片

关于为何matlab函数fft之后要除以N/2的问题,请参考以下二链接的描述:

傅里叶变换如何在软件中精确计算得到正确的幅值?_数码逐渐远去的博客-CSDN博客_fft如何得到真实的幅值

为什么FFT后幅值要除以N/2 - 知乎

matlab中fft与periodogram函数的关系+周期性功率信号的知识整理(简议)_第3张图片

你可能感兴趣的:(功率谱估计,matlab,开发语言)