matlabfft计算功率,使⽤FFT获得功率频谱密度估计
具有指定采样率的偶数长度输⼊
对于⼀个采样率为 1 kHz 的偶数长度信号,分别使⽤ fft 和 periodogram 获得其周期图。⽐较⼆者的结果。
创建⼀个含 N(0,1) 加性噪声的 100 Hz 正弦波信号。采样频率为 1 kHz。信号长度为 1000 个采样点。使⽤随机数⽣成器的默认设置以获得可重现的结果。
rng default
Fs = 1000;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*100*t) + randn(size(t));
使⽤ fft 获取周期图。信号是偶数长度的实数值信号。由于信号是实数值信号,您只需要对正负频率之⼀进⾏功率估计。为了保持总功率不变,将同时在两组(正频率和负频率)中出现的所有频率乘以因⼦ 2。零频率 (DC) 和 Nyquist 频率不会出现两次。绘制结果。
N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;
plot(freq,10*log10(psdx))
grid on
title('Periodogram Using FFT')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
计算并使⽤ periodogram 绘制周期图。⼆者的结果相同。
periodogram(x,rectwin(length(x)),length(x),Fs)
mxerr = max(psdx'-periodogram(x,rectwin(length(x)),length(x),Fs))
mxerr = 3.4694e-18
具有归⼀化频率的输⼊
通过 fft 为使⽤归⼀化频率的输⼊⽣成周期图。创建⼀个带 N(0,1) 加性噪声的正弦波信号。该正弦波的⾓频率为 π/4 弧度/采样点。使⽤随机数⽣成器的默认设置以获得可重现的结果。
rng default
n = 0:999;
x = cos(pi/4*n) + randn(size(n));matlab生成随机数
使⽤ fft 获取周期图。信号是偶数长度的实数值信号。由于信号是实数值信号,您只需要对正负频率之⼀进⾏功率估计。为了保持总功率不变,将同时在两组(正频率和负频率)中出现的所有频率乘以因⼦ 2。零频率 (DC) 和 Nyquist 频率不会出现两次。绘制结果。
N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(2*pi*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:(2*pi)/N:pi;
plot(freq/pi,10*log10(psdx))
grid on
title('Periodogram Using FFT')
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Power/Frequency (dB/rad/sample)')
计算并使⽤ periodogram 绘制周期图。⼆者的结果相同。
periodogram(x,rectwin(length(x)),length(x))
mxerr = max(psdx'-periodogram(x,rectwin(length(x)),length(x)))
mxerr = 1.4211e-14
具有归⼀化频率的复数值输⼊
使⽤ fft 为具有归⼀化频率的复数值输⼊⽣成周期图。采⽤⼀个带 N(0,1) 复噪声的复指数信号,⾓频率为 π/4 弧度/采样点。采⽤随机数⽣成器的默认设置,以获得可重现的结果。
rng default
n = 0:999;
x = exp(1j*pi/4*n) + [1 1j]*randn(2,length(n))/sqrt(2);
使⽤ fft 获得周期图。由于输⼊是复数值,此处求 [0,2π) 弧度/采样点区间内的周期图。绘制结果。
N = length(x);
xdft = fft(x);
psdx = (1/(2*pi*N)) * abs(xdft).^2;
freq = 0:(2*pi)/N:2*pi-(2*pi)/N;
plot(freq/pi,10*log10(psdx))
grid on
title('Periodogram Using FFT')
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Power/Frequency (dB/rad/sample)')
使⽤ periodogram 获取并绘制周期图。⽐较 PSD 估计。
periodogram(x,rectwin(length(x)),length(x),'twosided')
mxerr = max(psdx'-periodogram(x,rectwin(length(x)),length(x),'twosided')) mxerr = 2.8422e-14

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。