计算信号的能量和功率在以前的帖子在这里,我们将使用Matlab中的离散傅里叶变换.点击此处了解更多关于功率和能量的概念.
信号的总功率可以使用以下等式计算
![P_x=\显示样式{\lim_{N\rightarrow\infty}\sum_{N=0}^{N-1}|x(N)|^2}\quad\quad(1)](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
对于其他形式的方程式:请参阅此处。
案例研究:
让x(吨)是振幅的正弦波A类和频率(f)c(c)由以下等式表示。
![x(t)=A\;sin\left(2\pi f_c t\right)\quad\quad(2)](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
当在频域中表示时,它看起来像下图右侧的图。这从应用欧拉公式可以数学表示正弦波的事实中可以明显看出。
![A\;sin\left(2\pif_ct\right)=显示样式{A\frac{e^{j2\pif _ct}-e^{-j2\ pif _ct}}{2j}}\quad\quad(3)](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
进行傅里叶变换x(吨)在频域中表示,
![\begin{aligned}X(f)&=f\left[A\;sin\left(2\pi f_c t\right)\right]\\&=\int_{-\infty}^{\infty}\left[\frac{e^{j2\pi f_c t}-e^{-j 2\pi f_c t}}{2j}\right]e^{-j 2\pi f t}\\&=\frac{A}{2j}\left[\delta(f-f-c)-\delta(f+c)\right]\end{aligned}\quad\quad(4)](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
当考虑振幅部分时,上述分解在频域两侧给出了振幅A/2的两个峰值(f)c(c)和-(f)c(c).
图1:纯正弦波的时域表示和频谱
将振幅平方得出单个峰值/频率分量的功率大小。功率谱如下图所示。
图2:纯正弦波的功率谱
因此,如果纯正弦波的振幅A=1V,频率=100Hz,功率谱将有两个峰值
在100 Hz和-100 Hz频率下。总功率为![A^2/4+A^2/4=0.25+0.25=0.5瓦](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
让我们通过仿真来验证这一点。
模拟和验证
实验采用频率为100Hz、幅值为1V的正弦波。
A=1;%正弦波振幅Fc=100;%正弦波频率Fs=1000;%采样率-过采样率为10Ts=1/Fs;%采样周期n周期=200;%正弦波的周期数子区(2,1,1);t=0:Ts:nCycles/Fc-Ts;%时间基准x=A*sin(2*pi*Fc*t);%正弦函数茎(t,x);%Plot命令
这里绘制了10个周期的正弦波
图3:Matlab中生成的正弦波
Matlab的Norm函数:
Matlab的基本安装附带“规范”功能。Matlab中的p-范数计算如下
![NORM(v,p)=\left(显示样式{\sum_{n=0}^{n-1}|x(v)|^p}\right)^{frac{1}{p}}\quad\quad(5)](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
默认情况下,单参数范数函数计算2-标准给定为
![NORM(v)=\left(显示样式{\sum_{n=0}^{n-1}|x(v)|^2}\right)^{frac{1}{2}}\quad\quad(6)](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
计算信号的总功率x(n)(如上述等式(1)所示),我们所要做的就是计算范数(x),将其平方并除以信号的长度。
L=长度(x);P=(范数(x)^2)/L;sprintf(‘时域信号功率%f’,P);
上述给定的代码段将产生以下输出
时域信号功率0.500000
通过DFT验证总功率:频域
这里,通过对正弦序列应用DFT来验证总功率。正弦序列x(n)在频域中表示X[f]使用Matlab的FFT函数。与每个频率点相关的功率计算如下
![P_x[f]=x[f]x^\ast[f]](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
最后,将总功率计算为频域表示中所有点的总和。
X=快速傅里叶变换(X);Px=总和(X.*conj(X))/(L^2);%通过适当的缩放计算功率。子区(2,1,2)%绘制单面振幅谱。阀杆(Px);sprintf(‘来自DFT的信号总功率%f’,P);
结果:
来自DFT 0.500000的信号总功率
图4:Matlab中模拟的纯正弦波功率谱
Matlab FFT上的一句话:如果变换长度为2的幂,则对Matlab的FFT进行优化以获得更快的性能。下面的代码片段只是调用“fft”,而没有转换长度。在这种情况下,窗口长度和变换长度是相同的。这是为了简化功率的计算。您可以重新写入对FFT例程的调用,并将转换长度设置为大于或等于窗口长度(序列长度)的次幂2。那么计算总功率的步骤在分母上会略有不同。但这并不会提高分辨率(记住:计算FFT的零填充不会提高分辨率)。
还要注意,在上面的模拟中,我们使用的是纯正弦曲线。整个正弦序列完全定义了所有周期。序列中没有间断。如果调用FFT时将变换长度设置为2的次幂(如Matlab手册中所示),它将向序列中填充额外的零,并在FFT计算中创建不连续性。这将导致频谱泄漏。这里讨论了FFT和频谱泄漏.
评价此文章: ![可怜的 可怜的](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
![低于平均水平 低于平均水平](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
![平均 平均](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
![很好 很好](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E)
(17平均票数:3.88(共5个)
参考文献:
[1]Sanjay Lall,“规范和向量空间”,斯坦福大学信息系统实验室。↗
作者的书籍