00001 /*This file is prepared for Doxygen automatic documentation generation.*/ 00015 /* Copyright (c) 2009 Atmel Corporation. All rights reserved. 00016 * 00017 * Redistribution and use in source and binary forms, with or without 00018 * modification, are permitted provided that the following conditions are met: 00019 * 00020 * 1. Redistributions of source code must retain the above copyright notice, this 00021 * list of conditions and the following disclaimer. 00022 * 00023 * 2. Redistributions in binary form must reproduce the above copyright notice, 00024 * this list of conditions and the following disclaimer in the documentation 00025 * and/or other materials provided with the distribution. 00026 * 00027 * 3. The name of Atmel may not be used to endorse or promote products derived 00028 * from this software without specific prior written permission. 00029 * 00030 * 4. This software may only be redistributed and used in connection with an Atmel 00031 * AVR product. 00032 * 00033 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 00034 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00035 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 00036 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 00037 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00038 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00039 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00040 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00041 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00042 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 00043 * 00044 */ 00045 00046 #include "dsp.h" 00047 00048 #if defined(FORCE_ALL_GENERICS) || \ 00049 defined(FORCE_GENERIC_GEN16_SIN) || \ 00050 !defined(TARGET_SPECIFIC_GEN16_SIN) 00051 00052 // sin(2*pi*f/fs*t + phase) 00053 dsp16_t dsp16_gen_sin(dsp16_t *vect1, int size, int f, int fs, dsp16_t phase) 00054 { 00055 int t; 00056 dsp16_t s, angle; 00057 00058 angle = phase; 00059 // Calculate the angle "s" which is used to increment the argument of the sine each transition in the loop 00060 s = (((S32) f) << (DSP16_QB + 1))/fs; 00061 00062 // Main loop 00063 for(t=0; t<size; t++) 00064 { 00065 vect1[t] = dsp16_op_sin(angle); 00066 // Increment the argument of the sine 00067 angle += s; 00068 } 00069 00070 // Return the current phase of the generated signal 00071 return angle; 00072 } 00073 00074 #endif 00075 00076 #if defined(FORCE_ALL_GENERICS) || \ 00077 defined(FORCE_GENERIC_GEN32_SIN) || \ 00078 !defined(TARGET_SPECIFIC_GEN32_SIN) 00079 00080 // sin(2*pi*f/fs*t + phase) 00081 dsp32_t dsp32_gen_sin(dsp32_t *vect1, int size, int f, int fs, dsp32_t phase) 00082 { 00083 int t; 00084 dsp32_t s, angle; 00085 00086 angle = phase; 00087 // Calculate the angle "s" which is used to increment the argument of the sine each transition in the loop 00088 s = (((long long) f) << (DSP32_QB + 1))/fs; 00089 00090 // Main loop 00091 for(t=0; t<size; t++) 00092 { 00093 vect1[t] = dsp32_op_sin(angle); 00094 // Increment the argument of the sine 00095 angle += s; 00096 } 00097 00098 // Return the current phase of the generated signal 00099 return angle; 00100 } 00101 00102 #endif