FIR滤波器小试牛刀

C4.求解FIR滤波器

介绍

有限冲击响应FIR滤波器属于线性时不变系统,最大的特点是频率响应具备线性相位,为此FIR滤波器在信号滤波中得到广泛应用。其中,FIR滤波器的单位脉冲响应具备以下条件:
$$
h(n)=0, \quad n<0, n \geq N
$$
当系统输出为x(n) 时,系统输出为:

$$
y(n)=\sum_{m=0}^{N-1} h(m) x(n-m)
$$
为此,使用matlab中的conv卷积函数就可以求解FIR滤波器的输出。

matlab程序

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
clear;
close all;
% x = sin(2*pi*0.4*(0:127)/10);
% figure;plot(0:127,x);xlim([0 127]);grid on;
% xlabel('n','fontsize',14);ylabel('x(n)','fontsize',14);title('系统输入信号x(n)','fontsize',14);
% h(1:10)=(1:10);h(11)=11;h(12:21)=(10:-1:1);%产生系统单位脉冲序列
% figure;plot(0:20,h);ylim([0 11]);grid on;xlabel('n');ylabel('h(n)');title('系统单位脉冲响应h(n)');
%
% hf = freqz(h,1,1024);%求系统频率响应
% xf = freqz(x,1,1024);%求输入信号频谱
% figure;subplot(2,1,1);
% plot((0:1023)*10/2048,20*log10( abs(hf)/max(abs(hf)) ));grid on;xlabel('kHz');ylabel('系统频率响应');title('系统频率响应');
% subplot(2,1,2);
% plot((0:1023)*10/2048, 20*log10(abs(xf)/max(abs(xf))) );grid on;xlabel('kHz');ylabel('输入信号频谱');title('输入信号频谱');
%
% y=conv(h,x);%
% figure;plot(0:147,y);grid on;xlim([0 147]);xlabel('n');ylabel('y(n)');title('系统输出');

%---程序2:输入为两个正弦信号,其中一个信号在系统阻带 %
x = sin(2*pi*0.3*(0:127)/10) + sin(2*pi*2.4*(0:127)/10);%产生两个正弦信号
figure;plot(0:127,x);xlim([0 127]);grid on;xlabel('n');ylabel('系统输入信号x(n)');title('系统输入信号x(n)');

h(1:20)=(1:20);h(21)=21;h(22:41)=(20:-1:1);
figure;plot(0:40,h);ylim([0 21]);grid on;xlabel('n');ylabel('h(n)');title('系统单位脉冲响应h(n)');

hf = freqz(h,1,1024);%系统频率响应
xf = freqz(x,1,1024);%求输入信号频谱
figure;subplot(2,1,1);
plot((0:1023)*10/2048,20*log10( abs(hf)/max(abs(hf)) ));grid on;xlabel('kHz');ylabel('系统频率响应');title('系统频率响应');
subplot(2,1,2);
plot((0:1023)*10/2048, 20*log10(abs(xf)/max(abs(xf))) );grid on;xlabel('kHz');ylabel('输入信号频谱');title('输入信号频谱');

y = conv(h,x);
figure;plot(0:167,y);grid on;xlim([0 167]);xlabel('n');ylabel('y(n)');title('系统输出');

运行截图

分析

C7.相关函数在噪声中检测信号的应用

介绍

首先产生一路高斯白噪声(均值为0,方差为1),再在单载波信号上叠加上噪声,然后求被噪声污染后的自相关函数。

程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
xn=randn(1,200);%产生高斯白噪声
rnn=xcorr(xn,xn);
figure;subplot(2,1,1);plot(0:199,xn);grid on;
title('噪声的时域图');ylabel('N(n)');xlabel('n');
subplot(2,1,2);plot(0:199,rnn(200:399)/200);grid on;
title('噪声的自相关函数图');ylabel('rn(m)');xlabel('m');

SNR=-3;%信噪比
A=sqrt(2*10^(SNR/10));%根据信噪比计算信号幅度
x1=A*sin(pi*0.165*(0:199));%产生单载波信号
x=x1+randn(1,200);
y=xcorr(x,x);%求x的自相关函数,2N-1
y=y/200;%自相关函数幅度求平均
figure;subplot(3,1,1);plot(0:199,x1);grid on;
title('信号的时域图');ylabel('s(n)');xlabel('n');
subplot(3,1,2);plot(0:199,x);grid on;title('信号加噪声时域图');ylabel('x(n)');xlabel('n');
subplot(3,1,3);plot(0:99,y(200:299));grid on;title('信号加噪声 相关函数图');ylabel('r(m)');xlabel('m');

运行截图

分析

高斯白噪声的自相关函数只在m=0处有值(等于噪声功率),其余m值处近似为零,因此对被污染的信号求其自相关函数即可检测出原信号。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!