Professional Documents
Culture Documents
PB Noi
PB Noi
1
2. Pt calc er medie patratica e= 𝑁 ∑𝑁−1 2
𝑘=0 (𝑥[𝑘] − 𝑦[𝑘]) intre 2 vectori cu val fractionare lung N=8 b) optimizare
#define N 8
Word16 Eroare(word16 x[N], word16 y[N] ) {
Int i; Word16 e=0; Word16 temp;
For(i=0,i<N,i++) {
temp=sub(x[i],y[i]);
e=L_mac(e,temp,temp);
e=shr(e,3); / % N=8
e=round(e); } return(e); }
3. Hilbert optimizat
#pragma align X 8
#pragma align Y 8
void Hilbert_Transformer(Word16* X, Word16* Y, short N)
{
int i;
for(i=0; i<=N/2; i=i+2)
{
Y[2*i] = X[2*i+1];
Y[2*i+1] = -X[2*i];
Y[2*i+2] = X[2*i+3];
Y[2*i+3] = -X[2*i+2]; }
for(i=N/2+1; i<N; i=i+2){
y[2*i] = -X[2*i+1];
y[2*i+1] = X[2*i];
y[2*i+2] = -X[2*i+3];
y[2*i+3] = X[2*i+2]; }}
1
2. ec matriceala care calc recursiv iesirile [𝑐̀ 𝑠́ ]=0.5 [ √3 ][c s ] pe baza val anterioare c s.
−1 √3
Este osc in cuad(form quad si matrice) , identif termenii cosw0=sqrt(3) / 2, sinw0=1/2 . sin(pi/6)=1/2
b)relatiile de recurenta sunt cele de mai sus
cosw0(n+1)=cos(w0n)*cosw0-sin(w0n)*sinw0
sinw0(n+1)=sin(w0n)*cosw0+cos(w0n)*sinw0
#include <stdio.h>
#include <prototype.h>
#define MAX_16 (Word16)0x7fff
Word16 c[DataSize],s[DataSize],c0,s0;
Word32 temp;
int main(){
int i;
s0=WORD16(-0.866); //cos(w0)
c0=WORD16(0.5); //sin(w0)
s[0]=MAX_16; //cos(0)
c[0]=0; //sin(0)
for (i = 0; i < DataSize-1; i++) {
temp=L_mult(c[i],s0);
c[i+1]=mac_r(temp,s[i],c0);
temp=L_mult(s[i],s0);
#include <prototype.h>
#include "constants.h"
Word16 Prod(Word16 a[], Word16 x)
{ Word16 i;
Word32 sum;
Word16 prod;
sum=0L;
prod=0x7fff;
for(i=0;i<DataBlockSize;i++)
{ sum=L_mac(sum,a[i],prod);
prod=mult(prod,x);
}
return(round(sum));
}
#include <prototype.h>
#include "constants.h"
#include <prototype.h>
#include <stdio.h>
#define N 16
Word16 x[N]={WORD16(0.05),WORD16(0.1),WORD16(0.15),WORD16(0.2),WORD16(0.25),WORD16(0.3),....)};
Word16 sum,term;
int main(){
short i;
for(i=0;i<N;i++){
term=mult(x[i],x[i]);
sum=add(sum,mult(term,term));}
printf("Suma este este:%d",sum);
return(0);}
b)Optimizat
#include <prototype.h>
#include <stdio.h>
#define N 16
Word16 x[N]={WORD16(0.05),WORD16(0.1),WORD16(0.15),WORD16(0.2),WORD16(0.25),WORD16(0.3),..)};
Word16 sum0,sum1,sum2,sum3;
int main(){
short i;
for(i=0;i<N;i=i+4){
sum0=add(sum0,mult(mult(x[i],x[i]),mult(x[i],x[i])));
sum1=add(sum1,mult(mult(x[i+1],x[i+1]),mult(x[i+1],x[i+1])));
sum2=add(sum2,mult(mult(x[i+2],x[i+2]),mult(x[i+2],x[i+2])));
sum3=add(sum3,mult(mult(x[i+3],x[i+3]),mult(x[i+3],x[i+3])));}
sum0=add(sum0.sum1);
sum2=add(sum2,sum3);
sum0=add(sum0,sum2);
printf("Suma este este:%d",sum0);
return(0);}
x. Calc polin de ordin N . In main declar polin w16 x[n] (val lu x), coef[], short N, open.
Word16 poly(Word16 x,Word16* coef, short N)
{
short i;
Word16 p,temp;
p = coef[N];
for(i=N-1;i>=0;i--){
temp = mult_r(p,x);//p=p*x;
p = add(coef[i],temp);//p=p*x+c(i);}
return(p);}