MATLAB编程与信号处理实践

1、定义一个4×3的矩阵,除第一行元素为1外,其余元素均为0。

b = ones (1,3); m = zeros (4,3); m(1,:) = b

2、考虑向量对 (x1, y1) 和 (x2, y2)。定义向量 x,使得:当 y1(j) < y2(j) 时,x(j) = 0;当 y1(j) = y2(j) 时,x(j) = x1(j);当 y1(j) > y2(j) 时,x(j) = x2(j)。请编写 MATLAB 代码实现该功能。

可以使用 MATLAB 代码来实现该功能,以下是实现代码:

% 假设 x1, y1, x2, y2 已经定义
x = zeros(size(y1)); % 初始化 x 为全零向量,长度与 y1 相同

idx_equal = y1 == y2;  % 找到 y1 等于 y2 的索引
idx_greater = y1 > y2; % 找到 y1 大于 y2 的索引

x(idx_equal) = x1(idx_equal);   % 在 y1 等于 y2 的位置,将 x1 对应位置的值赋给 x
x(idx_greater) = x2(idx_greater); % 在 y1 大于 y2 的位置,将 x2 对应位置的值赋给 x

3、生成并绘制信号:对于 0 ≤ t ≤ 2,以 0.01 为增量,y(t) = sin(2πt),然后使用 decimate 函数分别以 2 和 16 为下采样因子对其进行下采样。

t = 0:0.01:2;
y = sin(2*pi*t);
subplot(311);
plot(t,y);
ylabel('sin(2*pi*t)');
title('Original signal');

t2 = decimate(t,2);
t16 = decimate(t2,8);
y2 = decimate(y,2);
y16 = decimate(y2,8);

subplot(312);
plot(t2,y2);
ylabel('sin(2*pi*t)');
title('Undersampled signal with a factor 2');

subplot(313);
plot(t16,y16);
ylabel('sin(2*pi*t)');
xlabel('Time t');
title('Undersampled signal with a factor 16');

print -eps file_name

4、在极坐标中绘制具有以下传递函数的滤波器的极点:$H(z)=\frac{1}{1 + az^{-1}+bz^{-2}}$,其中$a$和$b$的值由用户输入,函数返回极点。(使用 roots polar 命令)

以下是实现该功能的 MATLAB 代码:

function c = filter_bis(a,b)
    c = roots([1 a b]);
    fprintf('The poles are:\n');
    z1 = c(1,:);
    z2 = c(2,:);
    if (abs(z1) > 1 | abs(z2) > 1)
        fprintf('There is at least an instable pole\n');
    else
        clf;
        figure;
        polar(angle(z1), abs(z1), 'r+');
        hold on;
        polar(angle(z2), abs(z2), 'r+');
        legend('Polar plot of H(z) poles', 0);
    end
end

5、生成信号:x(t) = A⋅sin(2πft + φ) + b(t),其中 t 取值范围是 0 到 1024,φ 是在[0, 2π]上均匀分布的随机变量,b(t) 是均值为零、方差为 1 的高斯白噪声(使用 rand 和 randn 函数)。A 和 f 由用户选择。使用周期图法和相关图法(使用 fft 和 fftshift 函数)估计 x(t) 的均值、自相关函数(xcorr)和频谱。将得到的结果与理论结果进行比较。通过改变 A 来控制信噪比。

以下是实现该功能的 MATLAB 代码:

function noisy_sin(A,f)
    N = 1024; % 计算频率的数量
    nech = 1024; % 样本数量
    t = 0:nech;
    b = randn(1,nech+1);
    phi = 2*pi*rand(1);
    x = A*sin(2*pi*f*t+phi)+b;
    fprintf('Mean of x(t) = %2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值