随机信号处理已经学完很久了,张玲华版随机信号处理已经绝版了,我用的PDF,这本书今天把它总结一下。随机信号处理之前学过信号与系统、数字信号处理,从书里我们可以详细地了解为什么要进行fourier变换和几种常用的fourier形式。
简单来说,fourier变换的意义就是架起时域和频域的桥梁,时域上难分析的信号转到频域可能会获得更简单的规律,所以频域分析是必要的。但是我们不能忘了传统的fourier分析是有条件的,首先要求绝对可积,这个已经被z变换解决了。在DFT中,有三大局限性,并且经典谱分析没有办法解决,为什么没办法解决详见数字信号处理。
- 怎么把写好的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');