%调用例子hmessage.m
x=[0.25,0.25,0.25,0.25];
f1=rand(4,4);
hf1=hmessage(x,f1,4,4); %求平均信息量hf1=1
hx=message(x,4); %此散信息源的平均信息量为hx=2
c1=hx-hf1;
disp('信道1的容量为')
c1
%信道1的信道容量为:c1=1
%对第二个信道
f2=rand(4,8);
hf2=hmessage(x,f2,4,8); %平均互信息量为hf2=1.5000
hx=message(x,4); %平均信息量为hx=2
c2=hx-hf2; %信道的容量为:c2=0.5000
disp('信道2的容量为')
abs(c2)
其中huffman.m函数如下:
%.哈夫曼编码huffman.m
function [h,l]=huffman(p);
if length(find(p<0))~=0, %判断输入是否概率分布
error('Input is not a prob.vector,there is negative component')
end
if abs(sum(p)-1)>10e-10
error('Input is not a prob.vector,the sum of the components is not equal to 1.')
end
n=length(p); %将输入的概率元素个数
q=p;
for i=1:n-1
[q,l]=sort(q); %将输入的概率元素排序
m(i,: )=[l(1:n-i+1),zeros(1,i-1)]; q=[q(1)+q(2),q(3:n),1];
end
for i=1:n-1
c(i,: )=blanks(n*n);
end
c(n-1,n)='0'; c(n-1,2*n)='1';
for i=2:n-1
c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1)));
c(n-i,n)='0'; c(n-i,n+1:2*n-1)=c(n-i,1:n-1);
c(n-i,2*n)='1';
for j=1:i-1
c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,: )==j+1)-1)+1:n*find(m(n-i+1, : )==j+1));
end; end
for i=1:n
h(i,1:n)=c(1,n*(find(m(1,: )==i)-1)+1:find(m(1,: )==i)*n);
ll(i)=length(find(abs(h(i, : ))~=32));
end
l=sum(p.*ll);
%常规双边带调幅amodulate.m
echo on
df=0.2; %频度分辩力
t0=0.5; %定义t0信号的持续时间的值
tz=0.001; %定义抽样时间
fz=1/tz;
fa=50; %定义载波频率
snr=10; %定义信噪比,用DB表示
snr_lin=10^(snr/10); %信噪比数值
a=0.8; %定义调拷制系数
t=[0:tz:t0]; %定义抽样点数据
%定义信号m
m=zeros(1,501);
for i=1:1:125, m(i)= i; end;
for i=126:1:375, m(i)=m(125)-i+125; end;
for i=376:1:501, m(i)=m(375)-i-375; end;
m=m/1000;;
c=cos(2*pi*fa.*t); %载波信号
m_n=m/max(abs(m));
[M,m,df1]=fftseq(m,tz,df); %付里叶变换,fftseq函数的程序段见后
M=M/fz; %频率缩放,便于做图
f=[0:df1:df1*(length(m)-1)]-fz/2; %定义频率向量
u=(1+a*m_n).*c; %将调质信号调颀在载波信号上
[U,u,df1]=fftseq(u,tz,df); %对以调信号做付里叶变换
U=U/fz; %h频率缩放
signal_power=ampower(u(1:length(t))); %计算信号的功率,ampower程序见后
pmn=ampower(m(1:length(t)))/(max(abs(m)))^2; %计算调制信号的功率
eta=(a^2*pmn)/(1+a^2*pmn); %计算调制效率
noise_power=eta*signal_power/snr_lin; %计算噪声功率
noise_std=sqrt(noise_power); %噪声标准差
noise=noise_std*randn(1,length(u)); %产生高斯分布噪声
r=u+noise; %总 接收信号
[R,r,df1]=fftseq(r,tz,df); %对总信号进行付里叶变换
R=R/fz; %频率缩放
%以下为结果显示
signal_power % 显示信号功率
eta %显示调制效率
clf
subplot(7,2,1)
plot(t,m(1:length(t))) %做出调制信号的曲线
www.751com.cn
title('the modulated signal');
subplot(7,2,3)
plot(t,c(1:length(t))) %做出载波的曲线
axis=([0 0.15 -2.1 2.1]); xlabel('Time')
title('The carrier');
subplot(7,1,3)
plot(f,abs(fftshift(M))) %作出频域的调制信号
xlabel('Frequency'); title('Spectrum of the message signal')
subplot(7,1,4)
plot(f,abs(fftshift(U))) %作出频域的以调信号
title('Spectrum of the modulated signal'); xlabel('Frequency')
subplot(7,1,5)
plot(t,noise(1:length(t))) %作出噪声曲线
title('noise sample'); xlabel('Time')
subplot(7,1,6)
plot(t,r(1:length(t))) %做出总信号的时域曲线
title('signal and noise'); xlabel('title')
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>