不使用“fftfilt文件,自己编程实现一个长序列和一个短序列的卷积。.m

来自「matlab非常全的编程实例」· M 代码 · 共 27 行

M
27
字号
%----------------------------------------------------------------------------
% exa031101_conv.m, for example 3.11.1
% 
% 不使用“fftfilt"文件,自己编程实现一个长序列和一个短序列的卷积。
%----------------------------------------------------------------------------
clear;

% 生成滤波器系数h和混有高斯白噪的正弦信号x
h=fir1(10,0.3,hanning(11));
N=500;p=0.05;f=1/16;
u=randn(1,N)*sqrt(p);%
s=sin(2*pi*f*[0:N-1]);
x=u(1:N)+s;

% 将x分为长度为L的小段
L=20;M=length(h);
y=zeros(1,N+M-1);
tempy=zeros(1,M+L-1);
tempX=zeros(1,L);
for k=0:N/L-1
   tempx(1:L)=x(k*L+1:(k+1)*L);
   tempy=conv(tempx,h);
   y=y+[zeros(1,k*L),tempy,zeros(1,N-(k+1)*L)];
end

subplot(211);plot(x)
subplot(212);plot(y(1:N))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?