Ignore:
Timestamp:
Jun 18, 2010, 8:16:53 PM (12 years ago)
Author:
nolte
Message:

+Added the functionality to the autocorrelationpresentation
+Created another Sample to show how to choose a key from the autokey analyser list

descriptions will follow soon

Location:
trunk/CrypPlugins/AutokorrelationFunction
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/AutokorrelationFunction/AutocorrelationPresentation.xaml

    r1666 r1675  
    88             mc:Ignorable="d"
    99             d:DesignHeight="300" d:DesignWidth="300">
    10     <Grid>
    11         <custom:HistogramChart Name="dingens">
    12            
     10    <Grid Name="Grid" Width="300">
     11        <Grid.LayoutTransform>
     12            <ScaleTransform x:Name="scaler" ScaleX="1" ScaleY="1"/>
     13        </Grid.LayoutTransform>
     14
     15        <TextBlock TextAlignment="Center" FontSize="20" Foreground="DarkBlue"  FontFamily="Academy" OpacityMask="Turquoise" Text="Shift values" Height="20" VerticalAlignment="Bottom"></TextBlock>
     16
     17        <custom:HistogramChart Name="histogram" Margin="0,0,0,19">               
     18
    1319        </custom:HistogramChart>
     20
    1421    </Grid>
     22   
     23   
    1524</UserControl>
  • trunk/CrypPlugins/AutokorrelationFunction/AutocorrelationPresentation.xaml.cs

    r1666 r1675  
    2525        {
    2626            InitializeComponent();
     27            SizeChanged += new SizeChangedEventHandler(AutocorrelationPresentation_SizeChanged);
     28        }
     29
     30        private void AutocorrelationPresentation_SizeChanged(object sender, SizeChangedEventArgs e)
     31        {
     32            updateScaling();
     33        }
     34
     35        private void updateScaling()
     36        {
     37            this.scaler.ScaleX = this.ActualWidth / this.Grid.Width;
     38            this.scaler.ScaleY = this.scaler.ScaleX;
    2739        }
    2840    }
  • trunk/CrypPlugins/AutokorrelationFunction/AutokorrelationFunction.cs

    r1666 r1675  
    2525using Cryptool.PluginBase.Analysis;
    2626using System.Windows.Media;
     27using Cryptool.PluginBase.Utils.Graphics.Diagrams.Histogram;
    2728
    2829namespace Cryptool.Plugins.AutokorrelationFunction
     
    3536        #region Private Variables
    3637
    37         private readonly AutokorrelationFunctionSettings settings = new AutokorrelationFunctionSettings();
    38         private AutocorrelationPresentation presentation = new AutocorrelationPresentation();
     38        private readonly AutokorrelationFunctionSettings settings;
     39        private AutocorrelationPresentation presentation;
    3940
    4041        private String cipher = "";                                     //The cipher to be analysed
     
    4344        private String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";         //used alphabet
    4445        private double same;                                            //Found same letter counter
     46        private double average;                                         //Holds the average value of the found matches
    4547        private double[] ak;                                            // Autokorrelation Values
     48        private double[] top;
     49        private HistogramElement bar;                                   
     50        private HistogramDataSource data;
    4651
    4752        #endregion
     
    8792        #region IPlugin Members
    8893
     94        public AutokorrelationFunction()
     95        {
     96            settings = new AutokorrelationFunctionSettings();
     97            presentation = new AutocorrelationPresentation();
     98            HistogramElement bar = new HistogramElement(0, 0, "");
     99            data = new HistogramDataSource();
     100
     101        }
    89102        public ISettings Settings
    90103        {
     
    108121        public void Execute()
    109122        {
    110             // testing
    111             presentation.dingens.SetBackground(Brushes.Red);
    112             presentation.dingens.SetHeadline("Here we go.. much to do!");
    113             // testing-end
     123
    114124//START------------------------------------------------------------------------------------------------------------
    115125//Preparations for the Analyse-------------------------------------------------------------------------------------
     
    121131
    122132            ak = new double[cipher.Length];                     //initialise ak[]...there are n possible shifts where n is cipher.length
     133
     134            presentation.histogram.SetBackground(Brushes.Beige);              //sets the background colour for the quickwatch
     135            presentation.histogram.SetHeadline("Autocorrelation matches");    //sets its title
    123136
    124137//-----------------------------------------------------------------------------------------------------------------
     
    139152                                    }
    140153                            }
    141                        
    142                 //...and save the count for the matches at the shift position
    143                             ak[t] = same;
     154
     155                try
     156                {
     157                    //...and save the count for the matches at the shift position
     158                    ak[t] = same;
     159                }
     160                catch
     161                {
     162                }
    144163                    }
    145164
    146             //For all observed shifts...
     165            average = averageMatch(ak);                         //find the average value of matches
     166            data.ValueCollection.Clear();
     167
     168            //for all observed shifts...
    147169                    for(int y=1;y<ak.Length;y++)
    148                     {
    149 
     170                    {             
    150171                //find the one with the highest match count...
    151172                            if(ak[y] > probablekorr)
     
    156177                    }
    157178
     179            //find the top 13 matches...
     180            if (ak.Length > 11)
     181            {
     182                ak = findTopThirteen(ak);
     183            }
     184
     185            for (int y = 1; y < ak.Length; y++)
     186            {
     187                if (ak[y] > -1)                         //Adds a bar into the presentation if it is higher then the average matches
     188                {
     189                    bar = new HistogramElement(ak[y], ak[y], "" + y);
     190                    data.ValueCollection.Add(bar);
     191                }
     192            }
     193
     194            presentation.histogram.SetHeadline("Highest match count " + probablekorr + " with shift: " + probablelength);
     195
     196            if(data != null)
     197            {
     198                presentation.histogram.ShowData(data);
     199            }
     200
    158201            OutputLength = probablelength;              //sending the keylength via output
    159202            OnPropertyChanged("OutputLength");         
     
    177220        public void Stop()
    178221        {
     222            presentation.histogram.SetBackground(Brushes.LightGray);
    179223        }
    180224
     
    232276        }
    233277
     278
    234279//---------------------------------------------------------------------------------------------------------------------------------------
    235 
    236 
     280//AVERAGE MATCHES COUNT------------------------------------------------------------------------------------------------------------------
     281
     282        /// <summary>
     283        /// Calculates the average value for all matches in the autokorrelation
     284        /// </summary>
     285        private double averageMatch(double[] ak)
     286        {
     287            double average = 0;
     288
     289            for (int y = 0; y < ak.Length; y++)
     290            {
     291                average += ak[y];
     292            }
     293
     294            average = average / ak.Length;
     295
     296            return average;
     297        }
     298
     299//---------------------------------------------------------------------------------------------------------------------------------------
     300//FIND TOP 13----------------------------------------------------------------------------------------------------------------------------
     301
     302        private double[] findTopThirteen(double[] ak)
     303        {
     304            double[] top = ak;
     305            int thrownaway = 0;
     306
     307            for(int match=0; match < probablekorr; match++)
     308            {
     309                for(int x=0;x<ak.Length;x++)
     310                {
     311                    if(top[x] == match)
     312                    {
     313                        top[x] = -1;
     314                        thrownaway++;
     315                    }
     316                    if(thrownaway == (ak.Length)-13)
     317                    {
     318                        return top;
     319                    }
     320
     321                }
     322            }
     323            return top;
     324        }
     325
     326
     327
     328
     329
     330//---------------------------------------------------------------------------------------------------------------------------------------
    237331
    238332        #endregion
Note: See TracChangeset for help on using the changeset viewer.