matlab移位相乘计算卷积的程序,不要直接conv的

matlab移位相乘计算卷积的程序,不要直接conv的,第1张

function c = convolution(a,b) 

  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程序


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7927516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存