一、实验目的

1.将一个信号从某一给定的采样率转换到另一不同采样率,即采样率转换。

2.对信号进行滤波。

3.有一个模拟频率为img的正弦原始信号,和一个模拟频率为img的正弦干扰信号,两个信号在时域上的混合信号为img。现以采样率img对混合信号进行采样,得到

imgimg

设计一个滤波器,提取出频率为img的正弦信号。要求对img的正弦信号具有不低于img的抑制。将img通过该滤波器获得输出img

使用MATLAB自带的播放器进行播放,听听imgimg的声音。

统计滤波信号img(考虑延迟)与原始信号img的误差。

计算滤波器的长度M,绘制滤波器的幅频和相频响应(freqz函数)。

在一张图上,绘制原始信号和滤波信号的时域波形。

绘制原始信号与滤波信号的时域波形差。

在一张图上,绘制原始信号、混合信号和滤波信号的频谱图;分析在滤波信号中,对干扰信号的抑制是否不低于img

将正弦干扰信号的频率分别调整为imgimg,重复上述过程,并分析滤波器长度的变化规律。

二、实验原理

滤波器设计与实现是数字信号处理中最基本的内容之一。滤波器分IIR滤波器(无限冲激响应滤波器)和FIR滤波器(有限冲激响应滤波器)两种。

FIR滤波器的设计方法以直接逼近所需离散设计系统的频率响应为基础。FIR滤波器可以很容易地获得线性相移特性,不存在不稳定的问题,是实际系统中广为采用的一种数字滤波器。FIR滤波器的设计,通常有窗函数设计法、频率抽样设计法和最佳逼近设计法。窗函数设计法比较简单,它的频率特性是理想滤波器频谱与窗的频谱的卷积,因而,其频率特性取决于窗的类型和长度。频率抽样设计法比较直观,但由于频域的采样会造成时域的混叠,从而滤波器叠性能不可能很高,为提高滤波器的性能,可以在过渡带加上0~1之间的过渡点。

三、实验条件

1.使用MATLAB及其函数进行实验

四、实验步骤

1.分析问题

2.MATLAB运行

3.分析实验结果

五、实验代码

主代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
clc
clear all%清屏
f0 = 3500;
f1 = 3800;
fs = 8125;
t = [0:1/fs:7999/fs];
t1 = [0:1/(16*fs):7999/fs];
x = cos(2*pi*f0*t) + cos(2*pi*f1*t);
x1 = cos(2*pi*f0*t);

Hd = fir; %调用滤波器:Kaiser窗滤波器
yn = filter(Hd,x); %yn为对xn的滤波结果
b = Hd.Numerator;
xdraw = cos(2*pi*f0*t1);
ydraw = filter(Hd,xdraw);

% sound(xn,fs); %x_n声音
% sound(yn,fs); %yn声音

tdelay = [2/fs:1/fs:8001/fs];%考虑延迟
xd = cos(2*pi*f0*tdelay);
sum = 0;
for i=1:8000
sum = sum + power((yn(i)-xd(i)),2);
end
sum = sum / 8000

figure(1);%幅频响应
[h1,w1]=freqz(b,1,'whole');
plot(w1/pi*4000,20*log10(abs(h1)));
axis([0,4000,-80,10]);
grid;
xlabel('频率') ;
ylabel('幅度/dB') ;

figure(2);%相频响应
grid;
xlabel('频率') ;
ylabel('角度') ;
plot(w1(1:256)/pi*4000,angle(h1(1:256))*180/2/pi);

figure(3)
subplot(3,1,1)
plot(t1(1:1000),x1(1:1000))
title('原始信号')
hold on
subplot(3,1,2)
plot(t1(1:1000),yn(1:1000))
title('滤波信号')
hold on
subplot(3,1,3)
plot(t1(1:1000),x1(1:1000)-yn(1:1000))
title('原始信号与滤波信号的时域波形差')
hold on

Xw = fft(x); % 混合信号
Yw = fft(yn); % 滤波信号
X1w = fft(x1); % 原始信号

figure(4)
subplot(3,1,1)
plot(t,20*log10(abs(Xw)))
title('混合信号')
hold on
subplot(3,1,2)
plot(t,20*log10(abs(Yw)))
title('滤波信号')
hold on
subplot(3,1,3)
plot(t,20*log10(abs(X1w)))
title('原始信号')
hold on

figure(5)
plot(t,20*log10(abs(Xw)))
hold on
plot(t,20*log10(abs(Yw)))
hold on
plot(t,20*log10(abs(X1w)))
hold on
legend('混合信号','滤波信号','原始信号')

fir函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function Hd = fir
%FIR 返回离散时间滤波器对象。

% MATLAB Code
% Generated by MATLAB(R) 9.8 and Signal Processing Toolbox 8.4.
% Generated on: 20-Dec-2020 13:43:19

% FIR Window Lowpass filter designed using the FIR1 function.

% All frequency values are in Hz.
Fs = 8125; % Sampling Frequency

Fpass = 3500; % Passband Frequency
Fstop = 3800; % Stopband Frequency
Dpass = 0.057501127785; % Passband Ripple
Dstop = 0.001; % Stopband Attenuation
dens = 20; % Density Factor

% Calculate the order from the parameters using KAISERORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);

% Calculate the coefficients using the FIR1 function.
b = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);

% [EOF]

六、实验结果

1.设计的滤波器的幅频响应和相频响应符合要求。

2.滤波器对混合信号的处理效果很好。

3.通过滤波器的声音频率更高,与预期相符。

image-20211203221655954

image-20211203221709234

image-20211203221721659

image-20211203221745942

image-20211203221802597

七、结果分析

1.设计的低通滤波器,使3.5kHz的频率分量可以通过,而抑制3.8kHz的频率分量。