信号处理与傅里叶变换习题解析

内容分享2小时前发布
0 0 0

table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}

1、写出一个描述以每秒5个周期振荡的连续正弦波x(t)的方程。

根据频率与角速度的关系:

ω=2πfω=2πf

已知 $ f = 5 , ext{Hz} $,则:

ω=10πω=10π

一般正弦波方程为:

x(t)=Acos(ωt+φ)x(t)=Acos⁡(ωt+φ)

x(t)=Asin(ωt+φ)x(t)=Asin⁡(ωt+φ)

这里假设振幅 $ A = 1 $,初相 $ varphi = 0 $,则方程可以写为:

x(t)=cos(10πt)x(t)=cos⁡(10πt)

x(t)=sin(10πt)x(t)=sin⁡(10πt)

2、假设给定一个包含N个样本的采样信号x[n],采样率fs = 8000 Hz。如果通过从x[n]中每隔一个样本取值来得到一个新信号y[n],即y[n] = x[2 · n]。那么y[n]的采样率fs是多少?y[n]的采样周期ts是多少?y[n]有多少个样本?

求y[n]的采样率fs:

已知x[n]的采样率fsx = 8000 Hz,y[n]是每隔一个样本从x[n]中取值,即y[n]的采样间隔是x[n]采样间隔的2倍。

因为采样率和采样间隔成反比,所以y[n]的采样率fsy = fsx / 2 = 8000 / 2 = 4000 Hz。

求y[n]的采样周期ts:

采样率fs和采样周期ts的关系是fs = 1 / ts,所以ts = 1 / fs。

已知fsy = 4000 Hz,那么ts = 1 / 4000 = 0.00025 s。

求y[n]的样本数量:

当N为偶数时,y[n]的样本数量为N / 2;

当N为奇数时,y[n]的样本数量为(N – 1) / 2。

3、如果采样率 fs = 100 Hz,使用混叠方程 f′ = f + k · fs 为以下每个频率找到两个混叠频率:f = 100 Hz;f = -25 Hz;f = 210 Hz。

根据混叠方程 $ f’ = f + k cdot f_s $,其中 $ f_s = 100 , ext{Hz} $。

对于 $ f = 100 , ext{Hz} $:

取 $ k = 1 $ 时,$ f’ = 100 + 1 imes 100 = 200 , ext{Hz} $

取 $ k = 2 $ 时,$ f’ = 100 + 2 imes 100 = 300 , ext{Hz} $

对于 $ f = -25 , ext{Hz} $:

取 $ k = 1 $ 时,$ f’ = -25 + 1 imes 100 = 75 , ext{Hz} $

取 $ k = 2 $ 时,$ f’ = -25 + 2 imes 100 = 175 , ext{Hz} $

对于 $ f = 210 , ext{Hz} $:

取 $ k = -1 $ 时,$ f’ = 210 + (-1) imes 100 = 110 , ext{Hz} $

取 $ k = -2 $ 时,$ f’ = 210 + (-2) imes 100 = 10 , ext{Hz} $

因此:

$ f = 100 , ext{Hz} $ 的两个混叠频率是

200 Hz



300 Hz

$ f = -25 , ext{Hz} $ 的两个混叠频率是

75 Hz



175 Hz

$ f = 210 , ext{Hz} $ 的两个混叠频率是

110 Hz



10 Hz

4、对于以下每个系统,其单位脉冲响应是什么?1. y[n] = x[n] – x[n – 1] 2. y[n] = 2 · x[n] + x[n – 2] 3. y[n] = 1/3 · (x[n – 2] + x[n – 3] + x[n – 4])

根据卷积滤波器的单位脉冲响应是序列

h

本身这一结论:

系统 $ y[n] = x[n] – x[n – 1] $ 的单位脉冲响应

h[n]=δ[n]−δ[n−1]h[n]=δ[n]−δ[n−1]

系统 $ y[n] = 2 cdot x[n] + x[n – 2] $ 的单位脉冲响应

h[n]=2δ[n]+δ[n−2]h[n]=2δ[n]+δ[n−2]

系统 $ y[n] = frac{1}{3} cdot (x[n – 2] + x[n – 3] + x[n – 4]) $ 的单位脉冲响应

h[n]=13(δ[n−2]+δ[n−3]+δ[n−4])h[n]=13(δ[n−2]+δ[n−3]+δ[n−4])

其中 $ delta[n] $ 为单位脉冲序列。

5、对于以下每个系统,判断它是线性的、时移不变的、既是线性又是时移不变的,还是两者都不是。1. y[n] = −x[n] 2. y[n] = x[0] 3. y[n] = 1/2 · |x[n] + x[n −1]| 4. y[n] = 20 5. y[n] = n^2

既是线性又是时移不变的;

既不是线性也不是时移不变的;

既不是线性也不是时移不变的;

既不是线性也不是时移不变的;

既不是线性也不是时移不变的。

6、满足以下条件的复数 z 分别有多少个:1. z² = 1;2. z² = -1;3. z³ = 1。

对于方程 $ z^2 = 1 $,移项可得 $ z^2 – 1 = 0 $,根据平方差公式 $ a^2 – b^2 = (a + b)(a – b) $,则 $ (z + 1)(z – 1) = 0 $,解得 $ z = 1 $ 或 $ z = -1 $,有 2 个复数满足条件。

对于方程 $ z^2 = -1 $,移项可得 $ z^2 + 1 = 0 $,解得 $ z = i $ 或 $ z = -i $,有 2 个复数满足条件。

对于方程 $ z^3 = 1 $,移项可得 $ z^3 – 1 = 0 $,根据立方差公式 $ a^3 – b^3 = (a – b)(a^2 + ab + b^2) $,则 $ (z – 1)(z^2 + z + 1) = 0 $。

由 $ z – 1 = 0 $ 得 $ z = 1 $;

对于 $ z^2 + z + 1 = 0 $,根据一元二次方程求根公式 $ x = frac{-b pm sqrt{b^2 – 4ac}}{2a} $(这里 $ a = 1 $,$ b = 1 $,$ c = 1 $),

$ Delta = b^2 – 4ac = 1 – 4 = -3 $,

$ z = frac{-1 pm sqrt{3}i}{2} $,

所以有 3 个复数满足条件。

综上,答案依次为 2 个、2 个、3 个。

7、求以下复数的共轭复数:1. z = 1 + 2j;2. z = 3;3. z = 3e^{j·π};4. z = 3e^{j·π/2}。

$ z = 1 + 2j $ 的共轭复数为 $ 1 – 2j $;

$ z = 3 $ 可写成 $ 3+0j $,其共轭复数为 $ 3 $;

$ z = 3e^{jpi}=3(cospi + jsinpi)=-3 $,其共轭复数为 $ -3 $;

$ z = 3e^{jfrac{pi}{2}}=3(cosfrac{pi}{2}+jsinfrac{pi}{2}) = 3j $,其共轭复数为 $ -3j $。

8、生成具有相同基频的不同类型信号(方波、三角波、锯齿波)。对于每种信号,计算其离散傅里叶变换(DFT)并查看其幅度谱。能否通过谐波的位置和幅度来区分不同类型的波?

可以使用

scipy.signal.square


scipy.signal.sawtooth

函数来生成这些信号。不同类型的波其谐波的位置和幅度存在差异,理论上可以通过这些差异区分不同类型的波,但实际操作中还需具体分析计算得到的 DFT 和幅度谱。

9、当y[n]是x[n]的循环移位时,离散傅里叶变换(DFT)移位定理给出了一个方程,将Y [m]表示为X[m]的复旋转。对于固定的频率索引m和信号长度N,能否找到一个延迟d ∉{0, N},使得X[m] = Y [m]?也就是说,是否存在一个非平凡的延迟,使X[m]保持不变?

根据DFT移位定理,

Y[m]=X[m]⋅exp(−j⋅2πN⋅m⋅d)Y[m]=X[m]⋅exp⁡(−j⋅2πN⋅m⋅d)

若 $ X[m] = Y[m] $,则有:

exp(−j⋅2πN⋅m⋅d)=1exp⁡(−j⋅2πN⋅m⋅d)=1

由于指数函数的周期性,当:

−j⋅2πN⋅m⋅d=2π⋅l(l 为整数)−j⋅2πN⋅m⋅d=2π⋅l(l 为整数)

时满足条件,即:

d=−l⋅Nmd=−l⋅Nm

当 $ l $ 为非零整数且 $ m $ 能整除 $ l cdot N $ 时,存在非零且不等于 $ N $ 的 $ d $ 值使等式成立。

因此,存在非平凡延迟使 $ X[m] $ 不变。

10、通过直接构建频域表示 X[m] 并应用逆离散傅里叶变换(IDFT)来合成正弦波 x[n] = A · cos(2π · f · n/N + φ)。使用以下起始代码:


import numpy as np
# 采样率
fs = 8000
# 持续时间/频率数量
N = 8000
# 波形参数
A = 5
f = 250  # Hz
phi = np.pi / 4
X = np.zeros(N, dtype=np.complex)
# 在此处插入代码以构建 X
# 进行逆变换以恢复信号
x = np.fft.ifft(X)

提示:将合成结果与纯时域生成的信号进行对比。你的逆离散傅里叶变换结果在数值上应与纯时域信号相同,包括幅度和相位。确保构建的离散傅里叶变换输出为实值。

正弦波合成方法

要合成正弦波 $x[n] = A · cos(2π · f · n/N + φ)$,需要在频域表示 $X[m]$ 中设置对应频率分量的系数。

实现步骤


确定频率分量的索引


对于频率 $f$,其在离散傅里叶变换中的索引 $k$ 可通过公式 $k = f * N / fs$ 计算得出。


设置频域系数


根据欧拉公式,$cos( heta) = frac{e^{j heta} + e^{-j heta}}{2}$,因此需要在索引 $k$ 和 $N – k$ 处设置相应的系数。

Python 实现代码


import numpy as np

# 采样率
fs = 8000

# 持续时间/频率数量
N = 8000

# 波形参数
A = 5
f = 250  # Hz
phi = np.pi / 4

# 计算频率分量的索引
k = int(f * N / fs)

# 初始化频域表示
X = np.zeros(N, dtype=np.complex)

# 设置频域系数
X[k] = A * np.exp(1j * phi) / 2
X[N - k] = A * np.exp(-1j * phi) / 2

# 进行逆变换以恢复信号
x = np.fft.ifft(X)

# 确保输出为实值
x = np.real(x)

# 检查合成结果与纯时域信号是否相同
t = np.arange(N) / fs
x_time_domain = A * np.cos(2 * np.pi * f * t + phi)

# 对比结果
assert np.allclose(x, x_time_domain), "合成结果与纯时域信号不匹配"

说明

这段代码首先计算了频率分量的索引 $k$,然后在 $X[k]$ 和 $X[N – k]$ 处设置了相应的系数。接着,使用

np.fft.ifft

函数进行逆离散傅里叶变换,最后确保输出为实值。通过对比合成结果与纯时域信号,可以验证合成的正确性。

11、FFT 函数需要进行多少次递归调用?

递归调用的总层数为 $1 + log_2 N$,每层有 $2^l$ 次对

fft2

的调用($l$ 为层数),所以总的递归调用次数需根据具体的 $N$ 值,对每层的调用次数求和得出。

12、假设有一个长度 N = 44100、采样率 fs = 44100 的信号。如果进行短时傅里叶变换(STFT),帧长 NF = 4096,跳长 NH = 512,会得到多少帧?

根据公式 $ K = 1 + leftlfloor frac{N – NF}{NH}
ight
floor $,将 $ N = 44100 $、$ NF = 4096 $、$ NH = 512 $ 代入可得:

K=1+⌊44100−4096512⌋=1+⌊40004512⌋=1+78=79K=1+⌊44100−4096512⌋=1+⌊40004512⌋=1+78=79

所以会得到

79 帧

13、SciPy 包提供了一个 STFT 实现 scipy.signal.stft。使用你选择的一个(非平凡的)测试信号 x,能否找到 scipy.signal.stft 的参数设置,使其输出与 NF = 2048 和 NH = 512 时的 wstft 函数输出相同?注:wstft 函数是一个自定义的进行 STFT 变换的函数。

可以按如下步骤操作。首先检查输出形状,示例代码如下:


import numpy as np
import scipy

s1 = wstft(x, 2048, 512, 'hann')
s2 = scipy.signal.stft(...)
# 检查形状
assert s1.shape == s2.shape

可能需要通过

s2 = s2.T


s2

进行转置,使时间和频率维度顺序与我们的一致。形状对齐后,使用

np.allclose

测试数值等价性:


assert np.allclose(s1, s2)

14、如果有一个长度为N的信号x和一个长度为K(K < N)的滤波器h,标准的全模式卷积h∗x可以通过对x和h的零填充版本进行循环卷积并修剪结果来实现。为使这一方法可行,必须对x和h应用的最小填充量(用N和K表示)是多少?

需在输入的左右两侧各填充K – 1个样本,全模式卷积将有N + K – 1个输出样本。

15、考虑以下无限脉冲响应(IIR)系统:y[n] = 1/2 (x[n] – x[n – 2]) + y[n – 1]。该系统的阶数是多少?

此系统的阶数为1。系统中反馈项的最大延迟为1(y[n – 1]),所以系统阶数是1。

16、给定一个系统,其极点为{0.5 + 0.5j, 0.5 – 0.5j},零点为{-0.5, +0.5}。请完成以下任务:1. 为该系统创建一个零极点图。2. 该系统是否稳定?3. 该系统是低通、高通还是其他类型的滤波器?

绘制零极点图:在复平面上,传统上极点用×表示,零点用○表示。可将两个极点 $0.5 + 0.5j$ 和 $0.5 – 0.5j$ 标记为×,两个零点 $-0.5$ 和 $+0.5$ 标记为○。

判断系统稳定性:系统的稳定性取决于极点的位置,特别是其模值。

– 对于极点 $0.5 + 0.5j$,其模为 $sqrt{0.5^2 + 0.5^2} = sqrt{0.5} approx 0.707$;

– 对于极点 $0.5 – 0.5j$,其模同样为 $sqrt{0.5^2 + 0.5^2} approx 0.707$。

两个极点的模都小于1,即极点都在单位圆内,所以该系统是稳定的。

判断滤波器类型:零点在实轴上,极点在第一和第四象限且靠近原点。没有明显的高、低频极点和零点分布特征,所以该系统既不是低通滤波器也不是高通滤波器。

17、低通滤波器允许低于某个截止频率$f_T$的频率通过,并阻挡所有高于截止频率的频率。尝试在你选择的信号上实现这一点,即如果对应的频率高于 500 Hz,则将任何离散傅里叶变换(DFT)系数$X[m]$设为 0。应用逆 DFT 并聆听结果。声音听起来如何?你是否注意到任何伪像?提示:最好在几种不同的声音上进行尝试,包括自然信号和合成信号。拍手声可能特别有趣。

低通滤波后声音可能会变得模糊、柔和,高频细节减少。

可能会出现的伪像包括振铃效应,即在信号突变处出现振荡。

建议按提示在不同声音上尝试以获得更准确感受。

© 版权声明

相关文章

暂无评论

none
暂无评论...