Matlab用巴特沃斯带通滤波器产生窄带高斯噪声并进行时域频域分析

通信原理大作业中的一部分,使用matlab仿真:

产生信道高斯白噪声,设计信道带通滤波器对高斯白噪声进行滤波,得到窄带高斯噪声。对信道带通滤波器的输入输出的噪声的时域、频域特性进行统计和分析,画出其时域和频域的图形。

高斯白噪声产生

首先确定采样频率和总时长,以此确定总采样点数和时间向量:

fs=1000;%采样频率hz
T_N=1;%总时间s
t=1/fs:1/fs:T_N;%时间向量
L=T_N*fs;%样本数量

然后用wgn产生高斯噪声:

z=wgn(L,1,power);

当然,也可以用原始的产生正态随机数的方法:

z=sigma.*randn(L,1)

注意power的单位是dbW,转换公式如下:
p ( d B w ) = 10 log ⁡ P ( W ) p (dBw) = 10\log P (W) p(dBw)=10logP(W)
如果功率P为1w,折算为dBw后为0dBw。
另外高斯白噪声的方差是噪声功率:
P = σ 2 P=\sigma^2 P=σ2
下面到了关键的环节,快速(离散)傅里叶变换fft:

fft_z=fft(z);

对噪声z从时域转换为频域,注意到如果要获得单边频谱,还需要做以下操作:

P = abs(fft_z/L);%取幅频特性,除以L
P = P(1:L/2+1);%截取前半段
P(2:end-1)=2*P(2:end-1);%单侧频谱非直流分量记得乘以2
f = fs*(0:(L/2))/L;%频率,最多到一半(奈奎斯特采样定理)

fft的结果是关于采样频率的一半对称的,幅度需要除以采样点个数L。从双边谱到单边谱需要对非直流分量乘以2。注意到由于奈奎斯特采样定理,原信号的最大频率不会超过采样频率的一半。假如我们设置采样频率为1000Hz,那么频域的最大频率也就是500Hz。
这些操作都是从mathwork官网上找到的,参考链接。不得不说matlab的帮助文档尤其是里面的示例真香!

高斯白噪声的时域和频域图如下:
Matlab用巴特沃斯带通滤波器产生窄带高斯噪声并进行时域频域分析_第1张图片
白噪声白噪声,就是频谱上也是到处都是高斯分布。

巴特沃斯滤波器

用butter函数获得8阶巴特沃斯滤波器系数,带通范围100-200Hz

[b,a]=butter(8,[100/(fs/2),200/(fs/2) ]);

第一个参数是滤波器阶数,第二个参数是归一化的带通频率,注意到fs/2是信号的最大频率。
用下面这个函数可以画出滤波器特性曲线:

freqs(b,a)

Matlab用巴特沃斯带通滤波器产生窄带高斯噪声并进行时域频域分析_第2张图片
(我其实看不懂)

滤波

用flutter函数快乐的滤波~

lvbo_z=filter(b,a,z);

应该是对原时域信号z滤波,我原先这里对fft后的信号滤波了,结果怎么都不对,debug了好久。
滤波后的信号lvbo_z也是个时域信号,用上述相同的办法fft后画单边频谱,可以得到窄带高斯噪声:
Matlab用巴特沃斯带通滤波器产生窄带高斯噪声并进行时域频域分析_第3张图片
可以明显发现滤波后的信号时域上看起来更奇怪了,频域上看,是把100-200Hz频率分量保留,其余频率分量滤除了。
做个对比,带通范围调到300-400Hz:Matlab用巴特沃斯带通滤波器产生窄带高斯噪声并进行时域频域分析_第4张图片
频率更高了,波形看起来更密了。


刚刚学了怎么做动图,这就做了个放个对比图在这里:
Matlab用巴特沃斯带通滤波器产生窄带高斯噪声并进行时域频域分析_第5张图片
好家伙,制作动图都要花钱,不花钱就给你贴水印,这一点也不开源。


全部代码:

fs=1000;%采样频率hz
T_N=1;%总时间s
t=1/fs:1/fs:T_N;%时间向量
L=T_N*fs;%样本数量
power=3;%噪声功率,单位为dbw
z=wgn(L,1,power);
subplot(2,1,1)
plot(t,z)
xlabel("时间/s")
ylabel("幅度/v")
title("高斯白噪声(时域)")

fft_z=fft(z);%快速傅里叶变换之后的噪声
P = abs(fft_z/L);%取幅频特性,除以L
P = P(1:L/2+1);%截取前半段
P(2:end-1)=2*P(2:end-1);%单侧频谱非直流分量记得乘以2
f = fs*(0:(L/2))/L;%频率,最多到一半(奈奎斯特采样定理)
subplot(2,1,2)
plot(f,P)
xlabel("频率/Hz")
ylabel("幅度/v")
title("高斯白噪声(频域)")

[b,a]=butter(8,[300/(fs/2),400/(fs/2) ]);%获得8阶巴特沃斯滤波器系数,100-200Hz
figure(2)
freqs(b,a)%画滤波器特性曲线
lvbo_z=filter(b,a,z);%滤波

figure(3)
subplot(2,1,1)
plot((lvbo_z))
xlabel("时间/Hz")
ylabel("幅度/v")
title("窄带高斯噪声(时域)")

fft_lvbo_z=fft(lvbo_z);%傅里叶变换
P = abs(fft_lvbo_z/L);%取幅频特性,除以L
P = P(1:L/2+1);%截取前半段
P(2:end-1)=2*P(2:end-1);%单侧频谱非直流分量记得乘以2
subplot(2,1,2)
plot(f,P)
xlabel("频率/Hz")
ylabel("幅度/v")
title("窄带高斯噪声(频域)")

书上的知识,尤其是技术上的,网络上还真是难找啊。


谢邀,通信原理80,班里倒数。

你可能感兴趣的:(matlab,信号处理,信号处理,matlab)