📄 xiaoiir_filter.m
字号:
clear all;
clc;
N=256; %number of sample.
fs=600; %frequency of sample.
dt=1/fs; %time interval of sample.
for k=1:N; %gerenate integrated signal with f1,f2,f3.
f1=250;
f2=100;
f3=270;
y(k)=sin(2*pi*f1*k*dt)+sin(2*pi*f2*k*dt)+sin(2*pi*f3*k*dt);
end
min(y);
max(y);
y=y*1024*8;
y=round(y);
n=1:256;
subplot(4,1,1)
plot(n,y,'b');
max(y);
A=y.';
%following code save data in vector into the file in the disc.
[filename,pathname] = uiputfile({'*.bin';'*.dat';'*.*'},'Save as');
fid = fopen([pathname,filename],'w');
if fid~=-1 %not equal to -1
count=fprintf(fid,'%x\n',y+(y<0)*2^16);% write the data in vector 'y' to the file whose number is 'fid'.
if(fclose(fid)==-1)
error('Can not close the file!');
end
else
error('Can not open the file!');
end
y
lp=200; %frequency of cut-off.
wn1=2*lp/fs; %归一化的截止频率。
[z1,p1,k1] = CHEBY1(3,0.5,wn1); %滤波器的零极点表示。
[b1,a1] = CHEBY1(3,0.5,wn1); %滤波器的传输函数表示。
[H,f]=freqz(b1,a1,N/2,fs); %滤波器的频率响应
subplot(4,1,2); %绘制滤波器的频率响应。
plot(f,abs(H),'b');
grid;
%hold on;
%b1=[0.1598,0.4768,0.4768,0.1589];
%a1=[-0.1268,0.5239,-0.1257];
%[H1,f]=freqz(b2,a2,N/2,fs);
%plot(f,abs(H1),'r');
b1=b1/(8*1.0711) %将参数按比列系数缩小。
a1=a1/(8*1.0711) %为DSP程序做准备,MATLAB 程序不需要。
yy1=filter(b1,a1,y); %滤波: input signal--->y, output signal--->yy1;
b1
a1
y=fft(y,N); %将原输入信号做FFT变换。
pyy=y.*conj(y); %做原信号的256点的功率谱分析。"A.*A" 表示矩阵对应的元素相乘,而不矩阵相乘
f=(0:(N/2-1));
for i=1:N/2-1; %还原为模拟频率。
f(i)=f(i)*fs/N;
end
%figure(1);
subplot(4,1,3);
plot(f,pyy(1:N/2)) %绘制原输入信号的功率谱图。
grid;
y=fft(yy1,N); %滤波后的输出信号的FFT变换。
pyy=y.*conj(y); %计算输出信号的功率谱密度。
f=(0:(N/2-1));
for i=1:N/2-1; %还原为模拟频率。
f(i)=f(i)*fs/N;
end
%figure(2);
subplot(4,1,4);
plot(f,pyy(1:N/2)); %绘制原输出信号的功率谱图。
grid;
%程序的整体思路:(1):产生滤波的输入信号。
% (2):根据截止频率、波纹系数、通带频率设置滤波器。([b1,a1] = CHEBY1(3,0.5,wn1);)
% (3):对输入信号滤波。(yy1=filter(b1,a1,y))
% (4):对输出信号做频谱分析。(FFT)
%本实列要求使用MATLAB产生滤波前的3正弦合成信号,然后设计一个3阶低通切比雪夫滤波器,
%滤除信号中的高频信号,并使用频谱分析方法,查看滤波效果。MATLAB仿真后,使用得到的滤波参数
%,进行DSP编程,在DSP中实现低通滤波,并使用CCS的频谱分析功能,查看DSP的滤波效果。
% 由于本实列前两个过程比较复杂,所以一般在MATLAB中验证算法,并设计滤波的参数,再将此参数
%应用到DSP汇编语言程序中,从而简化编程过程。然后将滤波后的信号通过DA输出,使用示波器查看程序
%运行的正确性。也可以将滤波后的信号存储在DSP的内部RAM中,使用CCS参看滤波后信号的时域和频域图。
%count=fprintf(fid,'%x\n',y+(y<0)*2^16);
%以上语句是把y向量中的数据以十六进制的格式写到文件中去。
%对于y向量中的正数,就直接写,如果是负数,对于32bit的要加上2^16后方能得到正确的结果。
%
%
%
%
%
%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -