【数字信号处理】卷积编程实现 ( Matlab 卷积和多项式乘法 conv 函数 | 使用 matlab 代码求卷积并绘图 )

该博客介绍了如何在Matlab中使用conv函数进行卷积操作,特别是在处理多项式乘法和线性时不变系统输出的情况下。通过示例展示了输入序列(正弦序列)和单位脉冲响应的计算及绘图过程,输入序列是一个在0.4kHz频率下采样率为10kHz的128点信号,单位脉冲响应是一个特定形状的序列。最后,利用freqz函数计算了两个序列的频谱,并绘制了卷积结果的图像。
摘要由CSDN通过智能技术生成





一、Matlab 卷积和多项式乘法 conv 函数



Matlab 文档地址 : https://ww2.mathworks.cn/help/matlab/ref/conv.html

函数语法 :

// 返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷积与将这两个多项式相乘等效。
w = conv(u,v)
// 返回如 shape 指定的卷积的分段。
// 例如,conv(u,v,'same') 仅返回与 u 等大小的卷积的中心部分,
// 而 conv(u,v,'valid') 仅返回计算的没有补零边缘的卷积部分。
w = conv(u,v,shape)

u u u 是 " 输入序列 " , v v v 是 " 单位脉冲响应 " ;





二、使用 matlab 代码求卷积并绘图



求下面的 " 线性时不变系统 " 的 输出序列 ;


输入序列 : x ( n ) = s i n ( 2 π f 0 n / F s ) ,   0 ≤ n ≤ 127 x(n) = sin(2\pi f_0n/F_s) , \ 0 \leq n \leq 127 x(n)=sin(2πf0n/Fs), 0n127 ,

f 0 = 0.4 k H z , F s = 10 k H z f_0 = 0.4kHz , F_s = 10kHz f0=0.4kHz,Fs=10kHz


单位脉冲响应 :

h ( n ) = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } h(n) = \{ 1,2,3,4,5,6,7,8,9,10,11,10,9,8,7,6,5,4,3,2,1 \} h(n)={1,2,3,4,5,6,7,8,9,10,11,10,9,8,7,6,5,4,3,2,1}


上述系统的输出就是 " 输入序列 " 与 " 输出序列 " 的卷积 ;


参考 【数字信号处理】基本序列 ( 正弦序列 | 数字角频率 ω | 模拟角频率 Ω | 数字频率 f | 模拟频率 f0 | 采样频率 Fs | 采样周期 T ) 博客进行理解 ;


f 0 = 0.4 k H z f_0 = 0.4kHz f0=0.4kHz 表示模拟信号频率是 0.4 k H z 0.4kHz 0.4kHz ,

F s = 10 k H z F_s = 10kHz Fs=10kHz 表示数字采样频率是每秒采集 10 k 10k 10k 个样本 , 也就是 10000 10000 10000 个样本 ;

x ( n ) x(n) x(n) 默认是一个无限序列 , 为了方便计算 , 这里为其加了一个区间 0 ≤ n ≤ 127 0 \leq n \leq 127 0n127 ;


数字频率计算 :

数字频率 ( 单位 Hz ) : f = f 0 / F s = 0.4 / 10 = 0.04 f = f_0 / F_s = 0.4 / 10 = 0.04 f=f0/Fs=0.4/10=0.04


matlab 代码示例 :

%清除内存
clear;

%输入序列 , 模拟信号频率 0.4kHz , 采样频率 10kHz
% n 的取值范围是 0127 闭区间整数序列
x=sin(2 * pi * 0.4 * (0:127) / 10);

%单位脉冲响应
%1,2,3,4,5,6,7,8,9,10,11,10,9,8,7,6,5,4,3,2,1
%1 ~ 10 索引的序列就是 1,2,3,4,5,6,7,8,9,10
h(1:10)=(1:10);
%11 索引的序列是 11
h(11)=11;
%12 ~ 21 索引的序列是 10,9,8,7,6,5,4,3,2,1
h(12:21)=(10:-1:1);

%" 单位脉冲响应 " 序列的频谱
hf = freqz(h, 1, 1024); 
%" 输入序列 " 的频谱
xf = freqz(x, 1, 1024);

%求卷积 , 线性时不变系统的输出序列就是 输入序列 与 单位脉冲响应 之间的卷积
y=conv(h,x);

%建立幕布
figure;
%绘制 "输入序列" 图像
plot(x);

%建立幕布
figure;
%绘制 "单位脉冲响应" 图像
plot(h);

%建立幕布
figure;
%绘制 y 函数的值 , 也就是卷积计算结果
plot(y);

% 打开网格
grid on;

输入序列 x ( n ) x(n) x(n) 的函数图像如下 :

在这里插入图片描述

单位脉冲响应 h ( n ) h(n) h(n) 函数图像如下 :

在这里插入图片描述

输出序列 y ( n ) y(n) y(n) 图像如下 :

在这里插入图片描述

Matlab中的卷积可以通过conv函数实现。该函数可以用于计算两个向量的线性卷积,或者更一般地,计算一个向量和一个滤波器的卷积。 具体地说,conv函数的用法是conv(u, v),其中u是输入序列,v是单位脉冲响应。它会返回卷积结果。 在Matlab使用代码卷积绘图的步骤如下: 1. 定义输入序列u和单位脉冲响应v。 2. 使用conv函数计算卷积结果,保存到一个新的向量中,例如y = conv(u, v)。 3. 使用plot函数绘制输入序列和卷积结果的图像,可以使用subplot函数将两个图像放在一起进行比较。 下面是一个示例代码: ```matlab % 定义输入序列u和单位脉冲响应v u = [1, 2, 3, 4, 5]; v = [1, 1, 1]; % 计算卷积结果 y = conv(u, v); % 绘制图像 subplot(2, 1, 1); stem(u); title('输入序列u'); subplot(2, 1, 2); stem(y); title('卷积结果'); ``` 这段代码会生成两个图像,第一个图像是输入序列u的图像,第二个图像是卷积结果的图像。你可以根据需要修改输入序列和单位脉冲响应,以及图像的样式和标题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【数字信号处理卷积编程实现 ( Matlab 卷积多项式乘法 conv 函数 | 使用 matlab 代码卷积绘图 )](https://blog.csdn.net/han1202012/article/details/123081608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值