微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果 x[n] = sin(0.3πn) + 2 cos(0.4πn)如何生成 x[n] 的 500 个样本并绘制它们?

如何解决如果 x[n] = sin(0.3πn) + 2 cos(0.4πn)如何生成 x[n] 的 500 个样本并绘制它们?

我在 MATLAB 中使用下面的代码设计了一个 Parks-Mcclellan 滤波器----

我想创建上面提到的信号 (x(n)),然后通过这个过滤器检查输出。但我不确定如何生成信号,然后如何通过 matlab 中的滤波器。

    clc; clear all; close all;

    wp =0.36;
    ws =0.4;
    Rp =0.1;
    As = 40;
    delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1);
    delta2 = (1+delta1)*10^(-As/20);

    f = [wp ws];
    m =[1 0];
    DEV =[delta1 delta2];
    [M F0 A0 W0]=firpmord(f,m,DEV);
    h = firpm(M,F0,A0,W0);
    [H,W]= freqz(h,1);
    plot(W/pi,20*log10(abs(H)))
    grid minor

解决方法

信号处理工具箱和filter()函数

要声明信号,x[n] 可以根据 n 创建一个向量,范围从 0499。在 x[n] .* 等式中使用逐元素乘法将允许您评估 n 的每个点/值的函数。


如果您安装了信号处理工具箱,则可以选择使用 filter() 函数。 filter() 函数允许您传递滤波器系数 h 和您希望过滤掉的信号。此函数返回此示例中声明为变量 y 的过滤信号。下图显示了原始信号与过滤掉的信号:

Filtered Signal Plot

clc; clear; close all;

wp = 0.36;
ws = 0.4;
Rp = 0.1;
As = 40;
delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta2 = (1+delta1)*10^(-As/20);

f = [wp ws];
m =[1 0];
DEV =[delta1 delta2];
[M,F0,A0,W0]=firpmord(f,m,DEV);
h = firpm(M,W0);
[H,W]= freqz(h,1);
plot(W/pi,20*log10(abs(H)));
grid minor

n = (0: 499);
x = sin(0.3*pi.*n) + 2*cos(0.4*pi.*n);
y = filter(h,1,x);

subplot(2,1); plot(x);
title("Original Signal");
xlabel("Sample Index [n]"); ylabel("Amplitude");

subplot(2,2); plot(y);
title("Filtered Signal");
xlabel("Sample Index [n]"); ylabel("Amplitude");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。