实验6 窗函数

实验6 窗函数

6.1 实验目的

(1)理解窗函数的基本性能,掌握主瓣宽度与旁辦电平的控制原则。

(2)探究两类相位特性对信号处理的影响。

6.2 实验原理

1)用窗函数截取序列做DFT分析,频谱泄露体现在宽阔的主瓣和旁瓣上;

2)控制窗函数的主瓣宽度和旁瓣电平,可以控制改善泄露对信号频谱识别的影响;

3)当幅度相差较大的两个信号同时存在时,需要仔细设计窗函数的主瓣宽度和旁瓣电平,以免弱信号淹没在强信号的旁瓣或主瓣中。

6.3 实验内容

(1)设 $x_1(n)=31.6e^{j\frac{3\pi}{7}n}+0.005e^{j\frac{4\pi}{5}n}$,$0\le n\le 1023$。

分别使用矩形窗、Hamming窗对 $x_1(n)$ 做DFT得到 $X_1(k)$,画出幅度谱,用分贝(dB)表示,并比较分析。

矩形窗的低频旁瓣幅度应超过高频分量,Hamming窗的低频旁瓣幅度应低于高频分量。

(提示:窗函数的产生可以利用MATLAB中的window(r2021之前版本为dsp.Window),或者可以直接调用MATLAB内置的boxcar、hanning、hamming和blackman函数,具体使用方法请查阅MATLAB文档;DFT计算可以调用MATLAB内置的fft函数,fft点数取2N,fft函数的具体使用方法可查阅MATLAB文档。)

②幅度谱的分贝公式:$dB=20\lg{(\text{amplitude})}$。

(2)设 $x_2(n)=31.6e^{j\frac{3\pi}{7}n}+10e^{j\left(\frac{1}{7}+\frac{1}{1024}\right)3\pi n}$,$0\le n\le N-1$。

使用Blackman窗,分别在 $N=1024$ 和 $N=2048$ 两种情况下,对 $x_2(n)$ 做DFT得到 $X_2(k)$,画出幅度谱,并比较分析。

$N=1024$ 时,高频分量淹没在低频分量的主瓣中;$N=2048$ 时,低频分量的主瓣变窄,高频分量显现。

6.4 仿真结果

6-1.svg 6-2.svg

6.5 结果分析

(1) 矩形窗 vs Hamming

窗矩形窗:

主瓣最窄,分辨率高,但旁瓣峰值较高。在此实验中,由于强信号的旁瓣幅度超过了弱信号的主瓣,导致弱信号(高频分量)被淹没在旁瓣中,无法识别。

Hamming 窗:

主瓣稍宽,但旁瓣抑制能力强。强信号的旁瓣显著降低,使得远处的弱信号(高频分量)能够清晰地显现出来。

(2) Blackman 窗下 N=1024 vs N=2048

N = 1024:

频率分辨率不足。两个信号的频率非常接近,Blackman 窗的主瓣较宽,导致高频分量的峰值完全淹没在低频分量的主瓣内,无法区分出有两个信号。

N = 2048:

随着采样点数 $N$ 增加,主瓣的绝对宽度变窄。此时频率分辨率提高,原本重合的两个主瓣分离开,高频分量的峰值变得清晰可见。

6.6 结论

本实验深入探究了窗函数在频谱分析中的重要作用。 实验表明,窗函数的选择需要在频率分辨率(主瓣宽度)和旁瓣抑制能力之间进行权衡:矩形窗具有最佳的频率分辨率但旁瓣抑制差,Hamming窗在保持合理分辨率的同时显著改善了旁瓣抑制性能。 当信号频率间隔过小时,增加数据长度是提高频率分辨率的有效方法。 实验验证了窗函数设计在弱信号检测和密集频率分量识别中的关键地位,为实际信号处理中的窗函数选择提供了重要指导。

6.7 代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
%% 实验 6.3 信号频谱分析
clear; clc; close all;

%% (1) 矩形窗与 Hamming 窗对比
N1 = 1024;
n1 = 0:N1-1;
% 定义信号 x1(n)
x1 = 31.6 * exp(1j * (3*pi/7) * n1) + 0.005 * exp(1j * (4*pi/5) * n1);

% 1. 矩形窗
w_rect = boxcar(N1)';
X1_rect = fft(x1 .* w_rect, 2*N1); % 2N 点 DFT
mag1_rect = 20 * log10(abs(X1_rect) / max(abs(X1_rect))); % 归一化并取 dB

% 2. Hamming 窗
w_hamm = hamming(N1)';
X1_hamm = fft(x1 .* w_hamm, 2*N1);
mag1_hamm = 20 * log10(abs(X1_hamm) / max(abs(X1_hamm)));

% 作图 (1)
figure(1);
f = (0:2*N1-1) * (2/ (2*N1)); % 频率轴归一化为 0-2 (pi)
subplot(2,1,1);
plot(f, mag1_rect); grid on; title('(1) 矩形窗幅度谱 (dB)');
ylabel('幅度 (dB)'); ylim([-100, 5]);
subplot(2,1,2);
plot(f, mag1_hamm); grid on; title('(1) Hamming 窗幅度谱 (dB)');
xlabel('归一化频率 (\times\pi rad/sample)'); ylabel('幅度 (dB)'); ylim([-100, 5]);

%% (2) 不同采样点数 N 下的 Blackman 窗对比
% 定义不同 N
Ns = [1024, 2048];
figure(2);

for i = 1:2
    N2 = Ns(i);
    n2 = 0:N2-1;
    % 定义信号 x2(n)
    x2 = 31.6 * exp(1j * (3*pi/7) * n2) + 10 * exp(1j * (1/7 + 1/1024) * 3*pi * n2);
    
    % Blackman 窗
    w_black = blackman(N2)';
    X2 = fft(x2 .* w_black, 2*N2);
    mag2 = 20 * log10(abs(X2) / max(abs(X2)));
    
    % 作图 (2)
    subplot(2,1,i);
    f2 = (0:2*N2-1) * (2 / (2*N2));
    plot(f2, mag2); grid on;
    title(['(2) Blackman 窗, N = ', num2str(N2)]);
    ylabel('幅度 (dB)'); xlabel('归一化频率 (\times\pi rad/sample)');
    xlim([0.3, 0.6]); % 局部放大以观察两个分量
end
使用 Hugo 构建