Chirp Signal Generator

Dependencies:   mbed

Fork of TAU_ZOOLOG_Playback_Rev1_1 by Yossi_Students

Committer:
TauZoolog
Date:
Tue Jun 27 13:01:03 2017 +0000
Revision:
3:25cd717ad782
Child:
4:85dbf3e4d432
Sasha Father did extensive work on user interface and code implementations for STM32F446 Setup. For reference design.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TauZoolog 3:25cd717ad782 1 /*
TauZoolog 3:25cd717ad782 2 General Biquadratic Digital Filter Implementation
TauZoolog 3:25cd717ad782 3 ADC --> Filter --> DAC , Based on NUCLEO - F303RE
TauZoolog 3:25cd717ad782 4
TauZoolog 3:25cd717ad782 5 Pinout:
TauZoolog 3:25cd717ad782 6 ADC -- PA_0 -- A0
TauZoolog 3:25cd717ad782 7 DAC -- PA_4 -- A2
TauZoolog 3:25cd717ad782 8
TauZoolog 3:25cd717ad782 9 I/O -- PA_5 -- D13 (Status LED, Condition)
TauZoolog 3:25cd717ad782 10 I/O -- PA_6 -- D12 (Toggle Pin, Loop Freq)
TauZoolog 3:25cd717ad782 11 I/O -- PA_7 -- D11 (General Output Pin )
TauZoolog 3:25cd717ad782 12
TauZoolog 3:25cd717ad782 13 Make sure to use float variables in filter (Not double!).
TauZoolog 3:25cd717ad782 14 */
TauZoolog 3:25cd717ad782 15 #include "mbed.h"
TauZoolog 3:25cd717ad782 16 #include "config.h"
TauZoolog 3:25cd717ad782 17 #include "sounddata.h"
TauZoolog 3:25cd717ad782 18
TauZoolog 3:25cd717ad782 19 #define TEST_OUTPUT_MODE 4
TauZoolog 3:25cd717ad782 20
TauZoolog 3:25cd717ad782 21 // mbed variables, Settings
TauZoolog 3:25cd717ad782 22 AnalogIn in(A0);
TauZoolog 3:25cd717ad782 23 AnalogOut out(PA_4);
TauZoolog 3:25cd717ad782 24
TauZoolog 3:25cd717ad782 25 // DigitalOut led(LED1);
TauZoolog 3:25cd717ad782 26 DigitalOut mytoggle(PA_6);
TauZoolog 3:25cd717ad782 27
TauZoolog 3:25cd717ad782 28 // User Button as interrupt
TauZoolog 3:25cd717ad782 29 InterruptIn mybutton(USER_BUTTON);
TauZoolog 3:25cd717ad782 30
TauZoolog 3:25cd717ad782 31 // Serial over USB as input device
TauZoolog 3:25cd717ad782 32 Serial pc(SERIAL_TX, SERIAL_RX);
TauZoolog 3:25cd717ad782 33
TauZoolog 3:25cd717ad782 34 // ADC/DAC declarations
TauZoolog 3:25cd717ad782 35 ADC_HandleTypeDef hadc1;
TauZoolog 3:25cd717ad782 36 DAC_HandleTypeDef hdac1;
TauZoolog 3:25cd717ad782 37
TauZoolog 3:25cd717ad782 38 // Dac Register for direct method of setting DAC value`s
TauZoolog 3:25cd717ad782 39 __IO uint32_t Dac_Reg = 0;
TauZoolog 3:25cd717ad782 40
TauZoolog 3:25cd717ad782 41 // Variables
TauZoolog 3:25cd717ad782 42 uint16_t ADCValueIn=0;
TauZoolog 3:25cd717ad782 43 uint16_t ADCValueOut=0;
TauZoolog 3:25cd717ad782 44 float ADCFloat=0;
TauZoolog 3:25cd717ad782 45 float ADCFloatFiltered=0;
TauZoolog 3:25cd717ad782 46 float OutputADCFloat=0;
TauZoolog 3:25cd717ad782 47 float ADC2Float=(2.0f/4095.0f); //ADCvalue*(2/0xFFF)-1.0f // 12 bits range
TauZoolog 3:25cd717ad782 48 float Float2ADC=(4095.0f/2.0f); //(ADCvalue+1.0f)*(0xFFF/2) // 12 bits range
TauZoolog 3:25cd717ad782 49 // float ADC2Float= 1.0;
TauZoolog 3:25cd717ad782 50 // float Float2ADC= 1.0;
TauZoolog 3:25cd717ad782 51 uint16_t ADCValueMax = 0;
TauZoolog 3:25cd717ad782 52 uint16_t ADCValueMin = 0xfff;
TauZoolog 3:25cd717ad782 53
TauZoolog 3:25cd717ad782 54 // Definitions for software developer
TauZoolog 3:25cd717ad782 55 #define NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT ((long)300000) // 0 - not check keyboard input
TauZoolog 3:25cd717ad782 56 #define SAMPLING_FREQUENCY_DELAY 2 // microseconds
TauZoolog 3:25cd717ad782 57 #define CONSTANT_SIGNAL_LEVEL_FOR_TEST 0.2
TauZoolog 3:25cd717ad782 58 #define NUM_OF_CYCLES_BACK_TO_NORMAL 0 // User can play with this. Hysteresis, 0 - no hysteresis
TauZoolog 3:25cd717ad782 59
TauZoolog 3:25cd717ad782 60 float scale_for_predefined_output = (float)SCALE_FOR_PREDEFINED_OUTPUT;
TauZoolog 3:25cd717ad782 61 int sampling_frequency_delay = SAMPLING_FREQUENCY_DELAY;
TauZoolog 3:25cd717ad782 62 int delay_after_signal_transmission = DELAY_AFTER_SIGNAL_TRANSMISSION;
TauZoolog 3:25cd717ad782 63 bool use_filter_with_predefined_output = USE_FILTER_WITH_PREDEFINED_OUTPUT;
TauZoolog 3:25cd717ad782 64 int num_of_cycles_to_detect_threshold_crossing = NUM_OF_CYCLES_TO_DETECT_THRESHOLD_CROSSING;
TauZoolog 3:25cd717ad782 65
TauZoolog 3:25cd717ad782 66 int startPredefinedOutput = 0;
TauZoolog 3:25cd717ad782 67 int num_threshold_crossing = 0;
TauZoolog 3:25cd717ad782 68 int num_back_to_normal = 0;
TauZoolog 3:25cd717ad782 69 int signal_low_threshold = SIGNAL_LOW_THRESHOD;
TauZoolog 3:25cd717ad782 70
TauZoolog 3:25cd717ad782 71 int UserButtonPressed;
TauZoolog 3:25cd717ad782 72 long NumCycles;
TauZoolog 3:25cd717ad782 73
TauZoolog 3:25cd717ad782 74 // second-order sections filter variables - upto 8 sections
TauZoolog 3:25cd717ad782 75 #define MAX_SECTION_NUMBER 8
TauZoolog 3:25cd717ad782 76 int NumSections = sizeof(SOSMat)/sizeof(float)/6;
TauZoolog 3:25cd717ad782 77 int NumSectionsHP = sizeof(SOSMatHP)/sizeof(float)/6;
TauZoolog 3:25cd717ad782 78
TauZoolog 3:25cd717ad782 79 // Inputs
TauZoolog 3:25cd717ad782 80 float CurrInput [MAX_SECTION_NUMBER+1];
TauZoolog 3:25cd717ad782 81 float LastInput [MAX_SECTION_NUMBER+1];
TauZoolog 3:25cd717ad782 82 float LLastInput [MAX_SECTION_NUMBER+1];
TauZoolog 3:25cd717ad782 83
TauZoolog 3:25cd717ad782 84 float scaled_sounddata[AMOUNT_OF_SIGNIFICANT_SAMPLES];
TauZoolog 3:25cd717ad782 85 char FilterType[5][32];
TauZoolog 3:25cd717ad782 86 int LoopCount = 0;
TauZoolog 3:25cd717ad782 87
TauZoolog 3:25cd717ad782 88 inline void NOP()
TauZoolog 3:25cd717ad782 89 {
TauZoolog 3:25cd717ad782 90 __ASM volatile ("nop"); // one tick operation, Use to adjust frequency by slowing down the proccess
TauZoolog 3:25cd717ad782 91 }
TauZoolog 3:25cd717ad782 92
TauZoolog 3:25cd717ad782 93 // User Button Interrupt Service Routine (ISR)
TauZoolog 3:25cd717ad782 94 void pressed()
TauZoolog 3:25cd717ad782 95 {
TauZoolog 3:25cd717ad782 96 UserButtonPressed = 0;
TauZoolog 3:25cd717ad782 97 }
TauZoolog 3:25cd717ad782 98
TauZoolog 3:25cd717ad782 99 int checkKeyboardInput(void)
TauZoolog 3:25cd717ad782 100 {
TauZoolog 3:25cd717ad782 101 if (pc.readable())
TauZoolog 3:25cd717ad782 102 return 0; // means has input
TauZoolog 3:25cd717ad782 103 else
TauZoolog 3:25cd717ad782 104 return 1; // means no input
TauZoolog 3:25cd717ad782 105 }
TauZoolog 3:25cd717ad782 106
TauZoolog 3:25cd717ad782 107 #include "adc_init.h"
TauZoolog 3:25cd717ad782 108
TauZoolog 3:25cd717ad782 109 #include "iirlpnorm_filter.h"
TauZoolog 3:25cd717ad782 110
TauZoolog 3:25cd717ad782 111 #include "high_path_filter.h"
TauZoolog 3:25cd717ad782 112
TauZoolog 3:25cd717ad782 113 #include "no_filter.h"
TauZoolog 3:25cd717ad782 114
TauZoolog 3:25cd717ad782 115 #include "predefined_output.h"
TauZoolog 3:25cd717ad782 116
TauZoolog 3:25cd717ad782 117 void print_parameters()
TauZoolog 3:25cd717ad782 118 {
TauZoolog 3:25cd717ad782 119 printf("\n%s Digital Filter.\nSTART MAIN LOOP, use mode %d, loop #%d, number of sections: %d\n",
TauZoolog 3:25cd717ad782 120 FilterType[UseFilterMode], UseFilterMode, LoopCount,
TauZoolog 3:25cd717ad782 121 (UseFilterMode == IIRLPNORM_FILTER_MODE) ? NumSections : NumSectionsHP);
TauZoolog 3:25cd717ad782 122 if (UseFilterMode == PREDEFINED_OUTPUT_MODE) {
TauZoolog 3:25cd717ad782 123 printf("Signal threshould: %d\nSignal scale: %5.2f\nNumber of cycles to detect threshold crossing: %d\nDelay after signal in microseconds: %d\nUse filter: %s\n",
TauZoolog 3:25cd717ad782 124 signal_low_threshold, scale_for_predefined_output, num_of_cycles_to_detect_threshold_crossing, delay_after_signal_transmission,
TauZoolog 3:25cd717ad782 125 use_filter_with_predefined_output ? "Y" : "N");
TauZoolog 3:25cd717ad782 126 }
TauZoolog 3:25cd717ad782 127 }
TauZoolog 3:25cd717ad782 128
TauZoolog 3:25cd717ad782 129 // Main procedure
TauZoolog 3:25cd717ad782 130 int main() {
TauZoolog 3:25cd717ad782 131 char command[64];
TauZoolog 3:25cd717ad782 132 int isInputNotValid;
TauZoolog 3:25cd717ad782 133 int k;
TauZoolog 3:25cd717ad782 134 bool isSignalClipped = false;
TauZoolog 3:25cd717ad782 135
TauZoolog 3:25cd717ad782 136 strcpy(FilterType[0], "IIRLPNORM filter");
TauZoolog 3:25cd717ad782 137 strcpy(FilterType[1], "High Pass filter");
TauZoolog 3:25cd717ad782 138 strcpy(FilterType[2], "No filter");
TauZoolog 3:25cd717ad782 139 strcpy(FilterType[3], "Predefined Output");
TauZoolog 3:25cd717ad782 140 strcpy(FilterType[4], "Test Output");
TauZoolog 3:25cd717ad782 141
TauZoolog 3:25cd717ad782 142 ADC1_Init();
TauZoolog 3:25cd717ad782 143 DAC1_Init();
TauZoolog 3:25cd717ad782 144
TauZoolog 3:25cd717ad782 145 HAL_ADC_Start(&hadc1);
TauZoolog 3:25cd717ad782 146 HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
TauZoolog 3:25cd717ad782 147
TauZoolog 3:25cd717ad782 148 // define Dac Register for direct method of setting DAC value`s
TauZoolog 3:25cd717ad782 149 Dac_Reg = (uint32_t) (hdac1.Instance);
TauZoolog 3:25cd717ad782 150 Dac_Reg += __HAL_DHR12R1_ALIGNEMENT(DAC_ALIGN_12B_R);
TauZoolog 3:25cd717ad782 151
TauZoolog 3:25cd717ad782 152 typedef void(*functionPtr)(void);
TauZoolog 3:25cd717ad782 153 functionPtr FilterFunction;
TauZoolog 3:25cd717ad782 154
TauZoolog 3:25cd717ad782 155 // Assign ISR
TauZoolog 3:25cd717ad782 156 mybutton.fall(&pressed);
TauZoolog 3:25cd717ad782 157
TauZoolog 3:25cd717ad782 158 LoopCount++;
TauZoolog 3:25cd717ad782 159 print_parameters();
TauZoolog 3:25cd717ad782 160
TauZoolog 3:25cd717ad782 161 if (UseFilterMode == PREDEFINED_OUTPUT_MODE) {
TauZoolog 3:25cd717ad782 162 // Prepare scaled sound data
TauZoolog 3:25cd717ad782 163 isSignalClipped = false;
TauZoolog 3:25cd717ad782 164 for (k=0; k < AMOUNT_OF_SIGNIFICANT_SAMPLES; k++ ) {
TauZoolog 3:25cd717ad782 165 scaled_sounddata[k] = sounddata[k]* scale_for_predefined_output;
TauZoolog 3:25cd717ad782 166 if (scaled_sounddata[k] < (float)-1.0) {
TauZoolog 3:25cd717ad782 167 scaled_sounddata[k] = (float)-1.0;
TauZoolog 3:25cd717ad782 168 isSignalClipped = true;
TauZoolog 3:25cd717ad782 169 }
TauZoolog 3:25cd717ad782 170 if (scaled_sounddata[k] > (float)1.0) {
TauZoolog 3:25cd717ad782 171 scaled_sounddata[k] = (float)1.0;
TauZoolog 3:25cd717ad782 172 isSignalClipped = true;
TauZoolog 3:25cd717ad782 173 }
TauZoolog 3:25cd717ad782 174 }
TauZoolog 3:25cd717ad782 175 }
TauZoolog 3:25cd717ad782 176
TauZoolog 3:25cd717ad782 177 // Infinite loop
TauZoolog 3:25cd717ad782 178 while(true) {
TauZoolog 3:25cd717ad782 179 switch (UseFilterMode) {
TauZoolog 3:25cd717ad782 180 case IIRLPNORM_FILTER_MODE:
TauZoolog 3:25cd717ad782 181 FilterFunction = iirlpnorm_filter;
TauZoolog 3:25cd717ad782 182 printf("Running IIRLPNORM filter\n");
TauZoolog 3:25cd717ad782 183 memset(CurrInput, 0, sizeof(CurrInput));
TauZoolog 3:25cd717ad782 184 memset(LastInput, 0, sizeof(LastInput));
TauZoolog 3:25cd717ad782 185 memset(LLastInput, 0, sizeof(LLastInput));
TauZoolog 3:25cd717ad782 186 break;
TauZoolog 3:25cd717ad782 187 // end of case IIRLPNORM_FILTER_MODE
TauZoolog 3:25cd717ad782 188
TauZoolog 3:25cd717ad782 189 case HIGH_PASS_FILTER_MODE:
TauZoolog 3:25cd717ad782 190 FilterFunction = highpath_filter;
TauZoolog 3:25cd717ad782 191 printf("Running High Path filter\n");
TauZoolog 3:25cd717ad782 192 memset(CurrInput, 0, sizeof(CurrInput));
TauZoolog 3:25cd717ad782 193 memset(LastInput, 0, sizeof(LastInput));
TauZoolog 3:25cd717ad782 194 memset(LLastInput, 0, sizeof(LLastInput));
TauZoolog 3:25cd717ad782 195 break;
TauZoolog 3:25cd717ad782 196 // end of case HIGH_PASS_FILTER_MODE
TauZoolog 3:25cd717ad782 197
TauZoolog 3:25cd717ad782 198 case PREDEFINED_OUTPUT_MODE:
TauZoolog 3:25cd717ad782 199 FilterFunction = predefined_output;
TauZoolog 3:25cd717ad782 200 printf("Running Predefined Output\n");
TauZoolog 3:25cd717ad782 201 memset(CurrInput, 0, sizeof(CurrInput));
TauZoolog 3:25cd717ad782 202 memset(LastInput, 0, sizeof(LastInput));
TauZoolog 3:25cd717ad782 203 memset(LLastInput, 0, sizeof(LLastInput));
TauZoolog 3:25cd717ad782 204 num_threshold_crossing = 0;
TauZoolog 3:25cd717ad782 205 startPredefinedOutput = 0;
TauZoolog 3:25cd717ad782 206 num_back_to_normal = 0;
TauZoolog 3:25cd717ad782 207 break;
TauZoolog 3:25cd717ad782 208 // end of case PREDEFINED_OUTPUT_MODE
TauZoolog 3:25cd717ad782 209
TauZoolog 3:25cd717ad782 210 case NO_FILTER_MODE:
TauZoolog 3:25cd717ad782 211 FilterFunction = no_filter;
TauZoolog 3:25cd717ad782 212 printf("Running No filter\n");
TauZoolog 3:25cd717ad782 213 break;
TauZoolog 3:25cd717ad782 214 // end of case NO_FILTER_MODE
TauZoolog 3:25cd717ad782 215
TauZoolog 3:25cd717ad782 216 case TEST_OUTPUT_MODE:
TauZoolog 3:25cd717ad782 217 FilterFunction = test_output;
TauZoolog 3:25cd717ad782 218 printf("Running test output\n");
TauZoolog 3:25cd717ad782 219 break;
TauZoolog 3:25cd717ad782 220 // end of case TEST_OUTPUT_MODE
TauZoolog 3:25cd717ad782 221
TauZoolog 3:25cd717ad782 222 default:
TauZoolog 3:25cd717ad782 223 printf("Wrong User Filter Mode");
TauZoolog 3:25cd717ad782 224 // Default - no filter
TauZoolog 3:25cd717ad782 225 FilterFunction = no_filter;
TauZoolog 3:25cd717ad782 226 printf("No filter\n");
TauZoolog 3:25cd717ad782 227 break;
TauZoolog 3:25cd717ad782 228
TauZoolog 3:25cd717ad782 229 } // end of switch (UserFilterMode)
TauZoolog 3:25cd717ad782 230
TauZoolog 3:25cd717ad782 231 UserButtonPressed = 1;
TauZoolog 3:25cd717ad782 232 NumCycles = 0;
TauZoolog 3:25cd717ad782 233 ADCValueMax = 0;
TauZoolog 3:25cd717ad782 234 ADCValueMin = 0xfff;
TauZoolog 3:25cd717ad782 235
TauZoolog 3:25cd717ad782 236 // ====================================================
TauZoolog 3:25cd717ad782 237 // Start signal processing
TauZoolog 3:25cd717ad782 238 while(UserButtonPressed) {
TauZoolog 3:25cd717ad782 239 FilterFunction();
TauZoolog 3:25cd717ad782 240 NumCycles++;
TauZoolog 3:25cd717ad782 241 // Check keyboard input each NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT cycles
TauZoolog 3:25cd717ad782 242 if((NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT > 0) && (NumCycles % NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT == 0)) {
TauZoolog 3:25cd717ad782 243 // printf("Check keyboard input. Cycle: %d\n", NumCycles);
TauZoolog 3:25cd717ad782 244 UserButtonPressed = checkKeyboardInput();
TauZoolog 3:25cd717ad782 245 }
TauZoolog 3:25cd717ad782 246 } // end of while(UserButtonPressed)
TauZoolog 3:25cd717ad782 247 // End of signal processing
TauZoolog 3:25cd717ad782 248 // ====================================================
TauZoolog 3:25cd717ad782 249
TauZoolog 3:25cd717ad782 250 // User button pressed
TauZoolog 3:25cd717ad782 251 // Main loop working with ADC/DAC is stopped
TauZoolog 3:25cd717ad782 252 // Here should be functionality which should be done before start another loop with ADC/DAC
TauZoolog 3:25cd717ad782 253 printf("\nKeyboard key or User button pressed! Exit from main loop.\n");
TauZoolog 3:25cd717ad782 254
TauZoolog 3:25cd717ad782 255 // Init filter variables
TauZoolog 3:25cd717ad782 256 memset(CurrInput, 0, sizeof(CurrInput));
TauZoolog 3:25cd717ad782 257 memset(LastInput, 0, sizeof(LastInput));
TauZoolog 3:25cd717ad782 258 memset(LLastInput, 0, sizeof(LLastInput));
TauZoolog 3:25cd717ad782 259
TauZoolog 3:25cd717ad782 260 // Input new use mode
TauZoolog 3:25cd717ad782 261 isInputNotValid = 1;
TauZoolog 3:25cd717ad782 262 while (isInputNotValid) {
TauZoolog 3:25cd717ad782 263 printf("Please, select use mode: \n");
TauZoolog 3:25cd717ad782 264 printf("%d - IIRLPNORM filter\n", IIRLPNORM_FILTER_MODE);
TauZoolog 3:25cd717ad782 265 printf("%d - High Pass filter\n", HIGH_PASS_FILTER_MODE);
TauZoolog 3:25cd717ad782 266 printf("%d - No filter\n", NO_FILTER_MODE);
TauZoolog 3:25cd717ad782 267 printf("%d - Predefined Output\n", PREDEFINED_OUTPUT_MODE);
TauZoolog 3:25cd717ad782 268 printf("Input your choice or hit Enter to continue main loop in the same use mode: ");
TauZoolog 3:25cd717ad782 269 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 270 gets(command);
TauZoolog 3:25cd717ad782 271 // printf("Command:%s; command length:%d\n", command, strlen(command));
TauZoolog 3:25cd717ad782 272 if (strlen(command)-2 != 0 ) {
TauZoolog 3:25cd717ad782 273 // convert characters to integer; if convertion not succeeded return 0 (i.e. IIRLPNORM_FILTER_MODE)
TauZoolog 3:25cd717ad782 274 UseFilterMode = atoi(&command[strlen(command)-2]);
TauZoolog 3:25cd717ad782 275 }
TauZoolog 3:25cd717ad782 276
TauZoolog 3:25cd717ad782 277 if (UseFilterMode >= IIRLPNORM_FILTER_MODE && UseFilterMode <= PREDEFINED_OUTPUT_MODE) {
TauZoolog 3:25cd717ad782 278 if (UseFilterMode == PREDEFINED_OUTPUT_MODE) {
TauZoolog 3:25cd717ad782 279 printf("Enter signal amplitude threshold to start generate predefined signal (default - %d): ", SIGNAL_LOW_THRESHOD);
TauZoolog 3:25cd717ad782 280 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 281 gets(command);
TauZoolog 3:25cd717ad782 282 signal_low_threshold = atoi(command);
TauZoolog 3:25cd717ad782 283 if (signal_low_threshold == 0) {
TauZoolog 3:25cd717ad782 284 printf("\nWrong input - default is taken\n");
TauZoolog 3:25cd717ad782 285 signal_low_threshold = SIGNAL_LOW_THRESHOD;
TauZoolog 3:25cd717ad782 286 }
TauZoolog 3:25cd717ad782 287
TauZoolog 3:25cd717ad782 288 isSignalClipped = true;
TauZoolog 3:25cd717ad782 289 while (isSignalClipped) {
TauZoolog 3:25cd717ad782 290 printf("Enter amplitude scale parameter for predefined signal (default - %5.2f): ", SCALE_FOR_PREDEFINED_OUTPUT);
TauZoolog 3:25cd717ad782 291 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 292 gets(command);
TauZoolog 3:25cd717ad782 293 scale_for_predefined_output = atof(command);
TauZoolog 3:25cd717ad782 294 if (scale_for_predefined_output == float(0.0)) {
TauZoolog 3:25cd717ad782 295 printf("\nWrong input - default is taken\n");
TauZoolog 3:25cd717ad782 296 scale_for_predefined_output = SCALE_FOR_PREDEFINED_OUTPUT;
TauZoolog 3:25cd717ad782 297 }
TauZoolog 3:25cd717ad782 298 isSignalClipped = false;
TauZoolog 3:25cd717ad782 299 for (k=0; k < AMOUNT_OF_SIGNIFICANT_SAMPLES; k++ ) {
TauZoolog 3:25cd717ad782 300 scaled_sounddata[k] = sounddata[k]* scale_for_predefined_output;
TauZoolog 3:25cd717ad782 301 if (scaled_sounddata[k] < (float)-1.0) {
TauZoolog 3:25cd717ad782 302 scaled_sounddata[k] = (float)-1.0;
TauZoolog 3:25cd717ad782 303 isSignalClipped = true;
TauZoolog 3:25cd717ad782 304 }
TauZoolog 3:25cd717ad782 305 if (scaled_sounddata[k] > (float)1.0) {
TauZoolog 3:25cd717ad782 306 scaled_sounddata[k] = (float)1.0;
TauZoolog 3:25cd717ad782 307 isSignalClipped = true;
TauZoolog 3:25cd717ad782 308 }
TauZoolog 3:25cd717ad782 309 }
TauZoolog 3:25cd717ad782 310 if (isSignalClipped) {
TauZoolog 3:25cd717ad782 311 printf("With amplitude scale %5.2f, signal will be clipped !!!. Select smaller scale.\n",scale_for_predefined_output);
TauZoolog 3:25cd717ad782 312 }
TauZoolog 3:25cd717ad782 313 } // end of while (isSignalClipped)
TauZoolog 3:25cd717ad782 314 printf("Enter delay after signal in microseconds (default - %d): ", DELAY_AFTER_SIGNAL_TRANSMISSION);
TauZoolog 3:25cd717ad782 315 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 316 gets(command);
TauZoolog 3:25cd717ad782 317 delay_after_signal_transmission = atoi(command);
TauZoolog 3:25cd717ad782 318 if (delay_after_signal_transmission == 0) {
TauZoolog 3:25cd717ad782 319 printf("\nWrong input - default is taken\n");
TauZoolog 3:25cd717ad782 320 delay_after_signal_transmission = DELAY_AFTER_SIGNAL_TRANSMISSION;
TauZoolog 3:25cd717ad782 321 }
TauZoolog 3:25cd717ad782 322 printf("Enter number of cycles to detect threshold crossing (default - %d): ", NUM_OF_CYCLES_TO_DETECT_THRESHOLD_CROSSING);
TauZoolog 3:25cd717ad782 323 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 324 gets(command);
TauZoolog 3:25cd717ad782 325 num_of_cycles_to_detect_threshold_crossing = atoi(command);
TauZoolog 3:25cd717ad782 326 if (num_of_cycles_to_detect_threshold_crossing == 0) {
TauZoolog 3:25cd717ad782 327 printf("\nWrong input - default is taken\n");
TauZoolog 3:25cd717ad782 328 num_of_cycles_to_detect_threshold_crossing = NUM_OF_CYCLES_TO_DETECT_THRESHOLD_CROSSING;
TauZoolog 3:25cd717ad782 329 }
TauZoolog 3:25cd717ad782 330 printf("Use high pass filter with predefined output: Y/N (default - %s): ",
TauZoolog 3:25cd717ad782 331 USE_FILTER_WITH_PREDEFINED_OUTPUT ? "Y" : "N" );
TauZoolog 3:25cd717ad782 332 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 333 gets(command);
TauZoolog 3:25cd717ad782 334 if ((command[0] == 'Y') || (command[0] == 'y')) {
TauZoolog 3:25cd717ad782 335 use_filter_with_predefined_output = true;
TauZoolog 3:25cd717ad782 336 } else if ((command[0] == 'N') || (command[0] == 'n')) {
TauZoolog 3:25cd717ad782 337 use_filter_with_predefined_output = false;
TauZoolog 3:25cd717ad782 338 } else {
TauZoolog 3:25cd717ad782 339 use_filter_with_predefined_output = USE_FILTER_WITH_PREDEFINED_OUTPUT;
TauZoolog 3:25cd717ad782 340 }
TauZoolog 3:25cd717ad782 341
TauZoolog 3:25cd717ad782 342 if (delay_after_signal_transmission == 0) {
TauZoolog 3:25cd717ad782 343 delay_after_signal_transmission = USE_FILTER_WITH_PREDEFINED_OUTPUT;
TauZoolog 3:25cd717ad782 344 }
TauZoolog 3:25cd717ad782 345 memset(command, 0, sizeof(command));
TauZoolog 3:25cd717ad782 346 }
TauZoolog 3:25cd717ad782 347 isInputNotValid = 0;
TauZoolog 3:25cd717ad782 348 } else if (UseFilterMode == TEST_OUTPUT_MODE) {
TauZoolog 3:25cd717ad782 349 isInputNotValid = 0;
TauZoolog 3:25cd717ad782 350 } else {
TauZoolog 3:25cd717ad782 351 printf("\nWrong input - try again\n");
TauZoolog 3:25cd717ad782 352 }
TauZoolog 3:25cd717ad782 353 }
TauZoolog 3:25cd717ad782 354 LoopCount++;
TauZoolog 3:25cd717ad782 355 print_parameters();
TauZoolog 3:25cd717ad782 356
TauZoolog 3:25cd717ad782 357 } // end while(True)
TauZoolog 3:25cd717ad782 358 }