www.gusucode.com > signal 案例源码程序 matlab代码 > signal/MeasureThePowerOfASignalExample.m

    %% Measure the Power of a Signal
% The power of a signal is the sum of the absolute squares of its
% time-domain samples divided by the signal length, or, equivalently, the
% square of its RMS level. The function |bandpower| allows you to estimate
% signal power in one step.

% Copyright 2015 The MathWorks, Inc.


%%
% Consider a unit chirp embedded in white Gaussian noise and sampled at 1
% kHz for 1.2 seconds. The chirp's frequency increases in one second from
% an initial value of 100 Hz to 300 Hz. The noise has variance $0.01^2$.
% Reset the random number generator for reproducible results.

N = 1200;
Fs = 1000;
t = (0:N-1)/Fs;

sigma = 0.01;
rng('default')

s = chirp(t,100,1,300)+sigma*randn(size(t));

%%
% Verify that the power estimate given by |bandpower| is equivalent to the
% definition.

pRMS = rms(s)^2
powbp = bandpower(s,Fs,[0 Fs/2])

%%
% Use the |obw| function to estimate the width of the frequency band that
% contains 99% of the power of the signal, the lower and upper bounds of
% the band, and the power in the band. The function also plots the spectrum
% estimate and annotates the occupied bandwidth.

obw(s,Fs);

[wd,lo,hi,power] = obw(s,Fs);
powtot = power/0.99

%%
% A nonlinear power amplifier is given a 60 Hz sinusoid as input and
% outputs a noisy signal with third-order distortion. The sample rate is
% 3.6 kHz. Subtract the zero-frequency (DC) component to concentrate on the
% spectral content.

load(fullfile(matlabroot,'examples','signal','AmpOutput.mat'))
Fs = 3600;
y = y-mean(y);

%%
% Because the amplifier introduces third-order distortion, the output
% signal is expected to have
%
% * A _fundamental_ component with the same frequency as the input, 60 Hz;
% * Two _harmonics_ -- frequency components at twice and three times the
% frequency of the input, 120 and 180 Hz.

%%
% Use |bandpower| to determine the power stored in the fundamental and the
% harmonics. Express each value as a percentage of the total power and in
% decibels. Display the values as a table.

pwrTot = bandpower(y,Fs,[0 Fs/2]);

Harmonic = {'Fundamental';'First';'Second'};

Freqs = [60 120 180]';

Power = zeros([3 1]);
for k = 1:3
    Power(k) = bandpower(y,Fs,Freqs(k)+[-10 10]);
end

Percent = Power/pwrTot*100;

inDB = pow2db(Power);

T = table(Freqs,Power,Percent,inDB,'RowNames',Harmonic)