概述
写在前面
最近一直在用matlab在所信号处理算法的仿真工作,这一系列博客主要会分详一下遇到的一些问题及解决办法,和一些常用的功能模块的实现以及分分享。
一、正弦信号生成
一段正弦信号,主要设计这些参数的设置:
- 采样率:理论上来说要满足奈奎斯特采样频率,但是在实际使用中,一般都选择更高倍数,防止信号失真
- 采样时间:决定信号长度or点数
- 信号形式:单频or多频叠加,原理
二、matlab实现
2.1 生成单频正弦信号
按照上节所说的内容,进行代码的编写就好了
%生成单频正弦信号
function [signal] = Any_freq_signal(fs , t, f ,Amp,phase)%采样率,时间,频率,幅值,相位(deg)
dt = 1/fs;
N = t*fs;
t = 0:dt:(N-1)*dt;
signal = Amp*sin(2*pi*f*t+phase/180*pi);
end
上面代码部分可生成特定频率和长度的单频正弦信号,但是在实际情况下吗,信号并不是理想的,因此通常会加入不同信噪比的噪声来进行对比测试,这里可以在以后的内容中展开介绍,
2.2 生成多频正弦信号
当我们想要的信号是多个频率的正弦叠加时,最简单的方法当然是利用循环把每个正弦信号叠加起来,但是这种方法耗时较多,可以考虑用矩阵的方式实现。
%生成多频正弦信号
function [signal] = Mult_freq_signal(fs , t, f ,Amp,phase)%采样率,时间,频率,幅值,相位(deg)
dt = 1/fs;
N = t*fs;
t = (0:dt:(N-1)*dt)';
signal = Amp*sin(2*pi*f.*t+phase/180*pi);
Num = size(f,2)
signal = signal*ones(Num,1);
end
2.3 对上述信号进行频域分析
信号分析段中最常用的就是傅里叶变换了,以上述两个函数为例,使用傅里叶变换验证正确性。
对于单频
%单品信号频谱分析
clc;clear;close all;
y = Any_freq_signal(1e6,0.001,10e3,2,45);
function [signal] = Any_freq_signal(fs , t, f ,Amp,phase)%采样率,时间,频率,幅值,相位(deg)
dt = 1/fs;
N = t*fs;
t = 0:dt:(N-1)*dt;
signal = Amp*sin(2*pi*f*t+phase/180*pi);
figure
subplot(121);
plot(t/dt,signal);
title('信号时域');
xlabel('点数 N');ylabel('幅值 A');
Y = fftshift(fft(signal));
F = (-N/2:N/2-1)*(fs/N);
subplot(122);
plot(F,abs(Y));
title('信号频域');
xlabel('频率 f');ylabel('幅值 A')
end
运行结果如图:
对于多频
clc;clear;close all;
f = 1e3:1e3:5e3;%频率矩阵(1*N)
phase = 10:10:50;
Amp = [1.1,1.3,1.1,1.2,0.8];
yy = Mult_freq_signal(1e7,0.01,f,Amp,phase);
function [signal] = Mult_freq_signal(fs , t, f ,Amp,phase)%采样率,时间,频率,幅值,相位(deg),频率数量
dt = 1/fs;
N = t*fs;
t = (0:dt:(N-1)*dt)';
y = Amp.*sin(2*pi*f.*t+phase/180*pi);
Num = size(f,2)
signal = y*ones(Num,1);
figure
subplot(121);
plot(t/dt,signal);
title('信号时域');
xlabel('点数 N');ylabel('幅值 A');
Y = fftshift(fft(signal));%做傅里叶变换并把零频点移到频谱中心
F = (-N/2:N/2-1)*(fs/N);%设置横坐标
subplot(122);
plot(F,abs(Y)/max(abs(Y)));
title('信号频域');
xlabel('频率 f');ylabel('幅值 A')
end
结果如图
傅里叶变换结果的分叉,是由于频谱分辨力不足导致的,可以提高采样点数来避免。
以上就是本次的全部内容了,如果有什么问题欢迎私信或评论交流!
最后
以上就是高高美女为你收集整理的matlab数字信号处理(1)——正弦信号生成与时域分析的全部内容,希望文章能够帮你解决matlab数字信号处理(1)——正弦信号生成与时域分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复