• 大小: 2KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Matlab
  • 标签:

资源简介

在设计升余弦滤波器的时候我们习惯直接调用matlab中的rcosfir函数得到滤波器的冲击响应,那么如何自己来设计这样的滤波器呢而不调用已有的rcosfir函数?程序中给出了如何设计这样滤波器的方法。对于其他的已知频率响应函数,要求去求滤波器的冲击响应的方法和程序中给出的设计升余弦滤波器的方法是完全一样的,其主要思想既是利用频率采样法来设计,并且满足线性相位。

资源截图

代码片段和文件信息

clc
clear
Ts=1/2e6;
erfa=0.5;
fs=8e6;
N=129

%%%%所有的相角%%%%
k1=0:64;
sitak1=-2*pi/N*k1*((N-1)/2);
k2=65:128;
sitak2=2*pi/N*(N-k2)*((N-1)/2);
sita=[sitak1 sitak2];

% k1=0:64;
% sitak1=-2*pi/N*k1*24;
% k2=65:128;
% sitak2=2*pi/N*(N-k2)*24;
% sita=[sitak1 sitak2];     %%随便给一个相位结果是不正确的


subplot(231);
stem(sita);
title(‘(a)设计的滤波器相位-(N-1)/2*w‘);
grid on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%所有的幅值%%%%%%%%%%%%%%
H1_abs=[1 1 1 1 1 1 1 1 1 ];
n=[9:24];
w2=2*pi*n*fs/(N-1);
H2_abs=1/2*(1+sin(Ts/2/erfa*(pi/Ts-w2)));
nn=64-25+1;
H3_abs=zeros(1nn);
Hb_abs=[ H1_abs H2_abs H3_abs];

% n=66:128
% H_after_half_abs=Hb_abs(129-n);
for n=1:64
    H_after_half(n)=Hb_abs(66-n);    %%之前是这里出现了问题,应该在中间点对称,但不能考虑0点处的值
end

H_abs=[Hb_abs  H_after_half]

subplot(234);
stem(H_abs);
title(‘(b)设计的滤波器幅度‘);
grid on
%%%构造hk%%%%%
Hdk=H_abs.*exp(j*sita);
phase_hk=atan(imag(Hdk)./real(Hdk));
subplot(232)
stem(phase_hk);
title(‘(c)用atan函数计算设计的滤波器的相位‘);
grid on

评论

共有 条评论