久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2814|回復(fù): 1
收起左側(cè)

基于DSP濾波器的設(shè)計(jì)與實(shí)現(xiàn)

[復(fù)制鏈接]
ID:1024008 發(fā)表于 2022-5-19 17:13 來自手機(jī) | 顯示全部樓層 |閱讀模式
MATLAB仿真程序
窗函數(shù)設(shè)計(jì)法:
Fs=100;
t=(1:100)/Fs;
s1=sin(2*pi*t*5);
s2=sin(2*pi*t*15);
s3=sin(2*pi*t*30);
s=s1+s2+s3;
figure(1);
subplot(2,2,1);
plot(t,s)%畫出信號的時域波形
xlabel('Time(seconds)')
ylabel('Time waveform')
title('原始信號的時域波形')%程序功能:畫出信號的頻譜圖。
S=fft(s,512);%對s進(jìn)行快速傅立葉變換
w=(0:255)/256*(Fs/2);
subplot(2,2,2);
plot(w,abs(S(1:256)))%畫出信號的幅度圖
xlabel('Frequency(Hz)')
ylabel('幅度')
title('幅度譜')
axis([0 35 0 60]);
subplot(2,2,3);
plot(w,angle(S(1:256)))%畫出信號的相位圖
xlabel('Frequency(Hz)')
ylabel('相位')
title('相位譜')%程序功能:設(shè)計(jì)低通濾波器并畫出其頻譜圖:
%%%%%%%%%%%%%%低通
fb=10;
fc=13;%設(shè)置濾波器截止頻率
fs=100;
wb=2*pi*fb/fs;
ws=2*pi*fc/fs;
wc=0.5*(wb+ws);
tr_width=ws-wb;%過渡帶寬
%%%%%%%%%%%%%%高通
%fb=25;
%fc=22;%設(shè)置濾波器截止頻率
%fs=100;
%wb=2*pi*fb/fs;
%ws=2*pi*fc/fs;
%wc=0.5*(wb+ws);
%tr_width=wb-ws;%過渡帶寬
%%%%%%%%%%%%%%%%%%%帶通
%fc1=9;fb1=12;fb2=18;fc2=21;fs=100;
%wb1=2*pi*fb1/fs;ws1=2*pi*fc1/fs;wb2=2*pi*fb2/fs;
%ws2=2*pi*fc2/fs;wc1=0.5*(wb1+ws1);wc2=0.5*(wb2+ws2);
%tr_width=min((wb1-ws1),(ws2-wb2));
M=ceil(1.8*pi/tr_width);
n=[0:1:M-1];
hd=ideal_lp(wc,M);
%w_box=(boxcar(M))'
%w_box=(triang(M))'
%w_box=(hamming(M))'
w_box=(kaiser(M,2.5))'
h=hd.*w_box;
[H,w]=freqz(h,[1],1000,'whole');
H=(H(1:501))';
w=(w(1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(h,[1],w);
figure(2);
subplot(2,2,1);stem(n,hd);%理想脈沖響應(yīng)
xlabel('n');
ylabel('hd(n)');
title('Ideal Impulse Response');
subplot(2,2,2);stem(n,w_box);%矩形窗
xlabel('n');
ylabel('w(n)');
title('Kaiser Window');
subplot(2,2,3);stem(n,h);%實(shí)際脈沖響應(yīng)
xlabel('n');
ylabel('h(n)');
title('Actual Impulse Response');
subplot(2,2,4);plot(w*fs/(2*pi),db);%幅度響應(yīng)(dB)
axis([0 40-50 0]);
xlabel('Frequency(Hz)');
ylabel('Decibels');
title('Magnitude Response in dB');
sf=filter(h,[1],s);%sf為濾濾波后的信號
figure(3);
subplot(2,2,1);
plot(t,sf)%畫出濾波后信號的時域波形
xlabel('Time(seconds)')
ylabel('Time waveform')
axis([0 1-1 1]);
title('濾波后信號的時域波形')
SF=fft(sf,512);%對sf進(jìn)行快速傅里葉變換
w=(0:255)/256*(Fs/2);
subplot(2,2,2);
plot(w,abs(SF(1:256)))%畫出濾波后信號的幅度圖
xlabel('Frequency(Hz)')
ylabel('幅度譜')
title('濾波后信號的幅度譜');
subplot(2,2,3);
plot(w,angle(SF(1:256)))%畫出濾波后信號的相位圖
xlabel('Frequency(Hz)')
ylabel('相位譜')
title('濾波后信號的相位譜')%程序功能:對濾波前后信號進(jìn)行比較
subplot(2,2,4);
plot(w,abs([S(1:256)'SF(1:256)']))%將濾波前后信號的幅度譜畫在一起
xlabel('Frequency(Hz)')
ylabel('Mag.of Fourier transform')
legend({'before','after'})%對兩個曲線進(jìn)行區(qū)分命名
title('濾波前后信號對比')
頻率采樣設(shè)計(jì)法:
N=100;Fs=100; %數(shù)據(jù)總數(shù)和采樣頻率
fc1=12;
fc2=18;
n=[0:N-1];t=n/Fs;%時間序列
f1=5;f2=15;f3=30;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);%輸入信號
%設(shè)計(jì)25階的低通濾波器,歸一化截止頻率為fc*2/Fs
b=fir1(25,0.2);
y1=fftfilt(b,x,256);%對數(shù)據(jù)進(jìn)行濾波
n1=1:100;t1=t(n1);%選擇采樣點(diǎn)間隔
x1=x(n1);%與采樣點(diǎn)對應(yīng)的輸入信號
subplot(2,2,1);plot(t1,x1);%繪制輸入信號
title('輸入信號');
S=fft(x,512);% 對x進(jìn)行快速傅立葉變換
w=(0:255)/256*(Fs/2);   
subplot(2,2,2);
plot(w,abs(S(1:256)))% 畫出信號的幅度圖
xlabel('Frequency (Hz)')
ylabel('幅度')
title('幅度譜')
n2=n1;t2=t(n2);%輸出信號,扣除了相位延遲N/2
y2=y1(n2);
subplot(2,2,3);plot(t2,y2);%繪制輸出信號
title('輸出信號');
xlabel('時間/s')
SF=fft(y1,512);% 對sf進(jìn)行快速傅里葉變換   
w=(0:255)/256*(Fs/2);
subplot(2,2,4);
plot(w,abs(SF(1:256)))% 畫出濾波后信號的幅度圖
xlabel('Frequency (Hz)')
ylabel('幅度譜')
title('濾波后信號的幅度譜');
figure(2);
[H,f]=freqz(b,1,512,Fs);
plot(f,20*log10(abs(H)));

DSP實(shí)現(xiàn)程序

FIR.c程序:
#include<math.h>
#define FIRNUMBER 25
#define PI 3.1415926
float InputWave();
float FIR();
FloatfHn[FIRNUMBER]={51455693,35039587,0,-43569197,-79886877,-91884544,-66619233,0,100778399,218060512,327780957,405671856,433829342,405671856,327780957,218060512,100778399,0,-66619233,-91884544,-79886877,-43569197,0,35039587,51455693};
float fXn[FIRNUMBER]={0.0};
float fInput,fOutput;
float fSignal1,fSignal2,fSignal3;
float fStepSignal1,fStepSignal2,fStepSignal3;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
main()
{
nIn=0;nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=0.0;
fStepSignal1=2*PI/20;
fStepSignal2=6*PI/20;
fStepSignal3=12*PI/20;
while(1)
{
        fInput=InputWave();
        fIn[nIn]=fInput;
        nIn++;nIn%=256;
        fOutput=FIR();
        fOut[nOut]=-fOutput;
        nOut++;                                /*break point*/
        if(nOut>=256)
        {
                nOut=0;               
        }
        }
}
float InputWave()
{
        for(i=FIRNUMBER-1;i>0;i--)
                fXn[i]=fXn[i-1];
        fXn[0]=sin(fSignal1)+sin(fSignal2)+sin(fSignal3);
        fSignal1+=fStepSignal1;
        if(fSignal1>=f2PI)        fSignal1-=f2PI;
        fSignal2+=fStepSignal2;
        if(fSignal2>=f2PI)        fSignal2-=f2PI;
        fSignal3+=fStepSignal3;
        if(fSignal3>=f2PI)        fSignal3-=f2PI;
        return(fXn[0]);
}
float FIR()
{
        float fSum;
        fSum=0;
        for(i=0;i<FIRNUMBER;i++)
        {
                fSum+=(fXn[i]*fHn[i]);
        }
        return(fSum);
}

Test.cmd程序:
-heap 100
-stack 400
-sysstack 400
-l rts55x.lib
MEMORY
{
        PAGE 0:PROG(R):origin=0x80000,length=0x10000
        PAGE 0:BOOT(R):origin=0x3FF000,length=0xFC0
        PAGE 0:RESET(R):origin=0x3FFC0,length=0x2
        //PAGE 0:VECTORS(R):origin=0x3FFC2,length=0x3E
        PAGE 1:M0RAM(RW):origin=0x000000,length=0x400
        PAGE 1:M1RAM(RW):origin=0x000400,length=0x400
        PAGE 1:L0L1RAM(RW):origin=0x008000,length=0x2000
        PAGE 1:H0RAM(RW):origin=0x3F8000,length=0x2000
}
SECTIONS
{
        .reset:>RESET,PAGE=0
        .pinit:>PROG,PAGE=0
        .cinit:>PROG,PAGE=0
        .text:>PROG,PAGE=0
        .const:>L0L1RAM,PAGE=1
        .bass:>L0L1RAM,PAGE=1
//        .stack:>M1RAM,PAGE=1
        .sysmem:>M0RAM,PAGE=1
        .ebss:>H0RAM,PAGE=1
        .econst:>H0RAM,PAGE=1
        .esysmem:>H0RAM,PAGE=1
}

實(shí)時采樣濾波程序

#include"myapp.h"
#include"ICETEK-VC5509-EDU.h"
#include"scancode.h"
#include"fir.h"
#define FIRNUMBER 65
//采樣頻率為30KHZ
/*float fHn[FIRNUMBER]={16301406,9209864,0,-9845027,-18630178,-24725447,-26849895,-24316004,-17191312,-6345307,6633730,19647214,30395005,36741961,37088170,30685000,17844111,0,-20393269,-40126538,-55632255,-63463388,-60790011,-45843500,-18242759,20848867,68765249,121580021,174524316,222529022,260822498,285505769,294029020,285505769,260822498,222529022,174524316,121580021,68765249,20848867,-18242759,-45843500,-60790011,-63463388,-55632255,-40126538,-20393269,0,17844111,30685000,37088170,36741961,30395005,19647214,6633730,-6345307,-17191312,-24316004,-26849895,-24725447,-18630178,-9845027,0,9209864,16301406};//矩形窗-低通-截止頻率為2000HZ*/
/*float fHn[FIRNUMBER]={4385199,-21652749,0,23146042,-5011656,-23774038,10558454,23380350,-16529809,-21807507,22798757,18891210,-29225438,-14448411,35661057,8254493,-41952202,0,47945373,-10794336,-53491585,24956346,58450876,-44079491,-62696582,71653236,66119236,-116901752,-68629953,213966342,70163187,-671235226,989502839,-671235226,70163187,213966342,-68629953,-116901752,66119236,71653236,-62696582,-44079491,58450876,24956346,-53491585,-10794336,47945373,0,-41952202,8254493,35661057,-14448411,-29225438,18891210,22798757,-21807507,-16529809,23380350,10558454,-23774038,-5011656,23146042,0,-21652749,4385199
};//矩形窗-高通-截止頻率為8000HZ*/
/*float fHn[FIRNUMBER]={-9538698,5033186,0,-5380303,10901369,32674632,21449931,-25996592,-59477249,-32449821,33924813,67973998,
32495740,-29352537,-49011948,-17955197,9751798,0,-11144913,23479873,73517922,50699837,-64991479,-158605996,-93293235,106620840,237908995,129982959,-139424552,-294071690,-152619173,156028776,314350677,156028776,-152619173,-294071690,-139424552,129982959,237908995,106620840,-93293235,-158605996-64991479,50699837,73517922,23479873,-11144913,0,9751798,-17955197,-49011948,-29352537,32495740,67973998,33924813,-32449821,-59477249,-25996592,21449931,32674632,10901369,-5380303,0,5033186,-9538698};//矩形窗-帶通-截止頻率分別為4000HZ和6000HZ*/
/*float fHn[FIRNUMBER]={-290945,307040,0,-656431,1662544,5979764,4579795,-6343493,-16327341,-9897702,11382358,24879758,12885221,-12534175,-22424115,-8762585,5056567,0,-6458808,14323456,47090642,34021333,-45593858,-116105537,-71139736,84554657,195928093,111011133,-123327334,-269089380,-144308820,152291886,316410164,152291886,-144308820,-269089380,-123327334,111011133,195928093,84554657,-71139736,-116105537,-45593858,34021333,47090642,14323456,-6458808,0,5056567,-8762585,-22424115,-12534175,12885221,24879758,11382358,-9897702,-16327341,-6343493,4579795,5979764,1662544,-656431,0,307040,-290945
};//三角窗-帶通-截止頻率分別為4000HZ和6000HZ*/
/*floatfHn[FIRNUMBER]={505497,571185,0,-1221154,-2888554,-4600328,-5828195,-6032198,-4797831,-1967642,2262788,7310981,12252903,15950848,17251231,15224377,9406699,0,-12015279,-24886000,-36227584,-43295160,-43356425,-34117910,-14142427,16809284,57573973,105563471,156944954,207014767,250726453,283307635,300882930,283307635,250726453,207014767,156944954,105563471,57573973,16809284,-14142427,-34117910,-43356425,-43295160,-36227584,-24886000,-12015279,0,9406699,15224377,17251231,15950848,12252903,7310981,2262788,-1967642,-4797831,-6032198,-5828195,-4600328,-2888554,-1221154,0,571185,505497};//三角窗-低通-截止頻率為2000HZ*/
/*float fHn[FIRNUMBER]={13600,-1343049,0,2871346,-777141,-4423876,
2292172,5800825,-4613803,-6763239,7777725,7030558,-11782925,-6273312,16589535,4095992,-22118334,0,28251990,-6695372,-34838023,17027560,41693427,-32809268,-48610782,57777387,55365641,-101514432,-61724906,199074418,67455869,-666152186,1012697467,-666152186,67455869,199074418,
-61724906,-101514432,55365641,57777387,-48610782,-32809268,41693427,17027560,-34838023,-6695372,28251990,0,-22118334,4095992,16589535,-6273312,-11782925,7030558,7777725,-6763239,-4613803,5800825,2292172,-4423876,-777141,2871346,0,-1343049,136000};//三角窗-高通-截止頻率為8000HZ*/
/*float fHn[FIRNUMBER]={354949,-1801155,0,2337365,-583209,-3230861,
1682805,4362491,-3591280,-5475932,6561229,6176762,-10762379,-5942025,16245870,4133380,-22921097,0,30548925,-7355977,-38753080,19110559,47049184,-37098237,-54888573,64927608,61712024,-111854596,-67007120,212199197,70362374,-677639284,1001160992,-677639284,70362374,212199197,-67007120,-111854596,61712024,64927608,-54888573,-37098237,47049184,19110559,-38753080,-7355977,30548925,0,-22921097,4133380,16245870,-5942025,-10762379,6176762,6561229,-5475932,-3591280,4362491,1682805,-3230861,-583209,2337365,0,-1801155,354949};//海明窗-高通-截止頻率為8000HZ*/
/*floatfHn[FIRNUMBER]={-692715,375638,0,-487467,1138184,3983956,3067242,-4351996,-11593666,-7310598,8759514,19940336,10736487,-10830501,-20032689-8066658,4780286,0,-6371100,14355843,47786201,34832727,-46935995,-119763600,-73278532,86681062,199223862,111585500,-122133566,-261661618,-137318423,141324373,285357838,141324373,-137318423,-261661618,-122133566,111585500,199223862,86681062,-73278532,-119763600,-46935995,34832727,47786201,14355843,-6371100,0,4780286,-8066658,-20032689,-10830501,10736487,19940336,8759514,-7310598,-11593666,-4351996,3067242,3983956,1138184,-487467,0,375638,-692715};//海明窗-帶通-截止頻率分別為4000HZ和6000HZ*/
/*float fHn[FIRNUMBER]={1271369,738178,0,-957936,-2088958,-3237644,
-4123308,-4371651,-3598820,-1535233,1839507,6189731,10784975,14559497,16279978,14805080,9393884,0,-12520041,-26347887,-38834443,-46825811,-47147966,-37176127,-15388570,18203115,61841590,112089439,164184768,212644718,252026319,277720788,286646563,277720788,252026319,212644718,
164184768,112089439,61841590,18203115,-15388570,-37176127,-47147966,-46825811,-38834443,-26347887,-12520041,0,9393884,14805080,16279978,14559497,10784975,6189731,1839507,-1535233,-3598820,-4371651,-4123308,-3237644,-2088958,-957936,0,738178,1271369};//海明窗-低通-截止頻率為2000HZ*/
/*float fHn[FIRNUMBER]={15308281,8682063,0,-9348794,-17752396,-23639061,
-25752532,-23394095,-16588436,-6140126,6436605,19112642,29640752,35913963,36332671,30122850,17551737,0,-20130983,-39674160,-55086915,-62927241,-60351678,-45564301,-18149952,20761262,68529092,121241486,174131173,222119807,260419957,285115772,293644766,285115772,260419957,222119807,174131173,121241486,68529092,20761262,-18149952,-45564301,-60351678,-62927241,-55086915,-39674160,-20130983,0,17551737,30122850,36332671,35913963,29640752,19112642,6436605,-6140126,-16588436,-23394095,-25752532,-23639061,-17752396,-9348794,0,8682063,15308281};//凱塞窗-低通-截止頻率為2000HZ*/
/*float fHn[FIRNUMBER]={4126578,-20454185,0,22024946,-4785426,-22776576,10147922,22540548,-15983197,-21146090,22167137,18415306,-28559292,-14152087,35007052,8120069,-41350367,0,47426845,-10694769,-53077036,24796812,58149711,-43901860,-62506940,71500076,66028767,-116817918,-68617310,214015633,70200132,-671707972,990258365,-671707972,70200132,214015633,
-68617310,-116817918,66028767,71500076,-62506940,-43901860,58149711,24796812,-53077036,-10694769,47426845,0,-41350367,8120069,35007052,-14152087,-28559292,18415306,22167137,-21146090,-15983197,22540548,10147922,-22776576,-4785426,22024946,0,-20454185,4126578};//凱塞窗-高通-截止頻率為8000HZ*/
float fHn[FIRNUMBER]={-8921523,4725647,0,-5088549,10345930,31113245,20490463,-24910301,-57160469,-31274147,32784231,65858385,31561813,-28575587,-47820312,-17555315,9553411,0,-10957294,23121729,72504261,50069185,-64263159,-157005573,-92445046,105745502,236137702,129099325,-138550583,-292349506,-151770312,155188514,312676316,155188514,-151770312,-292349506,-138550583,129099325,236137702,105745502,-92445046,-157005573,
-64263159,50069185,72504261,23121729,-10957294,0,9553411,-17555315,-47820312,-28575587,31561813,65858385,32784231,-31274147,-57160469,-24910301,20490463,31113245,10345930,-5088549,0,4725647,-8921523};//凱塞窗-帶通-截止頻率分別為4000HZ和6000HZ*/
void InitADC();
void wait(unsigned int cycles);
void EnableAPLL();
unsigned int nADC0[NX],nADC1[NX];
main()
{
        int i;
        unsigned int uWork;
for(i=0;i<NX;i++)x[i]=0;
for(i=0;i<NH+2;i++)db[i]=0;
EnableAPLL();
SDRAM_init();
        InitCTR();
        InitADC();
PLL_Init(144);
        while(1)
        {
                for(i=0;i<NX;i++)
                {
                        ADCCTL=0x8000;        //啟動AD轉(zhuǎn)換,通道0
                        do
                        {
                                uWork=ADCDATA;
                        }while(uWork&0x8000);
                        nADC0[i]=uWork&0x0fff;
                        ADCCTL=0x9000;        //啟動AD轉(zhuǎn)換,通道1
                        do
                        {
                                uWork=ADCDATA;
                        }while(uWork&0x8000);
                        nADC1[i]=uWork&0x0fff;
                        uWork=(nADC0[i]+nADC1[i]);        //混頻
                        uWork>>=1;//限幅,混頻后仍然產(chǎn)生12位數(shù)據(jù)
                        x[i]=uWork;
                }
r=FIR();        //調(diào)用濾波程序計(jì)算當(dāng)前輸出
        }                                                        //在此加軟件斷點(diǎn)
}
void InitADC()
{
        ADCCLKCTL=0x23;//4MHz ADCLK
        ADCCLKDIV=0x4f00;
}
void wait(unsigned int cycles)
{
int i;
for(i=0;i<cycles;i++){}
}
void EnableAPLL()
{
wait(25);
*(ioport volatile unsigned short*)0x1f00=0;
*(ioport volatile unsigned short*)0x1f00=0x3000;
*(ioport volatile unsigned short*)0x1f00|=0x4F8;
wait(25);
*(ioport volatile unsigned short*)0x1f00|=2;
wait(30000);
*(ioport volatile unsigned short*)0x1e80=1;
wait(60000);
}
float FIR()
{
float fSum;
fSum=0;
for(i=0;i<FIRNUMBER;i++)
{
        fSum+=(fXn[i]*fHn[i]);
}
return(fSum);
}

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:1104358 發(fā)表于 2023-12-15 17:30 | 顯示全部樓層
我也想找DSP/嵌入式軟件高級工程師幫我解決問題,這個論壇有人擅長DSP/嵌入式嗎?最近都在線活躍,高手請聯(lián)系我,急需幫助。我們用的是德州儀器TMS320F280049C芯片,光伏微逆變器開發(fā)時高壓并網(wǎng)遇到了問題。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美中文字幕一区二区三区亚洲 | 成人一区二区三区 | 日本不卡一区二区三区在线观看 | 可以免费看的毛片 | 日韩中文字幕在线观看 | 亚洲一二三在线观看 | 老牛影视av一区二区在线观看 | 亚洲国产一区二区三区在线观看 | 亚洲精品一二区 | av中文字幕在线 | 欧美一区二区在线播放 | 日韩欧美三区 | 免费在线h视频 | 中文在线播放 | 91人人看| 天天看逼| 九九天堂网 | 成人三级视频 | 激情av在线| 中文字幕第49页 | 久久久久久国产免费视网址 | 国产三级大片 | 欧美一区二区三区在线免费观看 | 国产精品亚洲一区二区三区在线 | 国产精品a一区二区三区网址 | 成人精品一区亚洲午夜久久久 | 欧美日韩一区二区三区不卡视频 | 日本 欧美 国产 | 国产精品久久久久久久久免费相片 | 成人国产精品色哟哟 | 国精产品一区二区三区 | 国产精品视频一区二区三区四区国 | 中文字幕一区二区三区在线视频 | 成人免费视频在线观看 | 一区二区三区视频在线 | 91精品国产乱码久久久 | 久久国产成人精品国产成人亚洲 | 国产精品美女一区二区三区 | 91av久久久 | 一区二区三区四区在线视频 | 国产精品www |