随机信号处理的一些归纳

随机信号处理已经学完很久了,张玲华版随机信号处理已经绝版了,我用的PDF,这本书今天把它总结一下。随机信号处理之前学过信号与系统、数字信号处理,从书里我们可以详细地了解为什么要进行fourier变换和几种常用的fourier形式。

简单来说,fourier变换的意义就是架起时域和频域的桥梁,时域上难分析的信号转到频域可能会获得更简单的规律,所以频域分析是必要的。但是我们不能忘了传统的fourier分析是有条件的,首先要求绝对可积,这个已经被z变换解决了。在DFT中,有三大局限性,并且经典谱分析没有办法解决,为什么没办法解决详见数字信号处理。

随机信号处理的一些归纳_第1张图片

  • 怎么把写好的word或pdf不乱码变成创作文章,公式太多了

 下边是一些代码

%时域响应和频域响应
fs=2;
N=128;
n=(0:N-1)/fs;   
f1=0.2;f2=0.3; 
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);%产生两个频率的正弦信号叠加
subplot(311);plot(n,x,'b');
xlabel('时间/s');ylabel('x');title('原始信号');
grid on;
 
y=fft(x,N);
mag=abs(y);
f=(0:N-1)*fs/N;%转化为频率区间
subplot(312);plot(f(1:N/2),mag(1:N/2)*2/N,'b');%模值转化为幅值
xlabel('频率/Hz');ylabel('振幅');title('原始信号的FFT变换');
 
grid on;
xifft=ifft(y);
realx=real(xifft); %  快速傅里叶变换的实部
ti=[0:length(xifft)-1]/fs;
subplot(313),plot(ti,realx,'b');
xlabel('时间/s');ylabel('x');  title('利用傅里叶逆变换得到的信号') 
%周期法求功率谱
fs=2;
N=128;
SNR=10;
n=(0:N-1)/fs;   
f1=0.2;f2=0.3; %频率分辨率为fs/N
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);%产生两个频率的正弦信号叠加

y=awgn(x,SNR);    %加入信噪比为SNR的高斯白噪声
P=10*log10(abs(fft(y,N).^2)/N);%Fourier振幅谱平方的平均值,并转化为dB
f=(0:N-1)*fs/N;%给出频率序列
figure;
plot(f(1:N/2),P(1:N/2));
grid on;
title('功率谱(dB图)');
ylabel('功率谱/dB');
xlabel('频率/Hz');

%周期函数法MSE
fs=2;
N=128;
n=(0:N-1)/fs;   
f1=0.2;f2=0.3; 
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);%产生两个频率的正弦信号叠加
MSEf1=zeros(1,401); %生成1*401的零矩阵
MSEf2=zeros(1,401);
e=0;
for SNR=0:0.1:40
    e=e+1;
    s1=0;
    s2=0;
for z=1:100  %在某个信噪比下作100次fft
y=awgn(x,SNR);    %加入信噪比为SNR的高斯白噪声
P=10*log10(abs(fft(y,N).^2)/N);%Fourier振幅谱平方的平均值,并转化为dB
f=(0:N-1)*fs/N;
f=f(1:N/2);
P=P(1:N/2);

[pks,locs]=findpeaks(P); % 取峰值函数极大值点及对应频率赋给[P,L]矩阵
F1=locs(1)*fs/N;
F2=locs(2)*fs/N;
s1=s1+(F1-f1)*(F1-f1);     %MSE 
s2=s2+(F2-f2)*(F2-f2);
end
MSEf1(e)=s1/100;
MSEf2(e)=s2/100;
end

m=0:0.1:40;
plot(m,MSEf1,'r',m,MSEf2,'b');
title('均方误差与信噪比的关系');
xlabel('SNR/dB');
ylabel('MSE');






%相关函数法
fs=2;
N=128;
n=(0:N-1)/fs;   
f1=0.2;f2=0.3; 
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);%产生两个频率的正弦信号叠加
MSEf1=zeros(1,401); %生成1*101的零矩阵
MSEf2=zeros(1,401);
R=zeros(1,N);
e=0;
for SNR=0:0.1:40
    e=e+1;
    s1=0;
    s2=0;
for z=1:100  %在某个信噪比下作100次fft
y=awgn(x,SNR);    %加入信噪比为SNR的高斯白噪声
R=xcorr(y);
 
P=10*log10(abs(fft(R,N)));
f=(0:N-1)*fs/N;
f=f(1:N/2);
P=P(1:N/2);

[pks,locs]=findpeaks(P); % 取峰值函数极大值点及对应频率赋给[P,L]矩阵
F1=locs(1)*2/N;
F2=locs(2)*2/N;
s1=s1+(F1-f1)*(F1-f1);     %MSE 
s2=s2+(F2-f2)*(F2-f2);
end
MSEf1(e)=s1/100;
MSEf2(e)=s2/100;
end

m=0:0.1:40;
plot(m,MSEf1,'r',m,MSEf2,'b');
title('均方误差与信噪比的关系');
xlabel('SNR/dB');
ylabel('MSE');
%相关函数法功率谱
fs=2;
N=128;
SNR=10;
n=(0:N-1)/fs;   
f1=0.2;f2=0.3; 
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);%产生两个频率的正弦信号叠加

y=awgn(x,SNR);    %加入信噪比为SNR的高斯白噪声
for u=1:N-1
    for b=1:N-u
        R(u)=y(u+b)*y(b)+R(u);
    end
    p=N-u;
    R(u)=R(u)/p;
end
P=10*log10(abs(fft(R,N)));

f=(0:N-1)*fs/N;%给出频率序列
figure;
plot(f(1:N/2),P(1:N/2));
grid on;
title('功率谱(dB图)');
ylabel('功率谱/dB');
xlabel('频率/Hz');

现代功率谱估计

%Yule-Walker方程
N=128;%点数
n=1:N;      
f1=0.2;f2=0.3;         
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);
y=awgn(x,10);
p=50;             %阶数          
R=ones(p+1,1);    %建立全一矩阵 储存Rx(m)
for m=0:p  
    sum=0;
    for n=1:N-m    
        sum=sum+y(n)*y(n+m);
    end
    sum=sum/N;     %求自相关函数Rx(m)    
    R(m+1)=sum;%由于矩阵不能由0开始 把Rx(m)的值存入矩阵R(m+1)的位置
end
X=R(2:p+1,1);%等式右方
M=ones(p,p);              %自相关函数方阵          
for n=1:p                  %方阵赋值
    for k=1:p
        if(n==k)
            M(k,k)=R(1);%对角线上均为Rx(0)
        else c=abs(k-n);%自变量求模 (自相关为偶函数)
                M(n,k)=X(c);
        end
    end
end  
MNI=inv(M);%求逆
a=MNI*(-X);           %P阶系数
A=[1;a];%系统函数的分母多项式的系数(1,a1,a2,……ap)
G=R(1);
for i=1:p-1               %求系统增益G
    G=G+a(i,1)*R(i+1);
end    
G=sqrt(G);
[H,w]=freqz(G,A,N);   %求离散系统频响特性
P=10*log10(abs(H).^2);%幅频响应,单位db
f=w/(2*pi);
plot(f,P);
title('功率谱幅频特性曲线')
xlabel('f/Hz');
ylabel('10log(PSD)/dB');
%Levinson-Durin快速递推法
N=1024;%点数
fs=2;
n=1:N;      
f1=0.2;f2=0.3;         
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);
y=awgn(x,10);        
p=125;
R=zeros(1,p);%1*p阶矩阵
for m=1:p  %求自相关函数Rx(1)-Rx(p)
  sum=0;
  for n=1:N-p
      sum=y(n)*y(n+m)+sum;
  end
  R(m)=sum/N;
end
 sum=0;
for n=1:N
    sum=y(n)*y(n)+sum;
end
R0=sum/N;          %求Rx(0)
a=zeros(p,p);      %存储p阶p个系数
b=zeros(1,p);      %存储p阶的ρ
A=-(R(1)/R0);      %求a1(1) 
B=R0*(1-A.^2);     %ρ1
a(1,1)=A;          %赋值到矩阵
b(1)=B;
for j=2:p          %递推关系式 推导2——p阶的系数及ρ
    add=0;
    for i=1:j-1
        add=a(j-1,i)*R(j-i)+add;
    end
    a(j,j)=-(R(j)+add)/b(j-1);     %ap(p)
    for i=1:j-1
         a(j,i)=a(j-1,i)+a(j,j)*a(j-1,j-i); %ap(i)
    end
    c=1-a(j,j)^2;
    b(j)=b(j-1)*c;  %ρp
end
G=sqrt(b(p));      %系统增益G, G^2=ρ
M=a(p,1:p);          %P阶的P个系数,最后一行
X=[1 M];             %系统函数分母多项式系数

[H,w]=freqz(G,X,N);   %求离散系统频响特性
P=10*log10(abs(H).^2);%幅频响应,单位db
f=w/(2*pi);
plot(f,P);
title('功率谱幅频特性曲线')
xlabel('f/Hz');
ylabel('10log(PSD)/dB');
%Burg算法
N=256;%点数
n=1:N;      
f1=0.2;f2=0.3;         
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);%产生两个频率的正弦信号叠加
y=awgn(x,10);                  
p=100;                      %阶数              
F=zeros(p+1,N+1);
B=zeros(p+1,N+1);
i=1:N;
F(1,i)=y(i);        %0阶前向预测系数
j=1:N;
B(1,j)=y(j);      %0阶后向预测系数        
k=zeros(1,p);
for m=1:p
a=0;
b=0;
  for n=m:N
  a=a+F(m,n+1)*B(m,n);    
  b=b+(F(m,n+1))^2+(B(m,n))^2;
  end
  k(m)=-2*a/b;       % m阶反射系数
for n=m:N-1       %递推m阶的预测误差
F(m+1,n+1)=F(m,n+1)+k(m)*B(m,n);   % m阶前向预测误差
B(m+1,n+1)=B(m,n)+k(m)*F(m,n+1);  % m阶后向预测误差
end
end
sum=0;    %Levinson递推关系式
for n=1:N
    sum=y(n)*y(n)+sum;
end
Rx0=sum/N;        %Rx(0)
A=zeros(p,p);
A(1,1)=k(1);
Rou=zeros(1,p);
Rou(1)=Rx0*(1-k(1)^2);
for j=2:p       % 推导2——p阶的系数及ρ
    if k(j)<1
    A(j,j)=k(j);
     for i=1:j-1
         A(j,i)=A(j-1,i)+A(j,j)*A(j-1,j-i); 
     end
    else
    break;
    end
    Rou(j)=Rou(j-1)*(1-A(j,j)^2);
end
G=sqrt(Rou(p));  %对P阶ρ开根号得到系统增益
M=A(p,1:p);         %取p阶的p个系数
X=[1 M];

[H,w]=freqz(G,X,N);   %求离散系统频响特性
P=10*log10(abs(H).^2);%幅频响应,单位db
f=w/(2*pi);
plot(f,P);
title('功率谱幅频特性曲线')
xlabel('f/Hz');
ylabel('10log(PSD)/dB');
%music算法
clear all,close all
N=128;%样本数
M=2; %M个复正弦信号
n=1:N;
f1=0.2;f2=0.3;    
x=10*sin(2*pi*f1*n+pi/3)+8*sin(2*pi*f2*n+pi/6);
y=awgn(x,10);
R=xcorr(y);
Rm=R(1,1:N);%选取前N项
Rxx=toeplitz(Rm);

[V,A]=eig(Rxx);%V特征向量,第一列对应第一个特征值,A对角线元素为特征值
m=0;
for w=0:0.1:pi
    e=zeros(N,1);
    for k=1:N
        e(k)=complex(cos((k-1)*w),sin((k-1)*w));%e=exp(j*k*w)
    end
    sum=0;
    for j=M+1:N
        sum=sum+V(:,j-M)*(V(:,j-M))';
    end
    m=1+m;
    P(m)=1/(e'*sum*e);
end

f=(0:0.1:pi)/(2*pi);
plot(f,abs(P));
xlabel('频率 f');ylabel('P');



你可能感兴趣的:(matlab,傅立叶分析)