📄 filter_simulator.asv
字号:
%Matlab滤波仿真程序
N=128;%所取的采样点数
fs=1000;%采样频率,每秒的采样值个数 %根据采样定理,采样频率至少为最高频率的2倍
f1=100;f2=400;f3=300;%设定三个正弦信号的频率,fs/f表示每个周期的采样点数
%产生输入信号,为三个正弦信号之和
%2*pi*f1即角频率w(每秒的角度改变量),则2*pi*f1/fs为每个采样间隔(采样值)对应的角度改变量
%sin(2*pi*f1*[1:100]/fs)即为第1到100个采样值对应的正弦值
x=100*(sin(2*pi*f1*[1:N]/fs)+sin(2*pi*f2*[1:N]/fs)+sin(2*pi*f3*[1:N]/fs));
%画出输入信号
subplot(2,2,1);
plot(round(x));
xlabel('时域采样点');
ylabel('x');
title('原始信号');
%对输入信号做FFT,并做功率谱分析
xx=fft(x);%,N
xmag=abs(xx);%取模值,得到振幅谱
%pxx=xx.*conj(xx);%与共轭复数相乘得到模的平方,即功率值
%f=(0:(fs/2-1));
%subplot(2,2,2);
%plot(f,pxx(1:fs/2));%该方法绘制的谱线的横轴坐标值只有在N=fs时才为实际频率值
f=(0:N-1)*fs/N;%频率序列
subplot(2,2,2);
plot(f(1:N/2),xmag(1:N/2)*2/N);%绘制Nyguist频率前的振幅谱,为得到真实的振幅大小而将变换后的结果*2/N
%plot(f(1:N/2),pxx(1:N/2));%绘制Nyguist频率前的功率谱
xlabel('频率/Hz');
ylabel('振幅');
title('原信号的振幅谱');
%先加载FIR滤波系数文件(含数组b),然后进行滤波处理,并画出输出信号
c=conv(round(x),b);%卷积后c的点数Nc为Nx+Nb-1
subplot(2,2,3);
plot(c);
xlabel('时域采样点');
ylabel('x');
title('滤波后的信号');
%对输出信号做FFT,并做功率谱分析
cc=fft(c);%,N
cmag=abs(cc);%得到振幅谱
%pcc=cc.*conj(cc);
%f=(0:(fs/2-1));
%subplot(2,2,4);
%plot(f,pcc(1:fs/2));
f=(0:N-1)*fs/N;%频率序列
subplot(2,2,4);
plot(f(1:N/2),cmag(1:N/2)*2/N);%绘制Nyguist频率前的振幅谱
%plot(f(1:N/2),pcc(1:N/2));%绘制Nyguist频率前的功率谱
xlabel('频率/Hz');
ylabel('振幅');
title('滤波后信号的振幅谱');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -