MATLAB如何产生随机信号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB如何产生随机信号?相关的知识,希望对你有一定的参考价值。

参考技术A == TA α n=0:50; %定义序列的长度是 50 A=1; %设置信号有关的参数 a=0.4; T=1; %采样率 w0=2.0734; x=A*exp(-a*n*T).*sin(w0*n*T); %pi 是 MATLAB 定义的π,信号乘可采用“ .*” close all %清除已经绘制的 x(n)图形 subplot(3,1,1);stem(x); %绘制 x(n)的图形 title(‘理想采样信号序列 ’); k=-25:25; W=(pi/12.5)*k; X=x*(exp(-j*pi/12.5)).^(n’*k); magX=abs(X); %绘制 x(n)的幅度谱 subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱 ’); angX=angle(X); %绘制 x(n)的相位谱 subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱 ’) 2、单位脉冲序列 在 MatLab 中,这一函数可以用 zeros 函数实现: n=1:50; %定义序列的长度是 50 x=zeros(1,50); %注意: MATLAB 中数组下标从 1 开始 x(1)=1; close all; subplot(3,1,1);stem(x);title(‘单位冲击信号序列 ’); k=-25:25; X=x*(exp(-j*pi/12.5)).^(n’*k); magX=abs(X); %绘制 x(n)的幅度谱 subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱 ’); angX=angle(X); %绘制 x(n)的相位谱 subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱 ’) 3、矩形序列 n=1:50 x=sign(sign(10-n)+1); close all; subplot(3,1,1);stem(x);title(‘单位冲击信号序列 ’); k=-25:25; X=x*(exp(-j*pi/25)).^(n’*k); magX=abs(X); %绘制 x(n)的幅度谱 subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱 ’); angX=angle(X); %绘制 x(n)的相位谱 subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱 ’) 4、特定冲击串: )3()2(5.2)1(5.2)()( ?+?+?+= nnnnnx δδδδ n=1:50; %定义序列的长度是 50 x=zeros(1,50); %注意: MATLAB 中数组下标从 1 开始 x(1)=1;x(2)=2.5;x(3)=2.5;x(4)=1; close all; subplot(3,1,1);stem(x);title(‘单位冲击信号序列 ’); k=-25:25; X=x*(exp(-j*pi/12.5)).^(n’*k); magX=abs(X); %绘制 x(n)的幅度谱 subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱 ’); angX=angle(X); %绘制 x(n)的相位谱 subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱 ’) 5、卷积计算: ∑ +∞ ?∞= ?=?= m mnhmxnhnxny )()()()()( 在 MATLAB 中。提供了卷积函数 conv,即 y=conv(x,h),调用十分方便。例如: 系统: )3()2(5.2)1(5.2)()( ?+?+?+= nnnnnh b δδδδ 信号: 500),sin()( 0 <≤?= ? nnTAetx nT a α n=1:50; %定义序列的长度是 50 hb=zeros(1,50); %注意: MATLAB 中数组下标从 1 开始 hb(1)=1;hb(2)=2.5;hb(3)=2.5;hb(4)=1; close all; subplot(3,1,1);stem(hb);title(‘系统 hb[n]’); m=1:50; %定义序列的长度是 50 A=444.128; %设置信号有关的参数 a=50*sqrt(2.0)*pi; T=0.001; %采样率 w0=50*sqrt(2.0)*pi; x=A*exp(-a*m*T).*sin(w0*m*T); %pi 是 MATLAB 定义的π,信号乘可采用“ .*” subplot(3,1,2);stem(x);title(‘输入信号 x[n]’); y=conv(x,hb); subplot(3,1,3);stem(y);title(‘输出信号 y[n]’); 6、卷积定律验证 k=-25:25; X=x*(exp(-j*pi/12.5)).^(n’*k); magX=abs(X); %绘制 x(n)的幅度谱 subplot(3,2,1);stem(magX);title(‘输入信号的幅度谱 ’); angX=angle(X); %绘制 x(n)的相位谱 subplot(3,2,2);stem(angX) ; title (‘输入信号的相位谱 ’) Hb=hb*(exp(-j*pi/12.5)).^(n’*k); magHb=abs(Hb); %绘制 hb(n)的幅度谱 subplot(3,2,3);stem(magHb);title(‘系统响应的幅度谱 ’); angHb=angle(Hb); %绘制 hb(n)的相位谱 subplot(3,2,4);stem(angHb) ; title (‘系统响应的相位谱 ’) n=1:99; k=1:99; Y=y*(exp(-j*pi/12.5)).^(n’*k); magY=abs(Y); %绘制 y(n)的幅度谱 subplot(3,2,5);stem(magY);title(‘输出信号的幅度谱 ’); angY=angle(Y); %绘制 y(n)的相位谱 subplot(3,2,6);stem(angY) ; title (‘输出信号的相位谱 ’) %以下将验证的结果显示 XHb=X.*Hb; Subplot(2,1,1);stem(abs(XHb));title(‘x(n)的幅度谱与 hb(n)幅度谱相乘 ’); Subplot(2,1,2);stem(abs(Y);title(‘y(n)的幅度谱 ’); axis([0,60,0,8000])

信号检测基于matlab双稳随机共振微弱信号检测含Matlab源码 1701期

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【信号检测】基于matlab双稳随机共振微弱信号检测【含Matlab源码 1701期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、部分源代码

 function [xu]=xulietu(alpha,beta,deta,mu)
clc;
% clear  all;
% close all;
fs=100;%采样频率
Ts=1/fs;%采样时间
% h=1/fs;%时间步长
% t=0:Ts:4095*Ts;
t=0:Ts:409500*Ts;
% t=0:Ts:511*Ts;
n=length(t);

% alpha=1.2;
% beta=0;
% deta=10;
%  mu=0;

for i=1:n
  v=unifrnd(-pi/2,pi/2);
  w=exprnd(1);
%   if 0<alpha<1
    if (0<alpha)&&(alpha<1)
     deta0=deta*(1+beta.^2*tan(pi*alpha/2).^2).^(1/(2*alpha));
     beta1=2*atan(beta*tan(pi*alpha/2))/(pi*alpha);
     v0=-atan(beta*tan(pi*alpha/2))/alpha;
     x1=sin(alpha*(v-v0))/(cos(v)).^(1/alpha)*(cos(v-alpha*(v-v0))/w).^((1-alpha)/alpha);
     xu(i)=deta0*x1+mu;
   elseif alpha==1
       beta1=beta;
       deta0=2/pi*deta;
       x1=(pi/2+beta1*v)*tan(v)-beta1*log10(w*cos(v)/(pi/2+beta*v));
       xu(i)=deta0*x1+mu+2/pi*deta0*beta*log(deta0);
    
%    elseif 1<alpha<2
   elseif (1<alpha)&&(alpha<2)
          beta1=2*atan(beta*tan(pi*alpha/2))/(pi*(alpha-2));
           deta0=deta*(1+beta.^2*tan(pi*alpha/2).^2).^(1/(2*alpha));
          v0=-atan(beta*tan(pi*alpha/2))/alpha;
          x1=sin(alpha*(v-v0))/(cos(v)).^(1/alpha)*(cos(v-alpha*(v-v0))/w).^((1-alpha)/alpha);
          xu(i)=deta0*x1+mu;
  
    elseif alpha==2
        v0=-atan(beta*tan(pi*alpha/2))/alpha;
        x1=sin(alpha*(v-v0))/(cos(v)).^(1/alpha)*(cos(v-alpha*(v-v0))/w).^((1-alpha)/alpha);
        xu(i)=deta0*x1+mu;
     else
       xu(i)=randn;
    end
end



% plot(t,xu);xlabel('采样点');
% % ylim([-100,100]);
% ylabel('幅值');
% xlim([0,2000]);
% ylim([-4000,4000]);
%title('a稳定噪声序列');


三、运行结果





四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

以上是关于MATLAB如何产生随机信号?的主要内容,如果未能解决你的问题,请参考以下文章

matlab 生成噪声信号

matlab中怎么生成啁啾信号

信号处理常用matlab函数之随机数产生

在matlab里怎么产生零均值协方差是已知的高斯信号呢?

matlab 产生白噪声

信号检测基于matlab双稳随机共振微弱信号检测(低信噪比下)含Matlab源码 2307期