大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
qsj8362234 发表于 2012-9-27 12:08
你索性把你的代码发我把
clc ;close all; clear all;
fs=20000; %采样频率
dt=1/fs;
f1=1000;
f2=2000; %两个信号的频率
a=[1 0 1 0 1 0 1 1 0 0]; %信号,取整
nn=length(a);
g1=a;
g2=~a; %信号反转和g1反向,01取反
g11=(ones(1,20000))’*g1; %抽样
g1a=g11(:)’; %将0 1信号每个码元分为20000份
g21=(ones(1,20000))’*g2;
g2a=g21(:)’;
t=0:1/fs:10-dt;
t1=length(t);
fsk1=g1a.*cos(2*pi*f1.*t);
fsk2=g2a.*cos(2*pi*f2.*t);
fsk=fsk1+fsk2; %产生的信号
SNR=20; % 信噪比
randn(‘state’,1945724);
% 在已调信号中加入高斯白噪声,信噪比为10dB
fsk_t=awgn(fsk,SNR,’measured’,[],’dB’);
y1=fft(fsk_t);
y2=fftshift(y1);
n=(-length(fsk_t)/2:length(fsk_t)/2-1)*fs/length(fsk_t);
figure(1);
subplot(211);
plot(t,fsk_t);
subplot(212);
plot(n,abs(y2));
N=81; %阶数
p=(N-1)/2;%采样点数
% 期望取样序列
Hd1=[zeros(1,3) 0.5 ones(1,1) 0.75 0.25 zeros(1,34)]; %加过渡点的带通设置,滤出1000的频率
Hd2=[zeros(1,7) 0.5 ones(1,1) 0.75 0.25 zeros(1,30)]; %加过渡点的带通设置,滤出2000的频率
u=0.002;
delta=4.62e-5;%误差
w1=randn(1,p+1)’;%一列p+1个随机数,初始权值
w2=randn(1,p+1)’
wi=[0:p]*pi/p;%0-pi,p+1个
op=zeros(p+1,p+1);%p+1的0矩阵
% op(1,:)=1;
nrow=[0 1:p]’;%一列P+1行
c=cos(nrow*wi);
E1=3;%总误差
while(E1>delta) %误差大,调整
E1=0;
for k=1:p+1;%每个采样点处与期望值比较
y1=w1’*c(:,k);%一个数值
er1=abs(Hd1(k))-y1;%与期望序列的误差
% E=E+1/2*er1*er1;
E1=E1+er1*er1;
w1=w1+u*er1*c(:,k);%更新权值
end
end
h1=zeros(1,p+1);
h1(p+1)=w1(1);
for k=p:-1:1
h1(k)=w1(p+2-k)/2;
end
h1=[h1 h1(p:-1:1)]; %duicheng
[HH1,ww1]=freqz((h1));
% subplot(2,2,3);
% stem(h); xlabel(‘滤波器的系数’);
figure(2);
subplot(2,2,1); plot(ww1,abs((HH1))); xlabel(‘幅频特性’);grid on;
set(gca,’XTick’,0:pi/N*2:pi)
set(gca,’XTickLabel’,{0:N/2});
subplot(2,2,2); plot(ww1,20*log10(abs(HH1))); xlabel(‘衰减特性’);grid on;
set(gca,’XTick’,0:pi/N*2:pi)
set(gca,’XTickLabel’,{0:N/2});
set(gcf,’color’,’w’)
E2=3;
while(E2>delta) %误差大,调整
E2=0;
for k=1:p+1;%每个采样点处与期望值比较
y2=w2’*c(:,k);%一个数值
er2=abs(Hd2(k))-y2;%与期望序列的误差
% E=E+1/2*er1*er1;
E2=E2+er2*er2;
w2=w2+u*er2*c(:,k);%更新权值
end
end
h2=zeros(1,p+1);
h2(p+1)=w2(1);
for k=p:-1:1
h2(k)=w2(p+2-k)/2;
end
h2=[h2 h2(p:-1:1)]; %duicheng
[HH2,ww2]=freqz((h2));
% subplot(2,2,3);
% stem(h); xlabel(‘滤波器的系数’);
figure(3);
subplot(2,2,1); plot(ww2,abs((HH2))); xlabel(‘幅频特性’);grid on;
set(gca,’XTick’,0:pi/N*2:pi)
set(gca,’XTickLabel’,{0:N/2});
subplot(2,2,2); plot(ww2,20*log10(abs(HH2))); xlabel(‘衰减特性’);grid on;
set(gca,’XTick’,0:pi/N*2:pi)
set(gca,’XTickLabel’,{0:N/2});
set(gcf,’color’,’w’)
%滤出的1000HZ的波形和频谱
figure(4);
lv1=filter(h1,1,fsk_t);
y3=fft(lv1);
y4=fftshift(y3);
n1=(-length(lv1)/2:length(lv1)/2-1)*fs/length(lv1);
subplot(211);
plot(t,lv1);
subplot(212);
plot(n1,abs(y4));
%滤出的2000HZ的波形和频谱
figure(5)
lv2=filter(h2,1,fsk_t);
y5=fft(lv2);
y6=fftshift(y5);
n2=(-length(lv2)/2:length(lv2)/2-1)*fs/length(lv2);
subplot(211);
plot(t,lv2);
subplot(212);
plot(n2,abs(y6));
%DFT求幅值
for i=1:nn;
I1(i)=0;
Q1(i)=0;
for j=1+(i-1)*20000:18000+(i-1)*20000;
I1(i)=I1(i)+lv1(j)*cos(2*pi*1000*j/20000);
Q1(i)=Q1(i)+lv1(j)*sin(2*pi*1000*j/20000);
end;
I1(i)=I1(i)/18000;
Q1(i)=Q1(i)/18000;
A1(i)=sqrt(I1(i)^2+Q1(i)^2);
end;
for i=1:nn;
I2(i)=0;
Q2(i)=0;
for j=1+(i-1)*20000:18000+(i-1)*20000;
I2(i)=I2(i)+lv2(j)*cos(2*pi*2000*j/20000);
Q2(i)=Q2(i)+lv2(j)*sin(2*pi*2000*j/20000);
end;
I2(i)=I2(i)/18000;
Q2(i)=Q2(i)/18000;
A2(i)=sqrt(I2(i)^2+Q2(i)^2);
end;
%判决
for i=1:nn;
if A1(i)>A2(i);
B(i)=1;
else
B(i)=0;
end
end
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196946.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...