M= length(a) %a序列的长度
N=length(b) %b序列的长度
c=zeros(1,N+M-1) %用来存放卷积的结果
for n = 2:(M+N) %卷积之后的索引本应该的范围
tmp_max=min(n-1,M) %根据求和表达式,由1=<k<=M 且 1=<n-k<=N
tmp_min=max(n-N,1) %确定最终求和变量k的取值
for k =tmp_min:1:tmp_max
c(n-1) = c(n-1) +a(k)*b(n-k) %求和,同时由于c从1开始索引,
%将n的范围2:M+N
%对应到c的1:M+N-1中去
end
end
测试:
>>x = 1:9
>>y=2:8
>>convolution(x,y)
ans =
2 7 16 30 50 77 112 147 182 197 200 190 166 127 72
卷积程序我还是有的:function [f,k]=conv_m(f1,k1,f2,k2)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
% f: 卷积积分f(t)对应的非零样值向量
% k:f(t)的对应时间向量
% f1: f1(t)非零样值向量
% f2: f2(t)的非零样值向量
% k1: f1(t)的对应时间向量
% k2: f2(t)的对应时间向量
% p:取样时间间隔
p=input('p=')
f=conv(f1,f2)%计算序列f1与f2的卷积和f
f=f*p
k0=k1(1)+k2(1)%计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2%计算卷积和f的非零样值的宽度
k=k0:p:k3*p%确定卷积和f非零样值的时间向量
subplot(2,2,1)
plot(k1,f1) %在子图1绘f1(t)时域波形图
title('f1(t)')
xlabel('t')
ylabel('f1(t)')
subplot(2,2,2)
plot(k2,f2) %在子图2绘f2(t)时波形图
title('f2(t)')
xlabel('t')
ylabel('f2(t)')
subplot(2,2,3)
plot(k,f)%画卷积f(t)的时域波形
h=get(gca,'position')
h(3)=2.5*h(3)
set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的2.5倍
title('f(t)=f1(t)*f2(t)')
xlabel('t')
ylabel('f(t)')
(2,1,3)卷积码编硬译码matlab程序\encoding.m...............................\hanmming_dist.m
...............................\main函数.txt
...............................\viterbi_decoding.m
...............................\卷积码编译码 打印.docx
(2,1,3)卷积码编硬译码matlab程序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)