You are here : matlabSignal Processingpowerbw

# powerbw() - Signal Processing

bw = powerbw(x) returns
the 3-dB (half-power) bandwidth, bw, of the input
signal, x.
examplebw = powerbw(x,fs) returns
the 3-dB bandwidth in terms of the sample rate, fs.

examplebw = powerbw(pxx,f) returns
the 3-dB bandwidth of the power spectral density (PSD) estimate, pxx.
The frequencies, f, correspond to the estimates
in pxx.
bw = powerbw(sxx,f,rbw) computes
the 3-dB bandwidth of the power spectrum estimate, sxx.
The frequencies, f, correspond to the estimates
in sxx. rbw is the resolution
bandwidth used to integrate each power estimate.

bw = powerbw(___,freqrange,r) specifies
the frequency interval over which to compute the reference level,
using any of the input arguments from previous syntaxes. freqrange must
lie within the target band.If you also specify r, the function computes
the difference in frequency between the points where the spectrum
drops below the reference level by r dB or reaches
an endpoint.

example[bw,flo,fhi,power]
= powerbw(___) also returns the lower and upper
bounds of the power bandwidth and the power within those bounds.

powerbw(___) with no output
arguments plots the PSD or power spectrum in the current figure window
and annotates the bandwidth.

### Syntax

bw = powerbw(x)bw = powerbw(x,fs) examplebw = powerbw(pxx,f) examplebw = powerbw(sxx,f,rbw)bw = powerbw(___,freqrange,r)[bw,flo,fhi,power]
= powerbw(___) examplepowerbw(___)

### Example

3-dB Bandwidth of ChirpsOpen This Example
Generate 1024 samples of a chirp sampled at 1024 kHz. The chirp has an initial frequency of 50 kHz and reaches 100 kHz at the end of the sampling. Add white Gaussian noise such that the signal-to-noise ratio is 40 dB. Reset the random number generator for reproducible results.
nSamp = 1024;
Fs = 1024e3;
SNR = 40;
rng default

t = (0:nSamp-1)'/Fs;

x = chirp(t,50e3,nSamp/Fs,100e3);
x = x+randn(size(x))*std(x)/db2mag(SNR);
Estimate the 3-dB bandwidth of the signal and annotate it on a plot of the power spectral density (PSD).powerbw(x,Fs)

ans =

4.4386e+04

Generate another chirp. Specify an initial frequency of 200 kHz, a final frequency of 300 kHz, and and amplitude that is twice that of the first signal. Add white Gaussian noise.x2 = 2*chirp(t,200e3,nSamp/Fs,300e3);
x2 = x2+randn(size(x2))*std(x2)/db2mag(SNR);
Concatenate the chirps to produce a two-channel signal. Estimate the 3-dB bandwidth of each channel.y = powerbw([x x2],Fs)

y =

1.0e+04 *

4.4386    9.2208

Annotate the 3-dB bandwidths of the two channels on a plot of the PSDs.powerbw([x x2],Fs);

Add the two channels to form a new signal. Plot the PSD and annotate the 3-dB bandwidth.powerbw(x+x2,Fs)

ans =

9.2243e+04

3-dB Bandwidth of SinusoidsOpen This ExampleGenerate 1024 samples of a 100.123 kHz sinusoid sampled at 1024 kHz. Add white Gaussian noise such that the signal-to-noise ratio is 40 dB. Reset the random number generator for reproducible results.nSamp = 1024;
Fs = 1024e3;
SNR = 40;
rng default

t = (0:nSamp-1)'/Fs;

x = sin(2*pi*t*100.123e3);
x = x + randn(size(x))*std(x)/db2mag(SNR);
Use the periodogram function to compute the power spectral density (PSD) of the signal. Specify a Kaiser window with the same length as the signal and a shape factor of 38. Estimate the 3-dB bandwidth of the signal and annotate it on a plot of the PSD.[Pxx,f] = periodogram(x,kaiser(nSamp,38),[],Fs);

powerbw(Pxx,f);

Generate another sinusoid, this one with a frequency of 257.321 kHz and an amplitude that is twice that of the first sinusoid. Add white Gaussian noise.x2 = 2*sin(2*pi*t*257.321e3);
x2 = x2 + randn(size(x2))*std(x2)/db2mag(SNR);
Concatenate the sinusoids to produce a two-channel signal. Estimate the PSD of each channel and use the result to determine the 3-dB bandwidth.[Pyy,f] = periodogram([x x2],kaiser(nSamp,38),[],Fs);

y = powerbw(Pyy,f)

y =

1.0e+03 *

3.1753    3.3015

Annotate the 3-dB bandwidths of the two channels on a plot of the PSDs.powerbw(Pyy,f);

Add the two channels to form a new signal. Estimate the PSD and annotate the 3-dB bandwidth.[Pzz,f] = periodogram(x+x2,kaiser(nSamp,38),[],Fs);

powerbw(Pzz,f);

Bandwidth of Bandlimited SignalsOpen This Example
Generate a signal whose PSD resembles the frequency response of an 88th-order bandpass FIR filter with normalized cutoff frequencies
d = fir1(88,[0.25 0.45]);
Compute the 3-dB occupied bandwidth of the signal. Specify as a reference level the average power in the band between
rad/sample. Plot the PSD and annotate the bandwidth.powerbw(d,[],[0.2 0.6]*pi,3);

Output the bandwidth, its lower and upper bounds, and the band power. Specifying a sample rate of
is equivalent to leaving the rate unset.[bw,flo,fhi,power] = powerbw(d,2*pi,[0.2 0.6]*pi);

fprintf('bw = %.3f*pi, flo = %.3f*pi, fhi = %.3f*pi \n', ...
[bw flo fhi]/pi)
fprintf('power = %.1f%% of total',power/bandpower(d)*100)
bw = 0.200*pi, flo = 0.250*pi, fhi = 0.450*pi
power = 96.9% of totalAdd a second channel with normalized cutoff frequencies
rad/sample and an amplitude that is one-tenth that of the first channel.d = [d;fir1(88,[0.5 0.8])/10]';
Compute the 6-dB bandwidth of the two-channel signal. Specify as a reference level the maximum power level of the spectrum.powerbw(d,[],[],6);

Output the 6-dB bandwidth of each channel and the lower and upper bounds.[bw,flo,fhi] = powerbw(d,[],[],6);
bds = [bw;flo;fhi];

fprintf('One: bw = %.3f*pi, flo = %.3f*pi, fhi = %.3f*pi \n',bds(:,1)/pi)
fprintf('Two: bw = %.3f*pi, flo = %.3f*pi, fhi = %.3f*pi \n',bds(:,2)/pi)
One: bw = 0.198*pi, flo = 0.252*pi, fhi = 0.450*pi
Two: bw = 0.294*pi, flo = 0.503*pi, fhi = 0.797*pi