通信原理大作业中的一部分,使用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的帮助文档尤其是里面的示例真香!
高斯白噪声的时域和频域图如下:
白噪声白噪声,就是频谱上也是到处都是高斯分布。
用butter函数获得8阶巴特沃斯滤波器系数,带通范围100-200Hz
[b,a]=butter(8,[100/(fs/2),200/(fs/2) ]);
第一个参数是滤波器阶数,第二个参数是归一化的带通频率,注意到fs/2是信号的最大频率。
用下面这个函数可以画出滤波器特性曲线:
freqs(b,a)
用flutter函数快乐的滤波~
lvbo_z=filter(b,a,z);
应该是对原时域信号z滤波,我原先这里对fft后的信号滤波了,结果怎么都不对,debug了好久。
滤波后的信号lvbo_z也是个时域信号,用上述相同的办法fft后画单边频谱,可以得到窄带高斯噪声:
可以明显发现滤波后的信号时域上看起来更奇怪了,频域上看,是把100-200Hz频率分量保留,其余频率分量滤除了。
做个对比,带通范围调到300-400Hz:
频率更高了,波形看起来更密了。
刚刚学了怎么做动图,这就做了个放个对比图在这里:
好家伙,制作动图都要花钱,不花钱就给你贴水印,这一点也不开源。
全部代码:
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,班里倒数。