📄 svdexp2.m
字号:
%dmod也可以产生模拟调制信号,见帮助
clear;clc;close all;
%----------------------------FSK信号,数字调制------------------------------------
% 采用SVD去噪效果都调频信号不太好
codes=6; %码元个数,即输入调制信号的长度
sigma=1; %调制信号的幅度
fs=600e3; %采样率600K
fb=1e3; %波特率1KHz,fb表示对输入调制信号的采样率
fc=100e3; %载频100KHz
N0=fs/fb; %一个码元周期内的采样点数,一个输入信号长度内的采样点数
N=N0*codes; %总的采样点数(已调信号的长度)
M=4; %调制方式选择,fsk的M个频率
symbols1=linspace(0,1,M); %对应的M个频率值
mm=randint(1,codes,[1,M]);
for i=1:codes
symbols(i)=symbols1(mm(i)); %每个码元随机取指定值
end
x=sigma*dmod(symbols,fc,fb,fs,'FSK',M);
% ifr=instfreq(x'); %测试频率
% ttt=3:N;
% stem(ttt,ifr);
%-------------------------加入指定强度的噪声--------------------------------
snr=5;
ps=sum(x.^2)/N;
sigma_noise=abs(sqrt(ps/(10^(snr/10))));
nn=randn(1,N);
enn=sum(nn)/N; %随机数nn的均值
nn=nn-enn; %使nn均值为0
noise=sigma_noise*nn;
s=x+noise;
%-------------------------原始信号信噪比及均方差分析-----------------
snrs=20*log10(norm(x)/norm(s-x));
mmses=mmse(s-x);
%-----------------------分解层数及构成分解矩阵------------------------
% % ---------------------------矩阵均匀分段------------------------
M=N0/10; %矩阵行数,N0=1000
N1=N/M; %矩阵列数
for i=1:M
a(i,:)=s(((i-1)*N1+1):(i*N1));
end
% -------------------------------信号svd分解及重构------------------------------
MM=2; %特征值个数为MM-1
[u,s1,v]=svd(a);
s2=zeros(M,N1);
for i=MM:M
s2(i,:)=s1(i,:);
end
s3=s1-s2;
%信号重构
anew=u*s3*v';
for i=1:M
ys(((i-1)*N1+1):(i*N1))=anew(i,:);
end
%----------------------SVD去噪后,信噪比及均方差分析--------------------------------
snry=20*log10(norm(x)/norm(ys-x))
mmses
mmsey=mmse(ys-x)
subplot(311);plot(x); title('纯净信号');
subplot(312);plot(s); title('含噪信号');
subplot(313);plot(ys);title('SVD去噪后信号');
% %-------------------------------SVD去噪后信号进行小波去噪----------------------------------
% %效果不好,信噪比及均方差提高的幅度不大
% yout=wden(sy,'rigrsure','s','sln',6,'db7');
% %-------------------------------小波去噪后信号信噪比及均方差分析--------------------------
% snryout=20*log10(norm(x)/norm(yout-x))
% mmseyout=mmse(yout-x)
% figure,
% subplot(311);plot(x); title('纯净信号');
% subplot(312);plot(s); title('含噪信号');
% subplot(313);plot(yout);title('SVD及小波去噪后信号');
% %两种方法误差分析
% figure,
% subplot(211);plot(yout-x);title('SVD后采用小波');
% subplot(212);plot(sy-x);title('SVD');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -