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;
}
48、1. 使用函数randn生成1000个零均值、方差为4的独立随机高斯变量值x1, …, x1000。绘制相应的直方图,并使用函数hist、mean和std计算生成序列的均值和标准差。找出随机序列x21, …, x21000的均值和标准差。然后将所得结果与理论结果进行比较。2. 使用函数rand生成1000个由以下定义的随机变量X的独立值:P(X = -1)=p0,P(X = 0)=p1,P(X = 1)=1 – p0 – p1,其中p0和p1是需要用户输入的概率。
对于第一问,在MATLAB中可按如下操作:
x = randn(1, 1000) * 2; % 生成零均值、方差为4的高斯变量值
hist(x); % 绘制直方图
m = mean(x); % 计算均值
s = std(x); % 计算标准差
对于x21到x21000,可截取相应部分再计算均值和标准差,理论上均值为0,标准差为2,将计算结果与之比较。
对于第二问,可使用函数
va_gen
,调用方式如:
va_gen(1000, p0, p1)
其中
p0
和
p1
为用户输入的概率。
49、生成并绘制以下信号:当n取值在 -3 到 3 时,x1[n]=4,其他情况 x1[n]=0;当n取值在 -3 到 3 时,x2[n]=n,其他情况 x2[n]=0。验证信号 x1[n] 的离散时间傅里叶变换(DTFT)的虚部为零;对信号 x2[n] 的 DTFT 的实部做同样的验证。
可使用MATLAB代码实现信号生成、绘制及DTFT验证。以下是示例代码:
% 生成信号 x1[n]
n1 = -3:3;
x1 = 4 * ones(size(n1));
x1_full = zeros(1, 100); % 扩展到更大范围便于绘制
index1 = 48 + n1 + 1; % 调整索引
x1_full(index1) = x1;
% 生成信号 x2[n]
x2 = n1;
x2_full = zeros(1, 100); % 扩展到更大范围便于绘制
index2 = 48 + n1 + 1; % 调整索引
x2_full(index2) = x2;
% 绘制信号
figure;
subplot(2,1,1);
stem(-49:50, x1_full);
title('Signal x1[n]');
xlabel('n');
ylabel('x1[n]');
subplot(2,1,2);
stem(-49:50, x2_full);
title('Signal x2[n]');
xlabel('n');
ylabel('x2[n]');
% 计算 DTFT
N = 1024; % 采样点数
w = linspace(-pi, pi, N); % 频率范围
X1 = zeros(1, N);
X2 = zeros(1, N);
for k = 1:N
X1(k) = sum(x1 .* exp(-1i * w(k) * n1));
X2(k) = sum(x2 .* exp(-1i * w(k) * n1));
end
% 验证虚部和实部
figure;
subplot(2,1,1);
plot(w, imag(X1));
title('Imaginary part of DTFT of x1[n]');
xlabel('Frequency (rad/sample)');
ylabel('Imaginary part');
subplot(2,1,2);
plot(w, real(X2));
title('Real part of DTFT of x2[n]');
xlabel('Frequency (rad/sample)');
ylabel('Real part');
50、生成一个均值为3、方差为3的1092点白高斯随机过程。绘制其自相关函数和功率谱密度。去除该随机过程的均值后对其进行滤波。使用一个在0处有零点、在0.95处有实单极点的无限脉冲响应(IIR)滤波器。绘制滤波后信号的自相关函数和功率谱密度。这两个信号将被视为二阶遍历的。对所得结果进行评论,并总结信号可预测性与自相关函数形状之间的联系。
原答案给出的代码未完成全部任务,代码如下:
rho = 0.95;
var = 3;
meanval = 0;
b = [1];
a = [1 -rho];
y = filter(b, a, (sqrt(var) * (randn(1, 1092)))) + meanval;
subplot(221);
plot(y);
axis([0 1091 -20 20])
xlabel('time [s]');
ylabel('amplitude (V)');
title('filtered signal');
corre = xcorr(y, 'unbiased');
subplot(223);
若要完成全部任务,还需补充绘制自相关函数、功率谱密度的代码,以及对结果的评论和关于信号可预测性与自相关函数形状联系的总结。
51、模拟一个二阶数字带通滤波器,其中心频率为2kHz,频率带宽为1kHz。考虑采样频率为10kHz,输入信号为零均值、方差为1的白高斯噪声。然后定义一组六阶巴特沃斯滤波器,其频率带宽为200Hz,用于测量每个频带中滤波后信号的功率。最后,绘制功率随频率的变化曲线。
以下是解决此问题的大致步骤:
设计二阶数字带通滤波器
:根据中心频率 2kHz、频率带宽 1kHz 和采样频率 10kHz,使用合适的方法(如双线性变换法)设计滤波器。
生成输入信号
:生成零均值、方差为 1 的白高斯噪声作为输入信号。
对输入信号进行滤波
:将输入信号通过二阶数字带通滤波器得到滤波后的信号。
定义六阶巴特沃斯滤波器组
:以 200Hz 为频率带宽定义一组六阶巴特沃斯滤波器。
测量每个频带的功率
:将滤波后的信号通过滤波器组,测量每个频带中信号的功率。
绘制功率随频率的变化曲线
:以频率为横轴,功率为纵轴绘制曲线。
在 MATLAB 中可以使用相关函数实现上述步骤,例如:
butter
函数设计滤波器
filter
函数进行滤波
var
函数计算方差(可用于计算功率)
plot
或
semilogy
函数绘制曲线
52、为了控制工厂生产的均匀性,随机抽取了1000个制造机械零件的样本。每个零件测量的尺寸X记录在以下表格中:X [cm]:3.3、3.4、3.5、3.6、3.7、3.8、3.9、4、4.1;样本数量:2、1、2、4、10、22、60、148、235;X [cm]:4.2、4.3、4.4、4.5、4.6、4.7、4.8;样本数量:207、160、92、41、11、2、3。问题是判断X的分布是否可视为高斯分布。1. 计算经验均值、方差和标准差。2. 绘制直方图并得出结论。3. 对于高斯变量,取值在均值加减2倍标准差范围内的概率是多少?4. 计算4 ≤ X ≤ 4.2的概率并得出结论。5. 使用一到两种统计检验方法验证你的结论。
可按以下通用步骤解答:
计算均值与标准差
– 经验均值通过各尺寸值与对应样本数乘积之和除以总样本数计算;
– 方差根据经验均值与各尺寸值差的平方加权平均计算;
– 标准差是方差的平方根。
绘制直方图
– 若形状接近钟形则可能是高斯分布。
高斯分布特性
– 高斯变量取值在均值加减2倍标准差范围内的概率约为95.44%。
计算特定区间概率
– 计算 $ 4 leq X leq 4.2 $ 的概率,将该范围内样本数除以总样本数;
– 若接近高斯分布对应区间概率,则支持高斯分布假设。
统计检验方法
– 可使用
亨利线检验
、
卡方检验
等统计方法验证结论。
53、接收器记录了以下数值:5.97、5.5、5.45、5.6、4.8、3.4、6.3、6.73、3.71、4.91、7.54、2.05、5.48、5.39、1.01、4.47、5.87、6.31、9.37、9.11、2.98、3.93、3.66、8.98、6.73、8.75、3.6、2.38、4.03、4.96。1. 将这些值按升序排序。2. 使用长度为 1 的区间对这些值进行分组:从 1 到 2,从 2 到 3 等。3. 确定每个区间对应的样本数量,并计算累积样本数量、出现频率和累积出现频率。4. 绘制直方图并找出中位数。5. 使用计算表找出平均值和标准差。6. 考虑以下假设 H0:“接收到的信号 s(t)=m + n(t),其中 m 是一个常数值,n(t) 是高斯零均值噪声”。a. 估计 m 的值。b. 使用两种不同的方法检验假设 H0。
需手动完成以下步骤:
对给定数值按升序排序。
按 1 到 2、2 到 3 等区间分组。
确定各区间样本数、累积样本数、出现频率和累积出现频率。
绘制直方图,将排序后样本分为两等份确定中位数。
用计算表计算平均值和标准差。
a. 可通过样本均值估计 m 的值;
b. 可使用亨利线检验和卡方检验等方法检验假设 H₀。
54、根据中心极限定理,移动平均有限长单位冲激响应(MA FIR)滤波器的输出信号趋于高斯分布。使用rand函数生成一个在[-2, 2]上均匀分布的白随机信号。设Y是具有传递函数H(z)的n阶FIR滤波器的输出信号。对于不同的n值:1. 比较信号X和Y。2. 绘制这两个信号的直方图。3. 在同一图中绘制X和Y的概率密度曲线。4. 计算X和Y的三阶和四阶累积量。对递归无限长单位冲激响应(RII)滤波器重复相同的练习并得出结论。
需要按要求编写代码实现相关操作并得出结论。一般步骤为:
1. 生成均匀分布白随机信号
2. 构建不同阶数的FIR和IIR滤波器
3. 得到输出信号Y
4. 进行信号比较
5. 绘制直方图和概率密度曲线
6. 计算累积量等操作
最后根据结果得出关于信号分布特性等方面的结论。
55、编写一个MATLAB代码,使用数字信号:若n为1到8,x[n]=n;若n为9到16,x[n]=0,来展示以下离散傅里叶变换(DFT)特性:时间延迟、频率移位、调制和时间反转。
完整解决该问题的代码如下:
% 定义数字信号 x[n]
x = [1:8, zeros(1, 8)];
N = length(x);
% 时间延迟特性
D = 5; % 延迟点数
x_delay = [zeros(1, D), x(1:end - D)];
X = fft(x);
X_delay = fft(x_delay);
% 频率移位特性
m = 3; % 移位点数
X_shift = [X(N - m + 1:end), X(1:N - m)];
x_shift = ifft(X_shift);
% 调制特性
wo = 0.2 * pi; % 调制频率
n = 0:N - 1;
x_mod = x .* exp(1i * wo * n);
X_mod = fft(x_mod);
% 时间反转特性
x_inv = fliplr(x);
X_inv = fft(x_inv);
% 绘图
figure;
subplot(5, 1, 1);
stem(1:N, x);
title('Original Signal');
subplot(5, 1, 2);
stem(1:N, x_delay);
title('Time - Delayed Signal');
subplot(5, 1, 3);
stem(1:N, real(x_shift));
title('Frequency - Shifted Signal');
subplot(5, 1, 4);
stem(1:N, real(x_mod));
title('Modulated Signal');
subplot(5, 1, 5);
stem(1:N, x_inv);
title('Time - Inverted Signal');
上述代码定义了数字信号
x[n]
,并分别实现了时间延迟、频率移位、调制和时间反转特性,最后将各特性处理后的信号进行绘图展示。
56、考虑以下两个数字信号:[x] = [0, 0.25, 0.5, 0.75, 1] 和 [h] = [0, 0.5, 1, 0.5, 0]。计算它们的离散傅里叶变换(DFT)的乘积,然后通过逆离散傅里叶变换(IDFT)回到时域。将得到的结果与这两个信号的卷积积进行比较并得出结论。
通常需要使用MATLAB代码来计算DFT、乘积、IDFT和卷积积,再进行比较。示例代码如下:
x = [0, 0.25, 0.5, 0.75, 1];
h = [0, 0.5, 1, 0.5, 0];
X = fft(x);
H = fft(h);
Y = X .* H;
y_idft = ifft(Y);
y_conv = conv(x, h);
fprintf('IDFT结果:'); disp(y_idft);
fprintf('卷积结果:'); disp(y_conv);
此代码可计算出所需结果并输出,根据输出结果可进行比较和结论推导。
57、考虑以下数字滤波器的脉冲响应:h = [1, 2, 1]。a. 计算其z变换。b. 求传递函数H(z)的零点。c. 绘制z = e^(jω)时的函数H(z)。d. 在N = 16个点上计算函数H(e^(jω))。
a. 根据Z变换定义,可得
H(z)=1+2z−1+z−2H(z)=1+2z−1+z−2
b. 使用代码
h = [1, 2, 1];
r = roots(h);
得到传递函数的零点为
r = -1 + 0i, -1 - 0i
c. 使用代码
[H, w] = freqz(h, 1);
figure;
plot(w/(2*pi), abs(H));
xlabel('Normalized frequency');
ylabel('Amplitude');
绘制图形。
d. 可使用代码
[H, w] = freqz(h, 1, 16);
计算16个点的值。
58、考虑以下数字信号:当n在 -8到 -1时,x[n]=0.5;当n = 0时,x[n]=1;其他情况x[n]=0。当n在0到8时,y[n]=1;当n在1到8时,y[n]=0.5;其他情况y[n]=0。通过解析方法证明信号x[n]和y[n]的一维离散傅里叶变换(DFT1D)的实部相等,并使用MATLAB代码验证这一性质。
要证明 $ x[n] $ 和 $ y[n] $ 的 DFT1D 实部相等,可先根据 DFT1D 定义公式
X[k]=∑n=0N−1x[n]WknNX[k]=∑n=0N−1x[n]WNkn
(其中 $ W_N = e^{-j cdot frac{2pi}{N}} $)分别计算 $ x[n] $ 和 $ y[n] $ 的 DFT,再取实部进行比较。
MATLAB 代码可按以下思路编写:定义信号 $ x[n] $ 和 $ y[n] $,使用
fft
函数计算它们的 DFT,取实部并比较。
示例代码如下:
% 定义信号长度
N = 17;
% 定义信号x[n]
x = zeros(1, N);
x(1:8) = 0.5;
x(9) = 1;
% 定义信号y[n]
y = zeros(1, N);
y(9:17) = 0.5;
y(9) = 1;
% 计算DFT
X = fft(x);
Y = fft(y);
% 取实部
real_X = real(X);
real_Y = real(Y);
% 验证实部是否相等
is_equal = isequal(real_X, real_Y);
if is_equal
disp('信号x[n]和y[n]的DFT1D实部相等');
else
disp('信号x[n]和y[n]的DFT1D实部不相等');
end
59、使用MATLAB代码验证以下数字信号的帕塞瓦尔定理:$sum_{n = 0}^{N – 1}|x[n]|^2 = frac{1}{N}sum_{k = 0}^{N – 1}|X[k]|^2$,其中信号$x[n] =
{n,n=0⋯7 0,其他{n,n=0⋯7 0,其他$
代码思路如下:首先定义信号 $ x[n] $,计算其平方和;然后对信号进行离散傅里叶变换得到 $ X[k] $,计算其平方和并除以 $ N $;最后比较两个结果验证定理。
以下是示例代码:
% 定义信号x[n]
n = 0:7;
x = n;
% 计算信号x[n]的平方和
left_side = sum(abs(x).^2);
% 计算信号的离散傅里叶变换X[k]
X = fft(x);
N = length(x);
% 计算X[k]的平方和并除以N
right_side = sum(abs(X).^2)/N;
% 验证帕塞瓦尔定理
if abs(left_side - right_side) < 1e-10
disp('帕塞瓦尔定理验证通过');
else
disp('帕塞瓦尔定理验证失败');
end
60、考虑一个冲激响应为 h[n] = 0.9^n 的系统。绘制该系统在 1Hz 采样率下,n 取值范围为 0 到 50 时的冲激响应图。证明其时间常数等于 10。
绘制冲激响应的 MATLAB 代码为:
n = [0:50];
h = (0.9).^n;
stem(n, h);
grid;
xlabel('n');
ylabel('h(n)');
title('Impulse response');
对于指数衰减函数 $ h[n] = a^n $,时间常数 $ au $ 满足 $ a^ au = frac{1}{e} $,这里 $ a = 0.9 $。
令 $ 0.9^ au = frac{1}{e} $,两边取自然对数可得:
τ=ln(1e)ln(0.9)≈10τ=ln(1e)ln(0.9)≈10
证明其时间常数约等于 10。
61、确定以下差分方程对应的滤波器类型:1. y[n]= x[n]+ 0.5x[n – 1]+ 1.8cos[π/16]y[n – 1]- 0.81y[n – 2];2. y[n]= 0.634x[n]+ 0.634x[n – 1]- 0.268y[n – 1];3. y[n]= 0.16x[n]- 0.48x[n – 1]+ 0.48x[n – 2]- 0.16x[n – 3]+ 0.13y[n – 1]- 0.52y[n – 2]- 0.3y[n – 3];4. y[n]= 0.634x[n]- 0.634x[n – 1]- 0.268y[n – 1];5. y[n]= 0.1x[n]- 0.5x[n – 1]+ x[n – 2]+ 0.5y[n – 1]- 0.1y[n – 2]。所有情况的采样频率均为20 kHz。
需使用 MATLAB 代码(如频率响应分析代码)按照一定分析方法对每个差分方程进行分析,以确定对应的滤波器类型。
62、使用双线性方法设计一个满足以下规格的数字滤波器:采样频率为1Hz,直流分量衰减为0dB,在0.1Hz处最大衰减为1dB,在0.15Hz处最小衰减为15dB。分别考虑使用巴特沃斯和切比雪夫模型来设计滤波器的传递函数。
可按如下步骤实现:
首先定义参数:
采样频率
Fs = 1
最大通带衰减
atmax = 1
最小阻带衰减
atmin = 15
通带上边界频率
wp = 0.1*2*pi
阻带下边界频率
ws = 0.15*2*pi
滤波器类型
fil
可根据需求设为
0
(切比雪夫)或
1
(巴特沃斯)
代码如下:
matlab
Fs = 1;
atmax = 1;
atmin = 15;
wp = 0.1*2*pi;
ws = 0.15*2*pi;
fil = 0; % 或 fil = 1,根据滤波器类型
Ws = 2*tan(ws/2);
后续还需根据所选模型进一步完成滤波器设计。
63、编写一段MATLAB代码,以说明由二阶单元串联形成的滤波器系数量化的影响。
以下是一个通用思路的MATLAB代码示例,用于模拟二阶单元串联滤波器系数量化的影响:
% 定义二阶系统的系数
num1 = [0.3 -0.2 0.4];
den1 = [1 0.9 0.8];
num2 = [0.2 -0.5 0.3];
den2 = [1 0.7 0.85];
% 生成输入信号
n = 0:40;
x = randn(size(n));
% 未量化的输出计算
y1 = filter(num1, den1, x);
y2 = filter(num2, den2, y1);
% 量化系数
bits = 8; % 量化位数
num1_quant = round(num1 * (2^(bits - 1) - 1)) / (2^(bits - 1) - 1);
den1_quant = round(den1 * (2^(bits - 1) - 1)) / (2^(bits - 1) - 1);
num2_quant = round(num2 * (2^(bits - 1) - 1)) / (2^(bits - 1) - 1);
den2_quant = round(den2 * (2^(bits - 1) - 1)) / (2^(bits - 1) - 1);
% 量化后的输出计算
y1_quant = filter(num1_quant, den1_quant, x);
y2_quant = filter(num2_quant, den2_quant, y1_quant);
% 绘制结果
figure;
subplot(3,1,1);
stem(n, y2);
ylabel('Amplitude');
title('Output of the series connection of the two systems (unquantized)');
grid on;
subplot(3,1,2);
stem(n, y2_quant);
ylabel('Amplitude');
title('Output of the series connection of the two systems (quantized)');
grid on;
subplot(3,1,3);
error = y2 - y2_quant;
stem(n, error);
xlabel('Time index n');
ylabel('Amplitude');
title('Error signal');
grid on;
此代码首先定义了两个二阶系统的系数,生成一个随机输入信号,计算未量化的输出。然后对系数进行量化,计算量化后的输出。最后绘制未量化输出、量化输出和误差信号的图形,以展示系数量化的影响。
64、a. 计算采样频率为 10 kHz、截止频率为 3 kHz 的四阶数字 IIR 低通滤波器的系数。b. 绘制其频率响应的幅度和相位图。c. 绘制滤波器传递函数的极点和零点图。d. 绘制滤波器的脉冲响应图。e. 针对具有相同规格且最大通带波纹为 0.5 dB 的切比雪夫 I 型滤波器重复上述步骤,然后比较这两种滤波器。
可使用 MATLAB 中的相关函数(如
butter
、
cheby1
等)来完成计算和绘图任务。对于四阶 IIR 低通滤波器,可使用
butter
函数;对于切比雪夫 I 型滤波器,可使用
cheby1
函数。具体代码示例如下:
% 四阶 IIR 低通滤波器
fs = 10e3; % 采样频率
fc = 3e3; % 截止频率
Wn = 2*fc/fs; % 归一化截止频率
[b, a] = butter(4, Wn, 'low'); % 计算滤波器系数
% 绘制频率响应的幅度和相位图
[H, w] = freqz(b, a);
figure;
subplot(2,1,1);
plot(w/pi*fs/2, 20*log10(abs(H)));
title('幅度响应');
xlabel('频率 (Hz)');
ylabel('幅度 (dB)');
grid on;
subplot(2,1,2);
plot(w/pi*fs/2, angle(H));
title('相位响应');
xlabel('频率 (Hz)');
ylabel('相位 (rad)');
grid on;
% 绘制极点和零点图
figure;
zplane(b, a);
% 绘制滤波器的脉冲响应图
figure;
impz(b, a);
% 切比雪夫 I 型滤波器
Rp = 0.5; % 最大通带波纹
[b_cheby, a_cheby] = cheby1(4, Rp, Wn, 'low'); % 计算滤波器系数
% 重复上述绘图步骤
% 比较两种滤波器
% 可从幅度响应、相位响应、极点零点分布等方面进行比较