{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chapter 11: Multirate Digital Signal Processing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 11.1: Time_Decimatio.sce" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "//Example 11.1\n", "\n", "clc;clear;close;\n", "x=[0:6 0:6];\n", "y=x(1:3:length(x));\n", "disp(x,'Input signal x(n)=');\n", "disp(y,'Output signal of decimation process by factor three y(n)');\n", "subplot(2,1,1);\n", "plot2d3(x);title('Input signal x(n)');\n", "subplot(2,1,2);\n", "plot2d3(y);title('Output signal y(n)');" ] } , { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 11.2: Interpolation.sce" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "//Example 11.2\n", "\n", "clc;clear;close;\n", "x=0:5;\n", "y=[];\n", "for i=1:length(x)\n", " y(1,2*i)=x(i);\n", "end\n", "disp(x,'Input signal x(n)=');\n", "disp(y,'Output signal of interpolation process with factor two y(n)');\n", "subplot(2,1,1);\n", "plot2d3(x);title('Input signal x(n)');\n", "subplot(2,1,2);\n", "plot2d3(y);title('Output signal y(n)');" ] } , { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 11.4: Polyphase_Decompositio.sce" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "//Example 11.4\n", "\n", "clc;clear;\n", "z=poly(0,'z');\n", "num=1-4*z^-1;\n", "den=1+5*z^-1;\n", "H=num/den;\n", "num1=num*(1-5*z^-1);\n", "den1=den*(1-5*z^-1);\n", "H1=num1/den1;\n", "c=coeff(numer(num1));\n", "clength=length(c);\n", "c=[c zeros(1,pmodulo(clength,2))]; //make length of 'c' multiple of 2\n", "c0=[];c1=[];\n", "for n=1:ceil(clength/2) //loop to separate even and odd powers of z\n", " c0=[c0 c(2*n-1) 0];\n", " c1=[c1 c(2*n) 0];\n", "end\n", "E0=poly(c0,'z','coeff')/z^n/den1;\n", "E1=poly(c1,'z','coeff')/z^(n-2)/den1;\n", "disp('Polyphase Components')\n", "disp(E0,'E0(z)');\n", "disp(E1,'E1(z)');" ] } , { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 11.5: Decimator_implementation.sce" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "//Example 11.5\n", "\n", "clc;clear;\n", "\n", "function [N,R]=func(Fs,Fp,Ft,Fti,dp,ds,M)\n", " dF=(Fs-Fp)/Ft; //Normalised transition bandwidth\n", " N=round((-20*log10(sqroot(dp*ds))-13)/(14.6*dF)); //FIR Filter length\n", " R=N*Fti/M; //Number of Multiplications per second\n", "endfunction\n", "\n", "Ft=20000; //Sampling rate of input signal\n", "Fp=40; //Passband frequency\n", "Fs=50; //Stopband frequency\n", "dp=0.01; //Passband ripple\n", "ds=0.002; //Stopband ripple\n", "M=100; //Decimation Factor\n", "Fti=Ft; //Input sampling rate\n", "//Single stage implementation\n", "[N1,R1]=func(Fs,Fp,Ft,Fti,dp,ds,M);\n", "\n", "//Two stage implementation\n", "//Stage 1 F(z) with decimation factor 50\n", "Fpf=Fp; //Passband frequency\n", "Fsf=190; //Stopband frequency\n", "dpf=0.005; //Passband ripple\n", "dsf=0.002; //Stopband ripple\n", "Mf=50; //Decimation Factor\n", "Fti=Ft; //Input sampling rate\n", "[N2f,R2f]=func(Fsf,Fpf,Ft,Fti,dpf,dsf,Mf);\n", "\n", "//Stage 2 G(z) with decimation factor 2\n", "Fpg=50*Fp; //Passband frequency\n", "Fsg=50*Fs; //Stopband frequency\n", "dpg=0.005; //Passband ripple\n", "dsg=0.002; //Stopband ripple\n", "Mg=2; //Decimation Factor\n", "Fti=Ft/50; //Input sampling rate\n", "[N2g,R2g]=func(Fsg,Fpg,Ft,Fti,dpg,dsg,Mg);\n", "N2=N2f+50*N2g+2; //Total filter length\n", "R2=R2f+R2g; //Total Number of Multiplications per second\n", "disp(R1,'Number of Multiplications per second =',N1,'FIR filter length =','For Single stage implementation:');\n", "disp('For Two stage implementation:');\n", "disp(R2f,'Number of Multiplications per second =',N2f,'FIR filter length =','For F(z):');\n", "disp(R2g,'Number of Multiplications per second =',N2g,'FIR filter length =','For G(z):');\n", "disp(R2,'Total Number of Multiplications per second =',N2,'Overall FIR filter length =');\n", "" ] } , { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 11.6: Decimator_implementation.sce" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "//Example 11.6\n", "\n", "clc;clear;\n", "\n", "\n", "function [N,R]=func(Fs,Fp,Ft,Fti,dp,ds,M)\n", " dF=(Fs-Fp)/Ft; //Normalised transition bandwidth\n", " N=round((-20*log10(sqroot(dp*ds))-13)/(14.6*dF)); //FIR Filter length\n", " R=N*Fti/M; //Number of Multiplications per second\n", "endfunction\n", "\n", "Ft=10000; //Sampling rate of input signal\n", "Fp=150; //Passband frequency\n", "Fs=180; //Stopband frequency\n", "dp=0.002; //Passband ripple\n", "ds=0.001; //Stopband ripple\n", "M=20; //Decimation Factor\n", "Fti=Ft; //Input sampling rate\n", "//Single stage implementation\n", "[N1,R1]=func(Fs,Fp,Ft,Fti,dp,ds,M);\n", "\n", "//Two stage implementation\n", "//Stage 1 F(z) with decimation factor 50\n", "Fpf=Fp; //Passband frequency\n", "Fsf=720; //Stopband frequency\n", "dpf=0.001; //Passband ripple\n", "dsf=0.001; //Stopband ripple\n", "Mf=10; //Decimation Factor\n", "Fti=Ft; //Input sampling rate\n", "[N2f,R2f]=func(Fsf,Fpf,Ft,Fti,dpf,dsf,Mf);\n", "\n", "//Stage 2 G(z) with decimation factor 2\n", "Fpg=10*Fp; //Passband frequency\n", "Fsg=10*Fs; //Stopband frequency\n", "dpg=0.001; //Passband ripple\n", "dsg=0.001; //Stopband ripple\n", "Mg=2; //Decimation Factor\n", "Fti=Ft/10; //Input sampling rate\n", "[N2g,R2g]=func(Fsg,Fpg,Ft,Fti,dpg,dsg,Mg);\n", "N2=N2f+10*N2g+2; //Total filter length\n", "R2=R2f+R2g; //Total Number of Multiplications per second\n", "\n", "disp(R1,'Number of Multiplications per second =',N1,'FIR filter length =','For Single stage implementation:');\n", "disp('For Two stage implementation:');\n", "disp(R2f,'Number of Multiplications per second =',N2f,'FIR filter length =','For F(z):');\n", "disp(R2g,'Number of Multiplications per second =',N2g,'FIR filter length =','For G(z):');\n", "disp(R2,'Total Number of Multiplications per second =',N2,'Overall FIR filter length =');" ] } ], "metadata": { "kernelspec": { "display_name": "Scilab", "language": "scilab", "name": "scilab" }, "language_info": { "file_extension": ".sce", "help_links": [ { "text": "MetaKernel Magics", "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" } ], "mimetype": "text/x-octave", "name": "scilab", "version": "0.7.1" } }, "nbformat": 4, "nbformat_minor": 0 }