数字信号处理matlab训练第【1】弹

1.产生一个均匀分布的白噪声信号u(n),画出波形,并检验其分布

%使用rand函数产生均值为0.5,幅度在0-1之间的均匀分布的伪随机数
%以下将会调用rand函数产生一个均匀分布的白噪声信号
clear;
clc;
N=5000;%长序列u(n)的长度
u=rand(1,N);%产生N个均与分布的伪随机数u(n)
u_mean=mean(u)%求取u(n)的均值
u_power=var(u)%求取u(n)的方差
subplot(211);%两行一列第1个图
plot(u(1:100));%选取u(n)序列的前100个数据点
grid on;%显示方格
ylabel('u(n)');
xlabel('n')
title('1-100的u(n)数值显示')
%显示标题
subplot(212);%两行一列第2个图
hist(u,50);grid on;
%对u(n)作直方图,检验其分布。50是对u(n)的取值范围(0-1)所分解的细胞数
xlabel('u(n)');
ylabel('个数');
title('u(n)的直方图')
%显示标题

在上边的程序中我们可以看出,所求的白噪声 u ( n ) u(n) u(n)的长度特别大(N=5000),在实际中,我们可能不需要这么大,之所以取这么大是希望当u(n)序列足够长时更接近于白噪声接近于均匀分布。我们可以根据自己需要选取自己喜欢的任何一段即可。
其结果如下所示:
在这里插入图片描述
在上边的运行结果我们也可以得到该随机序列的均值(u_mean)和方差(u_power).

u_mean =

    0.5005

u_power =

    0.0836

我们可以看到,产生的u(n)的均值为0.5,方差为0.0836(1/12).

2.产生一均匀分布、均值为0、功率为0.01的白噪声信号

在上边的例子中我们使用rand函数产生的u(n)为均值为0.5,功率 P 1 = 1 12 P_1=\frac{1}{12} P1=121,现在需要将均值变为0、功率变为 P 2 = 1 100 P_2=\frac{1}{100} P2=1001。实现前者比较容易,只需将u(n)减去均值即可,而实现后者则需要调整u(n)的幅度。根据已知,我们可以得到以下公式:
P 2 P 1 = 1 100 1 12 = ∑ i = 0 N ( a 2 i ) 2 ∑ i = 0 N ( a 1 i ) 2 = 12 P 2 \frac{P_2}{P_1}=\frac{\frac{1}{100}}{\frac{1}{12}}=\frac{\sum_{i=0}^{N}(a_{2i})^2}{\sum_{i=0}^{N}(a_{1i})^2}=12P_2 P1P2=1211001=i=0N(a1i)2i=0N(a2i)2=12P2
由于我们要实现的就是对于幅度的调整,来实现改变其方差,所以我们令以下等式成立 a 2 i = a ⋅ a 1 i a_{2i}=a\cdot a_{1i} a2i=aa1i ,其中常数 a a a就是我们所要求的一个比例因子。
∑ i = 0 N ( a 2 i ) 2 ∑ i = 0 N ( a 1 i ) 2 = ∑ i = 0 N ( a ⋅ a 1 i ) 2 ∑ i = 0 N ( a 1 i ) 2 = ( a ⋅ a 10 ) 2 + ( a ⋅ a 11 ) 2 + . . . + ( a ⋅ a 1 N ) 2 a 10 2 + a 11 2 + . . . + a 1 N 2 = a 2 ⋅ ( a 10 2 + a 11 2 + . . . + a 1 N 2 ) a 10 2 + a 11 2 + . . . + a 1 N 2 = a 2 = 12 P 2 \frac{\sum_{i=0}^{N}(a_{2i})^2}{\sum_{i=0}^{N}(a_{1i})^2}=\frac{\sum_{i=0}^{N}(a\cdot a_{1i})^2}{\sum_{i=0}^{N}(a_{1i})^2}\\ \quad \\=\frac{(a\cdot a_{10})^2+(a\cdot a_{11})^2+...+(a\cdot a_{1N})^2}{a_{10}^2+a_{11}^2+...+a_{1N}^2}\\ \quad \\=\frac{a^2\cdot(a_{10}^2+a_{11}^2+...+a_{1N}^2)}{a_{10}^2+a_{11}^2+...+a_{1N}^2}=\quad a^2\quad=12P_2 i=0N(a1i)2i=0N(a2i)2=i=0N(a1i)2i=0N(aa1i)2=a102+a112+...+a1N2(aa10)2+(aa11)2+...+(aa1N)2=a102+a112+...+a1N2a2(a102+a112+...+a1N2)=a2=12P2
由上式的推导我们可以得出 a = 12 P 2 a=\sqrt{12P_2} a=12P2 ,其中 P 2 P_2 P2的数值我们已知。
根据上边的推导,我们在matlab中敲下代码如下:

%%产生一个均匀分布、均值为0、功率为0.01的白噪声信号u(n)
clc;
clear;
N=50000;
%长序列u(n)的长度
p_1=0.083;
p_2=0.01;
%转换前的功率和所需要的功率
u=rand(1,N);
%产生5000个0-1的伪随机数
u=u-mean(u);
%此处实现将均值置为0
a=sqrt(12*p_2)
%求取常数比例因子
u1=u*a;
%对序列的幅度进行调整
u1_power=var(u1)
%求取该序列的方差
plot(u1(1:100));
%选取u(n)序列的前100个数据点
grid on;
%显示网格
xlabel('n')
ylabel('u1(n)')
title('1-100的u1(n)数值显示')
%坐标轴设置

运行之后,我们可以在输出行得到该序列的均值和功率以及需要求取的比例因子a:


a =

    0.3464

u1_power =

    0.0100

u1_mean =

  -2.3466e-15

其运行结果如下所示:
在这里插入图片描述
通过上边的显示结果,我们可以看出,显然该序列的均值为0,幅度范围在-0.1733-0.1733之间。到此我们已经实现了我们的需求。

3.产生均值为0,方差为1,服从高斯(正态)分布的高斯白噪声 u ( n ) u(n) u(n)及其位移和尺度变换

在matlab中我们一般使用randn函数来产生该函数,其调用格式与rand格式相同,改变功率的方法也相同,只不过我们只需要将式子改为 a = 1 ⋅ ( P 2 ) a=\sqrt{1\cdot(P_2)} a=1(P2) 即可。

%%产生均值为0,方差为1,服从高斯分布的白噪声信号u(n)
clc;
clear;
N=50000;
u=randn(1,N);
%产生50000个满足均值为0,方差为1,服从正态分布的白噪声信号u(n)
u_mean=mean(u)
u_power=var(u)
%输出其均值和方差
set(gcf,'position',[180,160,800,500]);
%设置图片显示位置为(180,160)
%设置图片大小为(800,500)
subplot(221)
plot(u(1:100));
%选取u(n)序列的前100个数据点
grid on;
%显示网格
xlabel('n');
ylabel('u(n)');
title('1-100的u(n)数值显示');
%坐标轴设置
subplot(222);
hist(u,50);grid on;
%对u2(n)作直方图,检验其分布。50是对u2(n)的取值范围(0-1)所分解的细胞数
h=findobj(gca,'Type','patch');
set(h,'facecolor','b');
%改变柱状图颜色
%显示网格
xlabel('u(n)');
ylabel('个数');
title('u(n)的直方图,均值为0,方差为1');
%坐标轴设置
subplot(223)
p_2=0.1;
%为新需要得到的方差赋值
a=sqrt(p_2);
%求取缩放因子a
u1=a*u;
%得到功率(方差)为0.1的序列u1
hist(u1,50);grid on;
%对u1(n)作直方图,检验其分布。50是对u1(n)的取值范围(0-1)所分解的细胞数
%显示网格
u1_mean=mean(u)
u1_power=var(u)
%输出其均值和方差
h=findobj(gca,'Type','patch');
set(h,'facecolor','r');
%改变柱状图颜色
axis([-4,6,0,4000])
%设置坐标轴显示范围
xlabel('u1(n)');
ylabel('个数');
title('u1(n)的直方图,均值为0,方差为0.1');
%坐标轴设置
subplot(224)
u2=3+u;
%设置均值为3
hist(u2,50);grid on;
%对u2(n)作直方图,检验其分布。50是对u2(n)的取值范围(0-1)所分解的细胞数
%显示网格
u2_mean=mean(u)
u2_power=var(u)
%输出其均值和方差
h=findobj(gca,'Type','patch');
set(h,'facecolor','r');
%改变柱状图颜色
axis([-4,6,0,4000])
%设置坐标轴显示范围
xlabel('u2(n)');
ylabel('个数');
title('u2(n)的直方图,均值为3,方差为1');
%坐标轴设置

在我们执行完以上程序后,我们则将会得到以下图示:
在这里插入图片描述
另外在执行结束之后,我们也可以在输出行看到我们的各个数据的值

u_mean =

   -0.0010

u_power =

    1.0034

u1_mean =

  -3.2553e-04

u1_power =

    0.1003

u2_mean =

    2.9990

u2_power =

    1.0034

我们也可以看到,以上各个数值均是我们所需求的那样。

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王延凯的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值